搜索抓取

蜘蛛不只抓页面:图片、脚本与样式表该不该让它抓

蜘蛛抓取的不只是页面,图片、CSS、JS 这些静态资源同样会进入抓取队列,并占用服务器连接。本文说明哪些资源建议放开、哪些可以考虑屏蔽,robots.txt 处理时的两个坑,以及怎样从抓取日志估算资源请求的占比,帮你在渲染需求和抓取效率之间找到平衡。

搜索抓取

蜘蛛不只抓页面:图片、脚本与样式表该不该让它抓

看抓取日志时,很多人只盯着内容页,实际上图片、JavaScript、CSS 这类静态资源的请求往往占了相当一部分。它们本身不带来排名,却实实在在占用蜘蛛的抓取时间和服务器的连接数。搞清楚这部分开销花在哪,是提高 URL 发现效率的前提。

为什么蜘蛛会去抓静态资源

页面里的 img 标签、外链样式表和脚本文件,都是可被抓取的 URL。蜘蛛解析 HTML 时会把它们当成资源记录下来,按自己的节奏去请求。常见的原因有三个:一是渲染需要,现在的搜索引擎要加载 CSS、执行 JS 之后才能看到页面真实内容;二是资源本身可以进入图片等垂直索引;三是资源地址也被当作站点结构的一部分被收录在队列里。

所以资源抓取不是异常现象,问题在于比例是否合理。如果一半以上的请求都花在资源上,内容页的发现速度自然会慢下来。

哪些资源建议放开

  • 主要样式表和负责内容渲染的脚本:如果页面依赖客户端渲染,挡掉它们蜘蛛拿到的就是空壳。
  • 首屏图和正文配图:图片搜索仍有流量入口,保留可抓取通常利大于弊。
  • 渲染必需的数据接口:如果模板要靠它取内容,别在 robots 里一并挡掉。

哪些资源可以考虑挡掉

  • 后台脚本、编辑器、埋点与统计代码,这些对用户和蜘蛛都没有内容价值。
  • 同图多尺寸的缩略图、带各种参数反复生成的图片地址,容易成倍膨胀 URL 数量。
  • 字体文件、图标库、装饰性素材,对内容理解帮助有限,体积却不小。
  • 测试环境、灰度域名下的资源,避免和正式站抢抓取机会。

用 robots.txt 挡资源时的两个坑

第一个坑是屏蔽了渲染依赖的资源,蜘蛛仍然能拿到 HTML,但渲染失败,后续从页面里提取链接的环节也会受影响。第二个坑是屏蔽并不等于这些 URL 不存在,它只是不再被请求;如果这些地址已经被大量发现,仍会在队列里占位置。

屏蔽只能减少请求量,减少不了 URL 被发现的可能。真正想控制数量,应该从源头解决——页面里就不要再输出那些冗余地址。

资源自身的不稳定也会拖慢内容抓取

同一个域名下如果资源经常超时、返回 5xx,或者单个文件体积过大,蜘蛛在这个域名上的整体体验会变差,后续内容页的请求可能被延后、降低频率。把 CSS 和 JS 交给 CDN、开启缓存、压缩体积、合并零碎请求,收益往往比反复调整抓取设置更直接。

从抓取日志估算资源抓取的占比

  1. 按后缀统计请求量,把 .css、.js、图片后缀单独拉出来看比例。
  2. 统计这些资源请求的响应码分布,超时和 5xx 多的地方优先处理。
  3. 看资源请求是否集中在少数几个模板页,如果是,说明某个页面的资源引用写得过重。
  4. 屏蔽前后做对比,观察内容页的抓取条数有没有上升,而不是只看总请求量下降。

另外,Sitemap 里不建议混入资源 URL,图片资源如果有必要,可以用单独的图片 Sitemap 提交,避免把内容页的发现通道挤占掉。

一个简单的取舍原则

拿掉这个资源,蜘蛛看到的页面和用户看到的还差不多吗?如果差不多,就可以考虑屏蔽;如果差得远,就保留它,并把它做得足够稳定。资源抓取不是越小越好,而是要让每一次请求都落在能带来内容价值的地方。