搜索抓取

蜘蛛会抓图片、CSS 和 JS 吗:资源文件的抓取边界

搜索蜘蛛的请求里除了 HTML,还有大量 CSS、JS、图片和字体。这些资源抓取与 HTML 共用同一份抓取额度,也直接决定蜘蛛能不能正确渲染页面。本文说明资源抓取的范围、常见拦截错误,以及怎样从服务器日志判断资源抓取是在帮忙还是在浪费。

搜索抓取

蜘蛛会抓图片、CSS 和 JS 吗:资源文件的抓取边界

多数人谈抓取,默认对象是 HTML 页面。但把服务器日志逐条翻一遍会发现,蜘蛛的请求里往往混着 CSS、JS、图片、字体,甚至 favicon。这些资源请求同样占用抓取额度,也直接影响蜘蛛能不能看懂你的页面。

搜索蜘蛛会抓资源文件吗

会,但目的和抓 HTML 不同。HTML 是内容载体,被抓取后进入解析与索引流程;CSS 和 JS 多数时候是为了渲染,让蜘蛛看到用户实际看到的 DOM 结构。图片则可能进入图片搜索,有自己的一套抓取和索引逻辑,与网页索引并不完全同步。

字体、视频、大体积附件和页面里的接口请求(XHR、fetch)通常不是必抓项。蜘蛛可能跳过,也可能因为渲染需要而请求其中一部分。也就是说,资源抓取不是全有或全无,而是按需发生。

资源抓取和 HTML 抓取共用同一份额度

同一个站点,蜘蛛一天愿意发多少请求大致是有上限的。如果每个页面都挂几十个带随机参数的静态资源,比如 style.css?t=1712345678,蜘蛛看到的就是大量互不相同的一次性 URL。抓取次数被分散到资源上,留给内页 HTML 的额度自然就少了。

这是“页面重量”话题的另一面:不只是 HTML 体积大,而是页面牵连的外部资源多、URL 唯一化严重。

资源抓不到时,页面会被看错

如果 CSS 被 robots.txt 屏蔽,或 CDN 按 UA 做了拦截,蜘蛛拿到的就是一个没有样式的裸 HTML。它可能把靠 CSS 隐藏的内容当成正常内容,也可能看不到 JS 渲染出来的链接和正文。移动端适配、懒加载、折叠导航、选项卡,都容易在这里出问题。

资源的可访问性不是前端体验的小事,它是蜘蛛理解页面的前提。

几个常见的坑

  • robots.txt 里写了 Disallow: /*.css 或 /*.js,渲染直接失败,一般不建议屏蔽整类资源
  • 静态资源目录要求登录、带 Referer 校验或签名参数,蜘蛛的裸请求返回 403
  • CDN 或 WAF 把蜘蛛 UA 当成异常流量,返回验证码页或空响应
  • 图片先用占位图占位、再由 JS 替换 src,蜘蛛抓到的只是占位图
  • 每次发布都给资源加随机后缀,制造出海量只在当天有效的 URL

怎么安排更省抓取

  1. 静态资源保持稳定 URL,用版本目录或内容哈希区分版本,而不是随机查询参数
  2. 让主要 CSS、JS 和正文图片在日志里稳定返回 200,而不是 404、403、302
  3. robots.txt 只屏蔽确实不想被抓的目录,别顺手把整个资源目录一起挡住
  4. 大文件和不参与渲染的资源,可以放到独立域名或对象存储,与主站抓取额度分开
  5. 定期用日志核对:蜘蛛请求资源时的状态码、响应时间和 UA 是否一致

从日志里看什么

把蜘蛛访问按扩展名分类,统计资源请求占比。如果资源请求明显多于 HTML 请求,说明抓取额度在被消耗在次要目标上;如果资源请求几乎全是 403 或 404,说明渲染链路本身有问题。这两类情况的排查方向完全不同,但都藏在同一份日志里。

资源抓取不会直接带来收录,但它决定了蜘蛛看到的那个页面长什么样。把它当成抓取链路的一部分来维护,比只盯着 HTML 更接近真实情况。