入口页返回什么状态码,是蜘蛛在拿到 URL 之后最先判断的一件事。链接放上去了、sitemap 也提交了、日志里也有来访记录,但如果状态码给错了,蜘蛛对这一整批 URL 的后续安排就会跟着偏。
2xx:看起来最安全,问题常出在软 404
200 表示页面正常返回。但不少入口页会把错误页也返回 200:URL 实际已经失效,模板照样渲染出一个“内容不存在”的空壳页,状态码却是 200。蜘蛛会把这种页面当成正常内容收下,占着抓取额度反复回来,也不会有明确的移除动作。
判断软 404 的办法不复杂:看这个 URL 是否长期只返回同一套空模板,看它是否从来没有产生过有效点击或后续爬取。如果是,就应该让它明确返回 404 或 410,而不是继续挂在 200 上。
3xx:301 与 302 的区别,蜘蛛会记很久
301 表示永久跳转,蜘蛛会逐步把旧地址的信号迁移到新地址,后续抓取中直接访问目标。302 表示临时跳转,蜘蛛一般仍然保留原 URL,继续回来检查。
在蜘蛛池里,如果入口页做过地址调整,用错跳转类型会让蜘蛛长期停留在旧地址上反复空跑。频繁更换跳转目标更糟:同一个入口页今天 301 到 A、明天 301 到 B,蜘蛛原有的抓取安排会被打乱。
4xx:404 与 410 的差别在于“多快放弃”
- 404:页面不存在。蜘蛛会认为可能是暂时情况,之后一段时间内仍可能回访几次。
- 410:页面已永久移除。蜘蛛通常会更果断地停止回访,清理动作相对更快。
入口页确定要下线时,410 比 404 更干脆。如果只是资源临时不可用,用 404 或 410 都会把之前累积的抓取关系断开,这时更合适的是保留正常的 200 内容,或返回 503。
5xx:蜘蛛会重试,但也会降低来访频率
500 表示服务端出错,503 表示服务暂时不可用。两者蜘蛛都会当成临时问题,过一段时间再来。但持续的 5xx 会让蜘蛛下调对该站点的抓取频率,即使之后恢复,也需要一段时间才慢慢加回来。
短时间返回 503 并带上 Retry-After,通常比整站返回 500 更容易让蜘蛛按约定等一等。但如果入口页长期就是 5xx,蜘蛛不会一直等下去。
在蜘蛛池里怎么处理这些状态码
- 先看日志里的状态码分布。把入口页按 200、3xx、4xx、5xx 分组统计,异常比例突然升高,往往比总量下降更早暴露问题。
- 软 404 要统一收口。失效入口页明确返回 404 或 410,不要让它们继续以 200 存在。
- 跳转尽量一次到位。确定目标后用 301,避免反复更换目标地址。
- 维护窗口用 503 加 Retry-After。比直接返回 500 或干脆关站更可控。
- 过期入口页要有下线计划。批量失效的 URL 集中处理,比零散报错更容易排查和复盘。
小结
状态码是入口页对蜘蛛说的第一句话,也是最容易被忽略的一句。200 用对是基础,3xx 用对是迁移,4xx 用对是止损,5xx 用对是暂停。把这四类情况分清楚,往往比继续增加入口页数量更能决定蜘蛛愿不愿意继续来。