抓取量下滑时,很多人的第一反应是改内容、加内链、重发 Sitemap。但如果你在日志里看到的是蜘蛛整体到访次数变少,而不是某些页面变少,问题往往不在内容层,而在服务器返回给它内容的那几十毫秒里。
蜘蛛对服务器状态是有记忆的
搜索引擎的抓取调度不是每次都从零开始。它会根据历史抓取结果,为每个主机或目录维护一份“健康印象”:响应快、错误少,就愿意多来几次;超时多、5xx 多,就会主动降速,把配额挪给更稳定的站点。
这种调整通常是渐进的:先是单次抓取的并发降低,再是抓取间隔拉长,最后才是整体抓取量明显下滑。所以当你在报表上看到抓取量腰斩时,退让其实已经发生了一段时间。
哪些服务器信号会让蜘蛛主动退让
- 5xx 状态码:尤其是 500、502、504 这类源站或网关错误。偶发几次无妨,比例一高就会被判定为站点不稳定。
- 连接超时与响应过慢:蜘蛛有自己的等待上限,超过就直接断开。断开次数多了,效果和 5xx 接近。
- 429 与 503:这两个本来就是你告诉蜘蛛“现在别来”的信号。用得好能保护源站,用得随意就等于持续劝退。
- 连接被重置、TLS 握手异常:连加密连接都建立不起来,蜘蛛拿不到任何内容,只能记为一次失败。
把 503 当成万能的挡箭牌是有代价的:它保护了这一次,也可能压低之后一段时间的抓取量。
排查顺序:先看状态码分布,再谈内容
- 从服务器日志里按状态码分组,看 2xx、3xx、4xx、5xx 各占多少。重点不是绝对值,而是变化趋势。
- 再看响应时间的分位值。平均值容易骗人,P95、P99 更能反映蜘蛛实际遇到的最差情况。
- 接着看错误集中在哪个路径:全站,还是某个接口、某类列表页、某个 CDN 节点。
- 最后才回到内容层:Sitemap、内链、URL 总数是否在同期突然膨胀,把有限的抓取配额摊薄了。
顺序颠倒的常见后果是:内容改了一圈,服务器该报的错还在报,抓取量自然回不来。
几个容易被误读的运维动作
- 维护页返回 200:蜘蛛看到的是“正常页面”,内容却是一片空白,久了容易被当成低质页面。
- 错误页返回 200:本该是 404 或 410 的地址返回了 200,蜘蛛会反复回来确认,浪费抓取配额。
- 限流与防爬策略过严:把正常蜘蛛也一起拦掉,日志里表现为抓取量断崖,而不是缓慢下滑。
- CDN 缓存配置改动:缓存命中率变化会直接影响源站压力,也会影响蜘蛛看到的响应速度。
恢复稳定之后,抓取量不会立刻回来
服务器修好当天,抓取量通常只回升一部分。调度系统需要重新积累“这个主机是稳定的”这一判断,过程往往是几天到几周。这段时间不建议做大幅度的结构改动,否则很难分清是恢复起了作用,还是改动起了作用。
比较稳妥的做法是:保持 URL 数量稳定,让 Sitemap、内链和实际可抓页面保持一致,把状态码和响应时间控制住,然后观察趋势,而不是盯着某一天的曲线。
抓取这件事,服务器给不出稳定答案时,内容做得再好也传不出去。先把状态码和响应时间这两件事守住,再看别的。