蜘蛛进到入口页,最先读到的不是正文,而是响应头里的状态码。它决定了蜘蛛把这条 URL 当作有效页面、暂时跳过,还是直接从待抓队列里清掉。很多站点把精力花在模板和外链上,却在一个错误的 200 或 404 上丢掉了大量抓取机会。
200 不等于“没问题”:软 404 的隐患
最常见的坑是软 404:页面内容已经清空,或者显示“该页面不存在”,但服务器仍然返回 200。蜘蛛收到的信号是“这里有内容”,于是照常抓取、照常占用抓取预算,甚至把空页收进索引。
入口页批量铺量时,只要内容源断供或模板变量为空,就很容易出现这种状态。检查方法不复杂:抽几个 URL,一边看返回码,一边看初始 HTML 里有没有实际内容。模板为空时,宁可返回 404 或 410,也不要给一个 200 的空壳。
404 与 410:暂时不见和永久移除
404 表示资源不存在,蜘蛛通常理解为可能还会回来,于是保留一段时间的回访;410 表示已经永久移除,蜘蛛收到后一般会更快降低回访频率,把预算挪到别处。
入口页下线时要分情况:如果只是轮换、还在观察期,用 404 更合适,将来想恢复也顺;如果是确定不再复用的模板页或废弃页面,410 更干脆。两者都不该返回 200 的“空页”。另有一种常见处理是 302 跳到站内首页冒充正常,这在蜘蛛眼里是重定向信号,反而容易把入口页本身的价值稀释掉。
503 与 429:告诉蜘蛛“先别来”
503 是服务不可用,适合计划维护、临时压力过大的时段。如果同时带上 Retry-After 头,蜘蛛会按指定时间再来。相比让蜘蛛撞上连接超时或者 500,503 是一种更体面的拒绝方式。
429 表示请求过多。它在反爬策略里很常见,但在蜘蛛池场景要慎用:如果对搜索引擎蜘蛛也返回 429,蜘蛛会主动降低抓取频率,恢复期里新入口页的发现速度会明显变慢。按 UA 做区分限流是可行的,前提是别误伤真正的蜘蛛。
403 与 5xx:最容易伤到自己
403 是被拒绝。WAF 默认规则、CDN 的防护策略、防盗链设置,都可能在蜘蛛来访时返回 403。入口页被 403 的次数多了,蜘蛛会逐步判定这个站点不值得频繁抓取,之后再想恢复就需要时间。
5xx 里,500 是程序错误,502 和 504 多来自网关或上游超时。它们都属于“服务器有问题”的信号。偶尔出现影响不大,但如果入口页有一半请求都是 5xx,抓取频率下滑几乎是必然的。
实操上的几条建议
- 让内容与状态保持一致:有内容返回 200,没内容返回 404 或 410,不要用空页占位。
- 批量铺页前先用脚本抽查返回码分布,统计 200 里有多少其实是软 404。
- 维护时优先用 503 加 Retry-After,别直接关机让蜘蛛碰到连接超时。
- WAF 与 CDN 规则对已知搜索引擎 UA 做放行或降级校验,减少误判为 403。
- 页面下线用 404 还是 410,取决于是否还会复用,不要一律 301 跳首页。
- 把返回码分布和服务器日志放在一起看,才能判断入口页是否真的被正常处理。
状态码是蜘蛛理解站点的第一层语义,它比模板做得多精细更早生效。入口页数量铺得再多,如果返回码本身在传递错误信号,后面的优化都很难补回来。