蜘蛛抓取的不只是 HTML
很多站点把注意力放在页面 URL 上,日志里却能看到大量 .css、.js、.jpg、.woff2 的请求同样来自蜘蛛。原因不复杂:搜索引擎要渲染页面,就得把页面引用的资源一起取回来。这些请求和你关心的 URL 共用同一个主机,自然也会占用抓取额度。
对小站来说,资源抓取通常不构成问题;但当页面数量、模板复杂度、图片体积都上来之后,资源请求可能占到总抓取量的一大块,页面被抓的节奏就会受影响。
哪些资源会被抓,哪些基本不会
- 会被抓:HTML 里直接引用的 CSS 和 JS、页面中的 img 与 srcset、CSS 里的背景图、字体文件、预加载资源,以及渲染过程中由 JS 动态插入的图片等。
- 一般不会被抓:没有被任何页面引用的静态文件、被 robots.txt 屏蔽的资源、只存在于备份目录里的文件。
- 第三方域名上的资源(公共 CDN、字体库)会被抓,但计入对方域名的抓取,不会直接挤占你站点的额度。
有一点容易踩坑:为了“节省额度”在 robots.txt 里屏蔽 CSS 和 JS,结果蜘蛛渲染出的页面缺样式、缺内容,反而更糟。渲染完整通常比省下几次资源请求更重要。
资源抓取怎么影响抓取节奏
影响主要来自三方面:数量、体积和响应质量。模板里塞了几十个阻塞渲染的脚本,或者每张图都是几 MB 的原图,蜘蛛每抓一个页面都要额外等很多次下载。资源出现 5xx、超时或重定向链,也会拖慢整条抓取路径。
缓存配置是性价比最高的一环。给静态资源设置较长的 Cache-Control 有效期,并用带版本号的文件名做更新,蜘蛛在后续抓取中可以复用缓存,减少重复下载。ETag 和 Last-Modified 也能帮上忙。
可以从这些地方开始整理
- 统计模板里阻塞渲染的 CSS、JS 数量,能合并的合并,能延后的加上 defer 或 async。
- 压缩图片、按展示尺寸切图,避免在 CSS 里引用巨大的背景图。
- 给静态资源配置长缓存和版本化文件名,减少重复请求。
- 不要在 robots.txt 里屏蔽 CSS、JS 和图片目录。
- 检查资源是否出现 404 或多次跳转,在日志里按状态码筛一遍。
- 如果资源请求占比确实很高,可以考虑把图片、字体放到独立域名或 CDN,把请求分散到不同主机。
用日志确认实际比例
把服务器日志按 User-Agent 过滤出搜索引擎的请求,再按扩展名或响应类型聚合,就能大致看出页面请求与资源请求的比例、资源的平均响应时间,以及哪些资源在反复 404。搜索控制台的抓取统计里也有按用途分类的数据,可以用来交叉验证。
资源被抓本身不是坏事,渲染完整才有助于蜘蛛理解页面内容。真正需要处理的,只是那些没有意义又反复占用额度的请求。