入口页返回什么状态码,比页面里写了什么更容易被蜘蛛先看到。蜘蛛拿到响应后,第一步不是解析正文,而是根据状态码决定“这个 URL 还要不要再来看”。状态码配错,影响的往往不是一次抓取,而是后续很长一段时间的抓取节奏。
状态码在蜘蛛眼里的含义
可以粗略理解为一句话:状态码决定了 URL 在索引里的去留,以及蜘蛛还会不会回来。
- 200:正常内容,蜘蛛会继续抓取并解析。
- 301 / 308:永久跳转,索引信号会逐步转移到新地址。
- 302 / 307:临时跳转,蜘蛛一般保留原地址,但会跟随跳转。
- 401 / 403:访问被拒,蜘蛛通常不认为页面消失,但可能降低访问频率。
- 404 / 410:页面不存在,索引会被移除,410 的信号更明确。
- 429:请求过多,蜘蛛会主动降速。
- 5xx:服务端出错,蜘蛛当成临时问题并安排重试。
5xx 是最容易被忽略的坑
很多人以为 5xx 只是“这次抓取失败”,下次再来就好。实际影响更大:蜘蛛把 5xx 视为服务端不健康,会整体调低对站点的抓取速度,甚至暂时减少发现新 URL 的频率。如果入口页因为数据库连接、程序超时或后端接口抖动而间歇性返回 500,抓取量往往会在几天内明显下滑,而错误日志里可能只有零星的异常记录。
需要注意的是,入口页做 302 跳转到正常页面并不算错误,但如果跳转链太长、最终落到 5xx,蜘蛛看到的就只是一次失败。
软 404 更隐蔽
还有一种情况:服务器返回 200,但页面内容是“该内容不存在”“已下架”之类的提示页。这种软 404 会让蜘蛛把无效内容当成正常页面收进去,浪费抓取预算,也让真正有价值的入口页资源被无效 URL 挤占。判断方法很简单:返回 200 的入口页里,正文是否真的有独立内容。
429 与硬拦截不是一回事
429 是“请求太多”,属于约定内的礼貌拒绝;而 WAF 直接返回 403 或直接断开连接,蜘蛛只会理解为访问被拒。前者会自降速,后者可能让蜘蛛减少访问甚至放弃。如果确实需要限流,优先用 429 并给出合理的重试间隔。
实践中的处理建议
- 对入口页集合做定期抽样请求,核对状态码与预期是否一致。
- 监控 5xx 比例,超过阈值先查后端稳定性,而不是急着加新域名。
- 确定不再使用的入口页,用 404 或 410 明确表态,不要长期挂 200 空壳页。
- 跳转尽量一步到位,避免多级 302 串联。
- 把状态码纳入日志巡检,并和蜘蛛 UA 一起看,才能分清是蜘蛛抓取失败还是真实用户访问失败。
状态码是入口页对蜘蛛说的第一句话。这句话说清楚,后面的内容、结构和链接才有被看到的机会。
状态码本身不复杂,难的是长期保持稳定。入口页数量越多,越需要一个统一的响应规范,避免个别程序把整站的抓取节奏拖慢。