蜘蛛抓取入口页时,服务器返回的 HTTP 状态码是它判断页面可用性的第一层信号。很多蜘蛛池运营者把精力放在域名、IP 和内容上,却忽略状态码,结果蜘蛛来了又走,或者反复抓一堆已经失效的地址。状态码不是玄学,它直接决定蜘蛛下一步是深入、跳过还是降低抓取频率。
200:入口页最稳妥的返回
如果入口页要承接蜘蛛、传递内链,200 是默认选择。但 200 不代表内容可以随意:空白页、只有一段跳转脚本的页面、错误模板包着 200,蜘蛛可能抓到却不会继续深入,甚至把入口页归为低质页面。建议入口页至少有可读文本、少量内链和明确的标题,避免“假 200”。
- 页面主体不要只放一张图或一个空 div。
- 内链数量控制在合理范围,锚文本不要全部一样。
- 状态码 200 时,页面标题和描述应和实际内容一致。
301 与 302:跳转要集中,不要拉长链
301 表示永久迁移,适合域名更换、入口页固定指向新地址;302 是临时跳转,适合短期活动或灰度测试。蜘蛛对 301 的处理更明确,通常会更新索引;对 302 往往保留原 URL,容易反复回抓旧地址,浪费抓取预算。入口页如果大量使用 302,抓取量可能被拖在旧链接上。
另外,跳转链不要超过两跳,A 到 B 再到 C 会让蜘蛛中途放弃。JS 跳转和 meta refresh 不是 HTTP 状态码,蜘蛛对它们的识别更弱,能 301 就尽量 301。
404 与 410:死链要干脆
入口页失效、资源下线时会用到 404 或 410。404 表示找不到,410 表示永久删除。对确定不再使用的入口页,410 更明确,有助于蜘蛛更快移除旧记录。不要用 200 返回一个“该页不存在”的提示页,这会让无效 URL 被当成有效内容反复抓取。
如果只是临时维护,别用 404,改用 503 并配合 Retry-After。
403 与 429:拦截和限速要谨慎
403 常见于 WAF 或权限拦截,蜘蛛拿到 403 会认为页面不可访问,多次之后可能降低抓取频率。429 表示请求过多,蜘蛛会退避,但如果长期 429,抓取量会明显下滑。入口页如果必须限速,尽量对正常爬虫放行,仅对异常高频请求限流,别把整个 IP 段一刀切。
5xx:最容易被忽略的抓取杀手
500、502、503、504 会告诉蜘蛛服务器不稳定。偶尔出现影响不大,持续 5xx 会让蜘蛛降低抓取优先级,甚至暂停抓取。排查时先看源站负载、数据库连接、CDN 回源,再看是否被上游拦截。临时维护可以返回 503 并加 Retry-After,给蜘蛛一个恢复时间。
一个简单的状态码巡检思路
- 定期抽样入口页状态码,记录 200 占比。
- 检查跳转链长度,尽量控制在一到两跳。
- 确认 404、410 与实际下线状态一致。
- 统计 5xx 比例,超过阈值先查源站。
- 观察 403、429 是否误伤正常蜘蛛。
- 对比状态码变化与抓取量变化,找到关联。
状态码是蜘蛛判断入口页可抓性的第一层信号。把该 200 的页面做扎实,把该跳转的固定下来,把该下线的清理掉,比反复换域名更省事。