服务器偶尔抖一下,页面打不开,蜘蛛会怎么记账?很多人一看到 5xx 就慌,担心页面马上从索引里消失;也有人把 404 和 503 混着用,结果让本来只是临时故障的页面被当成永久不存在。这两种做法都容易让收录出现不必要的波动。
先分清三类状态:临时、永久、被限流
蜘蛛判断一个 URL 值不值得再回来,主要看返回的状态码语义,而不是你心里的想法。
- 2xx:抓取成功,内容进入解析流程。抓到了不等于收录,但至少流程正常。
- 3xx:跟着跳转继续走,链路过长或出现循环会被放弃。
- 4xx:多数被理解为“这个地址不对”。404、410 属于明确的永久信号,反复出现会让 URL 逐步退出抓取队列。
- 5xx:服务器端问题,属于临时性失败,通常会被重试。
- 429:请求过多,是限流信号,蜘蛛一般会降低访问频率,而不是认定页面失效。
一次失败不会让页面掉出索引
单次 5xx、超时或连接被拒,通常只是“这次没抓到”,蜘蛛会在后续排期里重试。真正麻烦的是持续性:如果同一批 URL 在较长时间里反复返回 5xx 或超时,常见的后果是抓取频率被压低、这些页面的更新迟迟不被发现,索引里的版本越来越旧。是否会被移除,取决于失败持续多久、范围多大,以及这个 URL 本身的重要性,没有一个固定天数可以套用。
把 5xx 当成 404 用,是自查时最常见也最亏的一种写法。
维护页该用 503,而不是 404
停机维护、数据库临时不可用,返回 503 并带上 Retry-After,比返回 404 或 200 的空壳页更符合语义。返回 404 会被理解为页面永久消失;返回 200 的空页则容易变成软 404,两种情况都会影响索引里这一页的去留。
429 通常不是坏事,但要看谁在挨打
CDN、WAF 或限流规则如果对所有来访者一视同仁,蜘蛛很可能也吃到 429 或 403。短时间内问题不大,长期如此,抓取量会明显下滑,新页面被发现的节奏也会被拖慢。可以检查是否给已验证的爬虫留了正常通道,以及 Retry-After 是否被正确下发。
自查顺序
- 从服务器日志里按状态码分组,看看 5xx、429、超时各自占爬虫请求的比例,以及集中在哪些时段、哪些 URL。
- 对比出问题的 URL 是否属于同一类模板或同一台后端机器,先排除局部故障。
- 看抓取统计里请求量和响应时间的趋势,确认是短期波动还是持续恶化。
- 检查 CDN、WAF 规则、证书和跳转配置,这些地方最容易在改版后误伤爬虫。
- 修复后不必急着做额外动作,正常重试会逐步恢复;如果某个重要页面长期没被重新抓取,再考虑从内链或站点地图重新提交。
几个容易踩的点
- 把后端报错统一包装成 200 的空白页,等于制造软 404,比直接报 5xx 更难排查。
- 用 404 处理所有异常,会把临时故障写成永久信号。
- 只在高峰期限流爬虫,等于让抓取总在失败时段进行。
- 证书过期、DNS 解析失败这类问题,日志里可能连状态码都没有,需要单独盯监控。
状态码是站点对蜘蛛说的“话”。说清楚是临时还是永久,比修好之后反复提交更有效。收录的恢复通常跟着抓取恢复走,急不来,把错误率压下去就是最直接的推进。