搜索抓取

蜘蛛来一次不只抓 HTML:资源请求也在花抓取预算

蜘蛛访问页面时,除了 HTML 还会取回 CSS、JS、图片等资源,这些请求同样占用抓取配额。本文说明哪些资源请求属于无效消耗,如何通过修复 404、统一资源地址、交给 CDN 缓存等方式减少浪费,以及怎样从服务器日志判断资源抓取在整体抓取中的占比。

搜索抓取

蜘蛛来一次不只抓 HTML:资源请求也在花抓取预算

很多人看服务器日志时只盯着 HTML 请求,觉得蜘蛛来了一趟就是抓了一个页面。实际上一次页面访问往往伴随一串附带请求:样式表、脚本、字体、图片,甚至页面里引用的 JSON 接口。这些请求同样占用抓取配额,也会给服务器带来负载。理解这一点,有助于判断抓取预算到底花在了哪儿。

一次抓取不等于一个请求

蜘蛛拿到一个 URL 后,先取回 HTML,这一步是必须的。之后为了理解页面结构、确认内容是否完整渲染,它可能继续取回页面里引用的外部资源。对以文本为主的站点,这部分开销不大;但对模板复杂、第三方脚本多的站点,一个页面可能引出几十个资源请求。

需要说明的是,不同搜索引擎对资源抓取的处理方式并不一致,有的会完整取回 CSS 与 JS 用于渲染,有的只做有限尝试。判断自己站点属于哪种情况,最直接的办法还是看访问日志里同一时间段的请求分布,而不是凭印象判断。

哪些资源请求属于无效消耗

  • 返回 404 的脚本和样式:多半来自改版残留或错误路径,蜘蛛每次走到页面都会再撞一次。
  • 带版本参数重复的资源:同一个文件因为参数不同被当成多个地址,抓取次数成倍增加。
  • 未压缩的大图与封面图:几百 KB 的图片对判断页面内容帮助有限,却要占用带宽和抓取时间。
  • 被反复引用的第三方脚本:统计、客服、广告组件的域名不在你的控制范围内,抓取行为也难以预测。

减少无效资源抓取的做法

  1. 统一资源地址:去掉无意义的查询参数,用文件名或构建号管理版本,避免同一个文件存在多个地址。
  2. 修复 404:日志里周期性出现的资源 404,值得单独排查一次,收益往往比新增几个页面更明显。
  3. 让缓存层承担重复请求:静态资源交给 CDN 后,回源次数会明显下降,蜘蛛重复取回的成本也随之降低。
  4. 合并与压缩:减少请求数量通常比压缩单个文件更直接。
  5. 谨慎使用 robots.txt 屏蔽资源:屏蔽 CSS 与 JS 可能让蜘蛛拿不到完整的页面结构,反而影响它对页面内容和链接的判断,渲染必需的资源一般不建议屏蔽。
屏蔽资源前先想清楚:你是想少让它抓几个文件,还是想让它看不清页面。后者带来的损失通常更大。

体积和数量,哪个更值得管

从抓取节奏看,请求数量往往比单个体积影响更大。每个请求都要经历解析、连接、等待响应,抓取时间被切成许多小段。压缩图片能省带宽,但把二十个请求并成三个,通常更快看到抓取节奏的变化。

从日志里看资源抓取占比

在访问日志里按扩展名做一次粗筛:统计 CSS、JS、图片等后缀的请求量,再和 HTML 页面请求量对比。如果资源请求占了大部分,且其中相当比例是 404 或重复地址,就说明抓取配额被消耗在了与内容无关的地方。这个动作不需要复杂工具,一次筛选或一条命令就能完成。

什么时候不用太在意

内容型小站、模板简单的站点,资源开销本来就低,不必为此专门调整架构。真正值得关注的是两种信号:资源请求数长期远超 HTML 请求数;以及资源 404 长期存在,抓取时间集中在少数几个模板页上。

抓取预算并不是一个固定数字,它随站点规模、更新频率、服务器响应速度变化。与其猜测额度,不如先把明显的浪费止住:修掉 404,统一资源地址,把静态文件交给缓存层。做完这些再回头看日志,蜘蛛花在 HTML 上的比例通常会有所变化。