很多站长盯日志时只看 HTML 请求,却忽略了同一批抓取里还夹着大量 CSS、JS、图片和字体请求。这些资源同样占用服务器的连接数、带宽和响应时间,而且会直接影响蜘蛛渲染页面后能看到什么。资源该不该放开抓取,是抓取优化里最容易被跳过的一环。
蜘蛛为什么会去抓静态资源
原因主要有三类,理解清楚这三类,才好决定放开还是限制。
- 渲染需要:现代搜索引擎会执行页面里的 JS。如果正文、价格、库存等内容由 JS 生成,JS 文件取不到,蜘蛛看到的可能就是空壳。
- 链接发现:部分站点的导航、分页、相关推荐由 JS 注入。只有脚本正常执行,这些新 URL 才会进入发现队列。
- 资源本身可被索引:图片、视频文件会被图片和视频搜索单独收录,这类请求并非浪费。
先分清:哪些资源可以限制
适合限制的资源
- 模板里遗留、页面上并没有真正引用的旧版 CSS、JS 备份文件。
- 构建产物中的 sourcemap、开发调试文件、日志和临时目录。
- 同一张图的多种缩略尺寸,如果原图已经可以被抓取。
- 后台、测试环境暴露在公网上的资源目录。
这些内容用 robots.txt 指向具体目录做 Disallow 即可,不必整站屏蔽 /*.js 这类宽泛规则。
不适合屏蔽的资源
- 主样式表和主脚本,尤其首屏渲染依赖的那几个文件。
- 返回正文内容、分页数据的内容接口。
- 影响布局判断的字体文件,若缺失会导致内容被判定为隐藏,就要谨慎。
把主 CSS、JS 一并屏蔽,常见后果是蜘蛛渲染出的页面排版错乱、折叠内容被当成不可见,或者干脆抓不到异步加载的链接。
资源变慢,会拖累整站抓取
蜘蛛渲染页面时会等待资源返回。单个文件长时间无响应,渲染可能提前结束,后面的内容和链接就都拿不到。更麻烦的是,资源请求和 HTML 请求共用同一批连接,静态资源慢下来,HTML 的抓取节奏也会被拖慢。
几个常见诱因:资源没有走 CDN、合并后的单个大文件成为单点、图片未压缩导致体积过大、第三方统计脚本超时。排查时先看日志里资源请求的响应时间分布,再和 HTML 的平均响应时间对比,差距明显的地方通常就是瓶颈。
几个可以马上执行的动作
- 按文件扩展名统计日志,看看资源请求占全部抓取的比例是多少。
- 筛出返回 404 的资源,模板里引用了已删除的文件,蜘蛛每来一次就白白请求一次。
- 核对 robots.txt,确认没有误屏蔽主 CSS、JS 和内容接口。
- 对确实无用的资源目录,加一条 Disallow,并观察后续日志变化。
- 把资源响应时间纳入日常监控,而不是只看首页能不能打开。
改完之后怎么验证
改 robots.txt 之后不要只看文件本身,要用平台提供的抓取测试工具单独跑几个关键页面,确认渲染结果里正文和链接都在。之后对比前后日志:如果非必要资源请求下降、HTML 请求占比上升,说明方向对了;如果发现页面内容反而变少,就要检查是不是屏蔽得太宽。
资源抓取既不是越多越好,也不是一律屏蔽。判断标准只有一条:这个文件是否影响蜘蛛对页面内容与链接的理解。