很多人看抓取日志时只关注 HTML 页面,翻到后面才发现,蜘蛛请求数量最多的其实是各种静态资源。它们看起来无关紧要,却实实在在占用请求额度,有时还会影响蜘蛛对页面内容的理解。
蜘蛛除了 HTML 还会拉哪些文件
只要出现在 HTML 里、并且允许被抓取,蜘蛛就可能顺着标签把对应文件取走。常见的有这几类:
- 图片:content 里引用的正文图、列表缩略图、图标文件。
- CSS 与 JavaScript:外链样式和脚本,渲染页面时基本都会请求。
- 字体与图标文件:通过 CSS 的 @font-face 或图标字体引入时,可能连带被抓。
- 部分媒体文件:音频、视频的一般以封面图或播放器脚本的形式被请求,整段视频通常不会被完整下载。
- 其他:AMP 页面、站点验证文件、被引用的 JSON 数据接口,视实现方式而定。
这些请求会出现在服务器访问日志里,状态码和字节数都能看到,只是很多人没有单独统计过。
拦住 CSS 和 JS 会有什么后果
不少站点为了省资源,习惯在 robots.txt 里直接拦掉 /css/ 和 /js/ 目录。这个做法风险不小。
现代搜索引擎渲染页面时依赖样式和脚本。如果关键资源被拦截,蜘蛛拿到的可能是一个结构错乱甚至空白的页面,正文、内链、结构化数据都可能判读不出来。主流搜索引擎的官方文档都建议不要屏蔽 CSS 和 JavaScript,而是让它们正常被抓,再通过其他方式控制资源消耗。
控制资源抓取,靠的是减少无效资源,而不是一刀切地屏蔽渲染依赖文件。
资源抓取同样在消耗抓取预算
蜘蛛一天愿意在你的站点上发起多少次请求,大致是有限的。资源请求和页面请求算在同一本账里。当图片尺寸没压缩、同一张图在多个模板里重复引用、缩略图按原图输出时,资源抓取就会挤占页面抓取的空间,尤其是列表页和详情页数量都很大的站点。
常见可收敛的方向:
- 图片统一压缩并按展示尺寸输出,避免大图小用。
- 合并或延迟加载非首屏脚本,减少渲染阶段的额外请求。
- 把静态资源放到 CDN,减轻源站压力,也让资源抓取不再频繁打到应用服务器上。
- 清理模板里已废弃但仍被引用的旧资源文件。
从日志里看资源抓取是否合理
按扩展名或路径前缀统计日志,能看到蜘蛛在不同资源类型上的请求占比。几个值得留意的信号:
- 某个图片目录的请求量远超页面请求量,说明存在重复引用或尺寸问题。
- 大量 404 的资源请求,通常是模板改了路径、旧文件没保留。
- 脚本或样式长期返回 5xx,可能让蜘蛛反复重试,白白消耗额度。
- 资源请求集中在少数几个路径参数上,例如带随机串的图片地址,容易被当成无限 URL 抓下去。
几点实操建议
- CSS、JS 保持可抓取,不要用 robots.txt 拦渲染依赖文件。
- 把资源抓取和页面抓取分开统计,先看清比例再谈优化。
- 图片使用固定、可预测的地址,避免带时间戳或随机参数。
- 资源响应尽量走缓存,缩短首字节时间,减少超时重试。
- 改版或迁移资源目录时,对旧地址做好跳转,避免留下成片 404。
资源抓取不是坏事,它是蜘蛛理解页面的必要环节。真正需要处理的,是那些重复的、过期的、被拦错的请求。