很多人看服务器日志时只盯着 HTML 请求,觉得蜘蛛来了一趟就是抓了一个页面。实际上一次页面访问往往伴随一串附带请求:样式表、脚本、字体、图片,甚至页面里引用的 JSON 接口。这些请求同样占用抓取配额,也会给服务器带来负载。理解这一点,有助于判断抓取预算到底花在了哪儿。
一次抓取不等于一个请求
蜘蛛拿到一个 URL 后,先取回 HTML,这一步是必须的。之后为了理解页面结构、确认内容是否完整渲染,它可能继续取回页面里引用的外部资源。对以文本为主的站点,这部分开销不大;但对模板复杂、第三方脚本多的站点,一个页面可能引出几十个资源请求。
需要说明的是,不同搜索引擎对资源抓取的处理方式并不一致,有的会完整取回 CSS 与 JS 用于渲染,有的只做有限尝试。判断自己站点属于哪种情况,最直接的办法还是看访问日志里同一时间段的请求分布,而不是凭印象判断。
哪些资源请求属于无效消耗
- 返回 404 的脚本和样式:多半来自改版残留或错误路径,蜘蛛每次走到页面都会再撞一次。
- 带版本参数重复的资源:同一个文件因为参数不同被当成多个地址,抓取次数成倍增加。
- 未压缩的大图与封面图:几百 KB 的图片对判断页面内容帮助有限,却要占用带宽和抓取时间。
- 被反复引用的第三方脚本:统计、客服、广告组件的域名不在你的控制范围内,抓取行为也难以预测。
减少无效资源抓取的做法
- 统一资源地址:去掉无意义的查询参数,用文件名或构建号管理版本,避免同一个文件存在多个地址。
- 修复 404:日志里周期性出现的资源 404,值得单独排查一次,收益往往比新增几个页面更明显。
- 让缓存层承担重复请求:静态资源交给 CDN 后,回源次数会明显下降,蜘蛛重复取回的成本也随之降低。
- 合并与压缩:减少请求数量通常比压缩单个文件更直接。
- 谨慎使用 robots.txt 屏蔽资源:屏蔽 CSS 与 JS 可能让蜘蛛拿不到完整的页面结构,反而影响它对页面内容和链接的判断,渲染必需的资源一般不建议屏蔽。
屏蔽资源前先想清楚:你是想少让它抓几个文件,还是想让它看不清页面。后者带来的损失通常更大。
体积和数量,哪个更值得管
从抓取节奏看,请求数量往往比单个体积影响更大。每个请求都要经历解析、连接、等待响应,抓取时间被切成许多小段。压缩图片能省带宽,但把二十个请求并成三个,通常更快看到抓取节奏的变化。
从日志里看资源抓取占比
在访问日志里按扩展名做一次粗筛:统计 CSS、JS、图片等后缀的请求量,再和 HTML 页面请求量对比。如果资源请求占了大部分,且其中相当比例是 404 或重复地址,就说明抓取配额被消耗在了与内容无关的地方。这个动作不需要复杂工具,一次筛选或一条命令就能完成。
什么时候不用太在意
内容型小站、模板简单的站点,资源开销本来就低,不必为此专门调整架构。真正值得关注的是两种信号:资源请求数长期远超 HTML 请求数;以及资源 404 长期存在,抓取时间集中在少数几个模板页上。
抓取预算并不是一个固定数字,它随站点规模、更新频率、服务器响应速度变化。与其猜测额度,不如先把明显的浪费止住:修掉 404,统一资源地址,把静态文件交给缓存层。做完这些再回头看日志,蜘蛛花在 HTML 上的比例通常会有所变化。