搜索抓取

5xx 与连接超时之后:蜘蛛重试退避与抓取节奏的恢复

服务器出现 5xx、超时或连接重置时,搜索蜘蛛通常不会立刻放弃,而是重试并放慢节奏。本文从访问日志入手,讲怎么区分短暂抖动和持续故障,按什么顺序恢复抓取,以及哪些操作反而会让情况变糟。

搜索抓取

5xx 与连接超时之后:蜘蛛重试退避与抓取节奏的恢复

服务器偶尔打嗝是常事。真正让人头疼的是:一次持续几分钟的 5xx,可能让蜘蛛在接下来的一两周里都对你这个站点保持谨慎。理解蜘蛛在服务端错误面前的处理逻辑,比事后到处找“加速抓取”的办法更有用。

蜘蛛碰上 5xx 时在做什么

5xx 和 404 传递的信号完全不同。404 是明确的“这里没有”,蜘蛛可以较快地接受现实;5xx 是“我也不知道现在有没有”,蜘蛛无法判断页面是否还存在,所以通常不会立刻删除已有索引记录,而是选择稍后再来。

不同爬虫的重试策略细节不一样,但大致规律是相通的:

  • 短时间内对同一 URL 重复请求几次,间隔逐渐拉长;
  • 如果整站错误率偏高,会降低对该站点的整体抓取频率;
  • 错误集中的目录可能被暂时冷落,正常返回的目录还能继续被抓;
  • 连接超时、重置和 5xx 都属于“服务端不可用”,处理逻辑接近。

所以服务器故障带来的损失,往往不是丢掉那几个页面,而是蜘蛛对整站可靠性的判断被下调。

先从日志里分清抖动和持续故障

不是所有 5xx 都需要紧张。发布时的一两分钟抖动,和数据库连不上导致的半小时雪崩,处理方式完全不同。看日志时可以把范围压到小时甚至分钟级别,重点看这几件事:

值得关注的几个信号

  • 错误占比:5xx 在整个蜘蛛请求里占多少,是零点几个百分点还是一半以上;
  • 时间分布:是集中在某个时间点,还是全天零星出现,后者更麻烦;
  • 是否挑页面:只有带参数的动态页报错,还是静态页也一起挂;
  • 是否挑来源:只有某个 IP 段或某个机房访问出问题,可能是链路或防护策略的原因;
  • 是否与操作重合:错误时间点是否正好对应发版、扩容、切 CDN。

如果错误只出现在少数 URL 上且每次都能复现,那更像代码问题;如果一片 URL 同时报错又同时恢复,更可能是资源耗尽或下游依赖挂掉。

恢复抓取节奏的先后顺序

服务器恢复后,很多人第一反应是赶紧提交、赶紧推链接。顺序错了,反而会在蜘蛛刚恢复访问时又给它一次糟糕体验。更稳妥的做法是:

  1. 确认源站真的稳了:不是页面能打开就算好,而是要看一段时间内错误率是否归零,尤其是原来出错的那批 URL。
  2. 把超时和连接数调到合理区间:让服务器在蜘蛛正常并发下不会再次被打穿,而不是等下一次访问高峰再挂一次。
  3. 观察日志中抓取量的回升:蜘蛛回来通常是从少量 URL 试探开始,逐步放量。这个阶段不用急着催。
  4. 用 Sitemap 重新列出重点 URL:帮助蜘蛛确认哪些页面还活着,特别是故障期间新增或改动过的内容。
  5. 检查内链有没有断:故障期间如果顺手改过模板或导航,很可能把蜘蛛原本的入口路径掐断了。

这几步做完,剩下的就是等。抓取频率的恢复通常比故障本身慢得多。

这些做法容易把事情弄反

故障之后最常见的错误操作,是想用“加大入口”来把抓取量拽回去。外链轰炸、批量提交、临时搭一批站群入口,在蜘蛛已经判定该站点不稳定的时候,效果往往相反——入口越多,它遇到的错误越多,判断只会更差。同理,故障刚恢复就上大范围改版、改 URL 结构,也会让蜘蛛在记忆还没更新时再次踩空。

抓取量下降多数是结果,不是原因。先把服务端稳定性做扎实,抓取节奏才有回来的基础。

一份简短的核对清单

  • 恢复后连续观察至少一个完整的抓取时段,确认 5xx 不再出现;
  • 确认错误页返回的是真正的状态码,而不是把报错页伪装成正常页;
  • 确认 robots.txt、Sitemap 地址没有被错误配置挡在外面;
  • 确认关键页面的内链入口仍然可达,没有被临时改动切断;
  • 记录这次故障的时间点和影响范围,下次能在日志里快速定位。

服务端错误处理得越干净,蜘蛛对你的信任恢复得越快。这件事没有捷径,能做的就是把稳定性和可核对性做好,剩下的交给时间。