很多站点在核对抓取情况时,只看“昨天蜘蛛来了多少次”,却忽略了一个更基础的问题:在同样的抓取配额下,服务器实际能交付多少页面。抓取量从来不是一个固定数字,它由蜘蛛愿意花的时间和你服务器的交付速度共同决定。响应越慢、页面越大,单位时间内能抓完的 URL 就越少,未被抓取的队列就会越积越长。
抓取的本质是“时间分配”
搜索蜘蛛在单位时间内能发起的请求数是有上限的,这个上限受限于它对该站点的抓取预算、连接并发数以及你服务器的承载能力。可以把整个过程想成一条传送带:传送带的速度不是由蜘蛛单方面决定的,你的响应速度直接决定了它每分钟能拿走多少个页面。
因此,当我们讨论抓取量下降时,先别急着怀疑蜘蛛“不喜欢”新页面,先看看平均响应时间和单页体积是否发生了变化。
三个最容易被忽略的变量
1. HTML 体积与压缩
一个 300KB 的 HTML 和一个 80KB 的 HTML,在网络传输和解压环节花费的时间差距是实实在在的。常见问题包括:把大段 JSON 数据直接内联到页面里、模板重复输出冗余的 class 与 data 属性、未开启 gzip 或 brotli 压缩。建议对主要模板做一次体积审计,看看是否有可以直接删掉的隐藏字段。
2. 首字节时间(TTFB)
TTFB 反映的是服务器从收到请求到吐出第一个字节的时间,它包含数据库查询、缓存命中、后端渲染等环节。TTFB 从 200ms 变成 1s,对单个用户可能只是“稍慢”,但对蜘蛛而言意味着单位时间能抓的页面数可能减少一半以上。未命中缓存的分类页、需要实时统计的详情页、缺少索引的查询,都是 TTFB 的常见拖累项。
3. 连接与限速策略
有些站点为了“保护服务器”,在前端网关层对蜘蛛做了较激进的限速,结果每次请求都要重新建立连接,反而拖慢了整体吞吐。限速本身没错,但应基于真实负载数据设定,而不是拍脑袋给一个很小的并发值。
如何用日志核对吞吐能力
不需要复杂的工具,把蜘蛛请求日志按小时切分,就能看到大致趋势:
- 统计每个小时蜘蛛的请求总数,剔除 4xx、5xx 后的成功请求数。
- 计算响应时间的分布,重点看 P90、P95,而不是平均值——平均值常被少量快速静态请求拉低。
- 统计成功响应的总字节数与平均单页字节数,观察是否在某次改版后明显上升。
- 把“成功请求数 / 小时”与“平均响应时间”画在同一张图上,看两者是否呈明显的反向关系。
- 对比不同目录:如果某个栏目抓取量长期偏低,但响应时间正常,那问题可能出在入口结构而非性能。
常见误判
- 把 5xx 当成唯一问题:大量 200 但响应很慢的请求,同样在消耗抓取时间。
- 只看总请求数:总请求数上涨可能只是 404 或参数页变多,有效抓取并未增加。
- 忽略缓存命中率:蜘蛛访问的往往是被缓存过的页面,若缓存频繁失效,性能数据会失真。
- 用压测结果代替真实日志:压测环境没有真实的蜘蛛访问模式,参考价值有限。
抓取量的天花板,往往不是蜘蛛给的配额,而是你自己的响应速度。
优化顺序建议
如果确认是交付速度拖累了抓取,建议按“先降低单页成本,再提升并发能力”的顺序处理:先做 HTML 体积削减与静态资源清理,再检查缓存策略与数据库慢查询,最后才考虑调整并发与限速参数。改动前后各留一段日志做对比,避免把波动误判成优化效果。
另外,性能改善不会立刻转化为抓取量提升,通常需要观察数天到数周,因为蜘蛛的抓取节奏存在惯性。保持服务器稳定、响应一致,比短期内的爆发式加速更有意义。