蜘蛛抓取一个地址时,最先读到的不是标题也不是正文,而是服务器返回的 HTTP 状态码。状态码决定了它接下来是读取内容、换地址,还是直接放弃。很多站点的问题不在内容质量,而在状态码长期处于说不清的状态。
一、几种常见状态码分别代表什么
- 200:正常返回。注意软 404——页面内容已经是空壳,状态码却仍是 200,蜘蛛会反复来。
- 301 / 308:永久跳转。适合站点改版、地址规范化。链式跳转要尽量压平,一跳到位最好。
- 302 / 307:临时跳转。别用临时跳转做长期方案,容易让蜘蛛犹豫该记哪个地址。
- 304:内容未变化。合理使用可以省带宽,但前提是内容确实没变。
- 404 / 410:不存在。410 语义更明确,表示永久移除。
- 429:请求过多。用于表达你来得太快了。
- 500 / 502 / 503 / 504:服务端异常。偶尔出现是常态,持续出现就是事故。
二、自查清单:按状态码维度过一遍
- 拉取最近一段时间的访问日志,按状态码分组统计,看 5xx 的占比和集中出现的 URL 段。
- 检查这些 5xx 是否集中在某个栏目、某个模板或某个接口,往往是同一个代码缺陷。
- 确认每个 5xx 是有意的限流,还是无意的崩溃,两者处理方式完全不同。
- 检查跳转链:是否存在 A 到 B 再到 C 的多级跳转,或者跳转目标本身又返回错误。
- 检查已下线的栏目是否返回 410 或 301,而不是一直挂着 200 空页面。
- 记录修复前后的对比数据,否则下次出了问题没有参照。
三、429 与 503:过载时怎么表达
站点流量高峰时,服务器扛不住,常见的错误做法是直接超时或返回空页面。更清晰的做法是返回 429 或 503,并在响应头里带上 Retry-After,告诉对方多久之后再来。
限流不等于拒抓。明确地慢一点,比含糊地连不上要好得多——前者是沟通,后者是失联。
需要注意的是,限流策略不要只针对蜘蛛,也不要对同一类请求给出随机结果。规则越稳定,抓取节奏越可预期。
四、几个容易被忽略的细节
- CDN 或反向代理层返回的错误页,可能覆盖源站的真实状态码,自查时要穿透缓存看源站。
- 维护公告页不要用 200 长期占位,短暂的维护可以用 503 加 Retry-After。
- 接口类地址如果被大量请求,考虑在 robots.txt 或权限层面处理,而不是靠返回 500 硬挡。
- 监控告警要盯 5xx 的持续时长而不只是次数,瞬时抖动和长期故障是两回事。
五、把状态码纳入日常运维
建议在监控里固定几个指标:5xx 比例、429 次数、平均响应时间、错误 URL 的分布。每周花十分钟看一眼趋势,比出事之后逐个排查要轻松得多。
状态码是服务器和蜘蛛之间最基础的对话。把这场对话说清楚,抓取才会有秩序;说含糊了,再多的内容更新也只是堆在门口。定期自查、记录变化、修复后复看,这三步做扎实,比任何技巧都管用。