为什么 5xx 比 404 更影响抓取节奏
404 表示页面不存在,蜘蛛通常会较快停止访问该 URL。5xx 表示服务器暂时无法完成请求,蜘蛛会把它当作可恢复的错误:先短时间重试,如果持续失败,就会降低对该站点的抓取频次。这个过程常被称为抓取退避。退避一旦形成,恢复不是立刻的,即使服务器已经恢复正常,抓取量也可能需要一段时间才回到原有水平。
先在抓取日志里确认三件事
不要只看服务器监控。把蜘蛛访问日志和源站错误日志对照,重点确认:
- 5xx 占比:是集中在少数 URL,还是全站随机出现。
- 时间分布:是否与发版、备份、定时任务、流量高峰重合。
- URL 类型:列表页、详情页、静态资源、接口路径,哪一类最先失败。
如果 5xx 集中在某类动态路径,问题往往在应用层;如果静态文件也大量 5xx,则更可能是 CDN 回源、负载均衡或网络层。
按层排查常见诱因
- CDN 与回源:查看回源 5xx 比例、回源超时设置、源站健康检查是否误判。CDN 缓存了 5xx 响应时,蜘蛛可能在短时间内反复拿到同一个错误页。
- 应用进程:PHP-FPM、Java 线程池、Node 进程是否被打满,是否出现重启或排队超时。
- 数据库与缓存:连接池耗尽、慢查询堆积、Redis 超时,常表现为 500 或 504。
- 限速与防护:WAF、限速规则、防爬策略是否把蜘蛛请求误判为异常流量,返回 503。
- 发布与运维操作:滚动发布、批量生成静态页、数据库备份是否造成短时不可用。
503 与 Retry-After 的使用边界
计划维护时,返回 503 并附带 Retry-After 比直接返回 500 更清晰,但不要把它当作长期挡箭牌。频繁或长时间 503 同样会让抓取频次下降。若只是单个接口抖动,优先修复接口,而不是让整站返回 503。
抓取退避是渐进的:错误持续越久,恢复越慢。修复后先保证一段时间内稳定返回 200,再观察抓取频次变化。
修复后如何观察回稳
- 连续几天查看蜘蛛访问日志中的 5xx 比例,确认降到可忽略水平。
- 对比修复前后的日均抓取 URL 数与抓取频次,不要只看单日峰值。
- 检查 Sitemap 和重要内链入口是否仍能正常访问,避免错误页被缓存。
- 如果使用 CDN,清理异常状态码缓存,并确认回源健康检查路径不会被蜘蛛大量访问。
常见误区
- 只重启应用,不查根因,导致 5xx 反复出现。
- 把 5xx 当成 404 处理,忽略退避对抓取预算的影响。
- 在 robots.txt 中临时屏蔽整站,恢复后忘记移除。
- 修复后立刻提交大量 URL,期望抓取量马上回升。
服务器稳定性是 URL 发现和抓取的基础。把 5xx 控制在低水平并保持一段时间,比短期内的各种提交动作更有效。抓取频次的恢复需要观察周期,建议以周为单位对比日志,而不是频繁调整规则。