蜘蛛每次訪問入口頁,服務器都會回一個 HTTP 狀態碼。這個三位數字比日誌里的 UA 更诚實:它直接說明服務器愿不愿意把内容交出去。把几天日誌里的狀態碼做個分布統計,往往比逐條翻抓取记錄更快發現問题。
2xx:返回正常,但不等于有效
200 是最常见的返回,要留意两種“假正常”:
- 200 但正文為空:頁面能打開,抓到的却是一段空白模板或 JS 壳,蜘蛛拿不到連結,這次抓取就白費了。
- 软 404:内容其實不存在,却仍然返回 200,並展示“暂無内容”。蜘蛛會把它当正常頁反复回訪,既浪費抓取预算,也让入口頁整体顯得低质。
驗證方法很简單:随机抽几個入口 URL,用抓取工具看返回体里到底有没有可跟的連結和一点實际文字。
3xx:跳轉方式决定蜘蛛跟不跟
301 與 302 的差別
301 表示永久迁移,蜘蛛通常會把原地址替換成新地址;302 是临时跳轉,蜘蛛一般保留原 URL 並繼續回訪。如果入口頁本来只做連結分發的中轉,用 302 更贴合语义,也能避免一堆中轉地址被寫進索引。
跳轉鏈不要太長
每多一跳,蜘蛛就多花一次請求,跟丢的概率也更高。入口頁到目标頁尽量控制在一到两跳,同时避免出現 A→B→A 的回跳,那會让蜘蛛在循环里打轉。
4xx:明确拒绝與死鏈
- 403 / 401:通常是 WAF、IP 黑名單或鉴權拦住了。要区分是只拦蜘蛛,還是拦所有人。
- 404:普通死鏈,蜘蛛會反复確認,清理或改 301 更好。
- 410:明确告知已刪除,蜘蛛一般比 404 更快放弃,批量下线资源时可以用。
- 429:說明請求太密被限流。此时應降频或扩容,而不是繼續往里塞連結。
5xx:自己的問题,先修服務
500、502、503、504 都属于服務端異常。偶發可以忽略,如果日誌里 5xx 占比持續偏高,蜘蛛會主動降低来訪频率,恢复需要時間。503 可以配合 Retry-After 头告诉蜘蛛多久後再来,比直接超时更友好。
用狀態碼分布做日常巡检
- 統計近 7 天蜘蛛請求的狀態碼占比,2xx 應占绝大多數。
- 把 3xx 的跳轉鏈画出来,找出多跳與回跳。
- 把 4xx、5xx 的 URL 單獨列一份清單,逐條確認原因。
- 對長期 200 但零連結、零正文的頁面做替換或下线。
狀態碼只說明“這次請求發生了什么”,不代表内容會被收錄。把狀態碼修干净是基础工作,不要指望改几個返回碼就能带来收錄變化。
建议把狀態碼統計固定成每周一次的動作,和抓取量放在一起看。抓取量下滑时,先看是不是某一類狀態碼突然變多——多數異常在數字上會先露头。