蜘蛛抓取入口頁时,服務器返回的 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 的頁面做扎實,把该跳轉的固定下来,把该下线的清理掉,比反复換域名更省事。