大多数站点运营者更在意 404 和软 404,因为那类问题看起来「和内容有关」。但真正会让搜索引擎放慢抓取的,往往是 5xx。404 说明「这个地址没有东西」,5xx 说明「服务器现在不行」。前者是内容判断,后者是稳定性判断,而搜索引擎对后者的容忍度低得多。
为什么 5xx 比 404 更值得优先处理
当蜘蛛请求一个地址并收到 500、502、503、504 这类状态码时,它得不到任何有效信息:既不知道页面是否还存在,也不知道该不该从索引里剔除。于是常见的连锁反应是——
- 已有索引被暂时保留,但真实访客点进去只看到错误页;
- 抓取配额被浪费在反复重试同一个地址上,新内容发现变慢;
- 如果整站大面积返回 5xx,抓取频率可能被整体下调,恢复起来需要时间。
也就是说,5xx 不只是「这一刻打不开」,它会影响接下来一段时间的抓取节奏。
常见的 5xx 来源
- 数据库连接被打满:并发一上来,查询排队超时,页面直接 500。
- 后端脚本执行超时:某个栏目页的聚合逻辑太重,平时勉强跑得动,流量一涨就崩。
- 反向代理与源站配置不一致:超时时间、协议、端口对不上,表现成 502。
- CDN 回源失败:源站短暂不可用,边缘节点返回 5xx,日志却不在源站上。
- 发版或重启没有优雅降级:进程切换的几十秒里,请求全部失败。
怎么查:三个角度交叉验证
- 服务器访问日志:按状态码做统计,重点看 5xx 集中在哪些 URL 前缀、哪些时间段。是整站性的,还是集中在某个栏目或接口上。
- 站点监控:用外部拨测覆盖首页、栏目页、详情页各取几个样本,避免只监控首页而漏掉深层页面。监控频率不要太低,否则短时抖动会被完全忽略。
- 搜索后台的抓取统计:看抓取错误里的服务器错误条目,以及抓取频率曲线有没有明显下滑。这一项能帮你判断问题是不是已经影响到蜘蛛。
三个角度如果指向同一批 URL,基本就能定位了;如果只有日志有异常而监控正常,往往是特定 UA 或特定路径才有问题,需要单独构造请求复现。
处理时的几个原则
先恢复稳定,再谈优化
出问题时优先让页面能正常打开,哪怕暂时降级成静态缓存或简化版页面,也比持续返回 5xx 好。降级时状态码仍然是 200,内容是完整的,这对蜘蛛来说是可用页面。
维护窗口用 503,不要用 404 或 200
计划内维护应该返回 503,并带上合理的 Retry-After 响应头。返回 404 会让蜘蛛误以为页面消失,返回 200 却给空内容则容易形成软 404,两者都会让索引状态变乱。
限流要留白名单
为了防止爬虫压力打垮服务器而做限流,思路没错,但要给搜索引擎的 UA 留出合理额度,否则限流本身就成了新的抓取障碍。同时避免「超过阈值就直接 5xx」,更稳妥的做法是排队或返回 429。
恢复之后要做的收尾
- 观察一到两周的抓取频率,确认是否回到原有水平;
- 把这次的错误样本整理成告警规则,覆盖到目录级而不只是首页;
- 检查被错误影响期间是否有页面被误判、需要重新提交;
- 记录原因与处理动作,下次同类问题不必从零排查。
5xx 自查的重点不是「找出一个 bug」,而是让服务器在异常时也能给出可理解的状态码。蜘蛛不怕你慢,怕的是你什么都不说。