搜索抓取

蜘蛛也会抓 CSS、JS 和图片:资源请求占掉的抓取额度与带宽

很多站点只盯着 HTML 有没有被抓,却忽略了页面引用的 CSS、JS、图片同样会产生抓取请求。本文说明蜘蛛为什么要抓资源文件、资源抓取常见的几个坑(参数化地址、被 robots 误挡、第三方域名、超大文件),以及怎样从服务器日志里判断,并给出减轻源站压力的实用做法。

搜索抓取

蜘蛛也会抓 CSS、JS 和图片:资源请求占掉的抓取额度与带宽

多数人只盯着 HTML 页面有没有被抓,很少留意同一批抓取里,蜘蛛还会去拿页面引用的 CSS、JavaScript、图片和字体文件。这些资源不参与“收录”,但会实实在在占用抓取额度、带宽和服务器连接数。

蜘蛛为什么要抓这些资源

搜索引擎要判断页面长什么样、内容是否完整,就需要把页面渲染出来。渲染依赖样式表和脚本,所以抓取 HTML 之后,往往还会按页面里的引用地址再去请求 CSS 和 JS。图片通常不是渲染必需,但在判断图片与页面主题相关性、生成缩略图等场景下也可能被请求。

换句话说,一次“页面抓取”在后端常常对应好几个 HTTP 请求。如果页面引用了十几个资源,实际产生的请求量可能是页面数的几倍。

资源抓取上常见的几个坑

  • 资源地址带参数或时间戳:每次发布都生成新地址,蜘蛛会当成新资源反复抓取,旧地址还留在记录里。
  • CSS、JS 被 robots.txt 挡住:抓不到样式和脚本,渲染出来的页面可能缺内容,判断容易出错。
  • 资源放在第三方域名:跨域请求由别人的服务器承担,但对方响应慢或做了限速,渲染就会被拖住。
  • 资源地址由脚本动态拼接:第一轮抓取时地址可能还不存在,回报 404,之后要靠重新发现。
  • 体积过大的打包文件:单个文件从几百 KB 到几 MB,抓取和渲染都要花更长时间。

从服务器日志里看资源被抓的情况

在日志里筛 css、js、png、jpg、woff 这类后缀,能看到资源被抓的次数和返回码。几个判断点:

  1. 资源请求数远大于 HTML 请求数,说明页面里外链资源偏多,可以考虑合并或精简。
  2. 同一资源出现大量不同参数地址,多半是版本号或时间戳的写法有问题。
  3. 资源返回 403、404 的比例偏高,说明有地址写错,或者目录被规则误挡。
  4. 资源响应时间明显高于 HTML,说明静态文件没有走缓存或 CDN。

服务器稳定性:叠加起来的那部分压力

资源请求通常比 HTML 更容易命中缓存,但如果站点没做静态资源缓存,每个请求都会打到源站。抓取高峰时,HTML 与资源请求叠在一起,连接数和带宽会同时上涨。表现往往是首字节变慢、静态文件偶尔超时,进而影响整站的抓取节奏。

比较稳的做法是把静态资源交给 CDN 或反向代理,设置合理的缓存头,让重复请求不落到源站。源站只处理真正需要动态计算的部分,抓取压力会平缓很多。

抓取额度是整站共享的。资源请求多了,留给新页面和更新页面的份额就少了,这是不少站点感觉“蜘蛛来得少了”却找不到原因的地方。

几条实用建议

  1. 给静态资源加版本号时用文件内容哈希,写在文件名里,而不是每次都换查询参数。
  2. 确认 CSS、JS 不被 robots.txt 拦截,也别在资源目录上误加限制规则。
  3. 合并压缩脚本和样式,减少请求数量;图片按实际显示尺寸输出,别把大图缩着用。
  4. 静态资源统一走 CDN,源站日志里就能干净地看出 HTML 的抓取情况。
  5. 定期看资源被抓的返回码分布,把长期 404 的地址清理掉。

资源抓取本身不是问题,问题在于它是否被无意义地放大。把资源地址稳定下来、请求数量压下去、缓存扛住重复请求,蜘蛛花在整站上的时间才更划算。