很多人看日志时,会把蜘蛛的访问简单理解成一次访问等于一个页面。实际打开日志仔细看,会发现同一个蜘蛛 IP 在一小段时间里,往往连着来了一串请求:先是 HTML,接着是页面里的 CSS、JS,然后是几张图片,可能还有字体文件。这些请求在服务器看来都是独立的一次访问,但触发它们的是同一个页面的抓取动作。
一次抓取,背后的请求数往往不止一个
蜘蛛拿到 HTML 之后,需要把页面解析一遍才能理解内容。解析过程会把页面引用到的资源一个个列出来,CSS 和 JS 会影响页面最终长什么样,图片和视频会决定内容是否完整。对于需要渲染的页面,这些资源不抓下来,蜘蛛看到的可能只是一个空壳。
所以从请求量上看,一个包含几十张图片、若干脚本和样式的页面,可能对应几十次甚至上百次请求。这也是为什么有些站点页面数不多,日志里蜘蛛的请求数却很高。
资源抓取会和页面抓取抢资源
资源请求虽然不直接决定 URL 是否被发现,但它实实在在地占用带宽、连接数和后端处理能力。如果站点本身响应就慢,或者图片走的还是同一台源站,那么资源抓取挤占的正是页面抓取需要的资源。表现就是蜘蛛访问页面的频率下降、超时变多,抓取节奏整体被拖慢。
这一点在图片站、图库、电商详情页上尤其明显。页面本身不重,但一张详情页能带出几十张商品图,蜘蛛来回走几遍,源站压力就上来了。
哪些资源可以挡,哪些最好放行
不是所有资源都必须让蜘蛛抓。判断标准其实很简单:这个资源会不会影响蜘蛛对页面内容的理解。
- 影响内容理解的:正文图片、关键 CSS、必要的 JS,一般建议放行,否则蜘蛛看到的页面和用户看到的差别很大。
- 不影响内容理解的:统计脚本、广告脚本、装饰性背景图、部分字体文件,可以考虑通过 robots.txt 或 CDN 规则限制。
- 体积大但价值低的:自动播放的视频、超大分辨率原图,可以只让蜘蛛抓缩略图,原图通过懒加载或独立路径提供。
要注意的是,用 robots.txt 挡资源只是一种取舍,挡得太多可能让渲染结果失真。挡之前最好先想清楚:这个资源没了,蜘蛛还能不能看懂这一页。
把资源请求的成本降下来
如果不能挡,那就想办法让它便宜一点。常见的做法有几个方向。
- 给静态资源设置合理的缓存头,让蜘蛛再次访问时走缓存而不是回源。
- 把图片、样式、脚本放到 CDN 上,和 HTML 源站分开,避免抓资源时影响页面响应。
- 控制单页资源数量,合并零碎的小文件,减少请求次数。
- 图片按实际展示尺寸输出,不要用小图位承载大图。
这些做法的共同点,是把资源抓取从源站压力里剥离出去,让蜘蛛抓页面时,源站能把资源留给 HTML。
从日志里看资源抓取的真实情况
想确认资源抓取到底占了多少,日志是最直接的依据。可以按蜘蛛 IP 或 UA 分组,看看同一个页面路径后面跟着多少条静态资源请求,以及这些请求的响应码和耗时。
如果发现大量静态资源返回 404、403,或者响应时间明显高于 HTML,说明资源路径本身有问题,或者服务器在处理这些请求时力不从心。这类情况不一定会立刻影响收录,但会让蜘蛛每次来访都多花时间,长期看会拖慢整个站点的抓取节奏。
资源抓取不是额外的负担,它是页面抓取的一部分。与其纠结蜘蛛抓了多少资源,不如先确认它抓到的这些资源,是不是它真正需要的那几个。