搜索抓取

429 与 5xx 之后:蜘蛛退避期间,站点该做哪些事

蜘蛛的抓取节奏,很大程度上由服务器给它的回应决定。429 和 5xx 属于临时性信号,会让蜘蛛主动降低频率、拉长间隔。本文梳理退避期间常见的处理误区、临时状态码的正确写法,以及恢复抓取时可以先做哪几件事。

搜索抓取

429 与 5xx 之后:蜘蛛退避期间,站点该做哪些事

蜘蛛要不要继续抓你的站,很大程度上不取决于你提交了多少 URL,而取决于上一次它来的时候,服务器给了什么回应。一次 429、一次 503,或者一串 5xx,都会让抓取计划发生变化。理解这段“退避期”里发生了什么,才能知道恢复时该从哪里下手。

同一个站,不同状态码的含义不同

蜘蛛不会为每个状态码做同样的判断,大致会分成几类处理:

  • 200:正常拿到内容,按既定节奏继续。
  • 301/302:跟着跳,但跳的次数多了会消耗耐心和抓取预算。
  • 404/410:这个地址大概率不再来。
  • 429 / 503:服务器在说“现在别来这么快”,属于临时性信号。
  • 500 等其他 5xx:服务器自己出了问题,同样偏临时,但连续出现会明显降低来访频率。

区别在于:404 是对某个 URL 的否定,而 429 和 5xx 是对“整批抓取”的否定。影响范围不一样,恢复方式也不一样。

429 与 503:慢下来,而不是停下来

这两个状态码通常意味着服务器或防护层在限流。蜘蛛一般会降低并发、拉长两次请求之间的间隔,隔一段时间再试探。这个过程中,本来排在后面的 URL 会被推得更后,新 URL 的发现速度也会跟着变慢。

如果服务端能带上 Retry-After 头,给出明确的等待秒数或时间点,蜘蛛的试探会更有规律,比反复撞墙省事得多。

5xx:短期抖动还是长期故障

偶尔一次 5xx,影响有限;如果同一批 URL 连续几天都返回 5xx,抓取频率下降几乎是必然的,而且恢复往往不是一两天的事。这时候要先解决的是服务器本身,而不是想办法让蜘蛛多来几次。

退避期间常见的几个坑

  • 把错误页做成 200:维护页、限流页如果返回 200,蜘蛛会当成正常内容记下来,后面清理成本更高。
  • 重试风暴:应用层、CDN、网关各自重试,叠加后回源压力比原来还大。
  • 只盯抓取次数:次数下降可能只是退避的结果,真正要看的是 5xx 比例和平均响应时间。
  • 忽略非蜘蛛流量:日志里把监控、健康检查和蜘蛛混在一起看,很容易得出错误结论。
  • 恢复后一次性放量:配置一改就把限流全部打开,常常触发第二轮退避。

恢复抓取时可以按这个顺序走

  1. 先从访问日志里切出蜘蛛的请求,按小时统计状态码分布与响应时间。
  2. 确认 429/5xx 集中在哪个环节:数据库、缓存、带宽,还是限流规则本身。
  3. 把临时性状态码用对:确实在维护就用 503 加 Retry-After,不要用 200 或 404 糊弄。
  4. 修复后先小范围放量,观察一段时间,再逐步放开并发与速率。
  5. 同步清理这段时间产生的大批量无效 URL,避免它们继续占用恢复后的抓取能力。

怎么判断已经恢复

不需要等抓取量回到从前才算恢复。更有意义的观察点包括:蜘蛛请求里 200 的比例是否回升、平均响应时间是否稳定、5xx 是否接近零、同一批 URL 的重复抓取间隔是否在缩短。这几个指标平稳下来,说明抓取节奏正在回到正常轨道。

抓取的恢复通常是渐进的,而不是开关式的。与其琢磨怎么让蜘蛛马上多来,不如先保证它每次来都能顺利拿到想要的东西。