入口頁返回什么狀態碼,是蜘蛛在拿到 URL 之後最先判断的一件事。連結放上去了、sitemap 也提交了、日誌里也有来訪记錄,但如果狀態碼给错了,蜘蛛對這一整批 URL 的後續安排就會跟着偏。
2xx:看起来最安全,問题常出在软 404
200 表示頁面正常返回。但不少入口頁會把错誤頁也返回 200:URL 實际已经失效,模板照样渲染出一個“内容不存在”的空壳頁,狀態碼却是 200。蜘蛛會把這種頁面当成正常内容收下,占着抓取額度反复回来,也不會有明确的移除動作。
判断软 404 的办法不复杂:看這個 URL 是否長期只返回同一套空模板,看它是否從来没有产生過有效点击或後續爬取。如果是,就應该让它明确返回 404 或 410,而不是繼續挂在 200 上。
3xx:301 與 302 的区別,蜘蛛會记很久
301 表示永久跳轉,蜘蛛會逐步把舊地址的信号迁移到新地址,後續抓取中直接訪問目标。302 表示临时跳轉,蜘蛛一般仍然保留原 URL,繼續回来检查。
在蜘蛛池里,如果入口頁做過地址調整,用错跳轉類型會让蜘蛛長期停留在舊地址上反复空跑。频繁更換跳轉目标更糟:同一個入口頁今天 301 到 A、明天 301 到 B,蜘蛛原有的抓取安排會被打乱。
4xx:404 與 410 的差別在于“多快放弃”
- 404:頁面不存在。蜘蛛會認為可能是暂时情况,之後一段時間内仍可能回訪几次。
- 410:頁面已永久移除。蜘蛛通常會更果断地停止回訪,清理動作相對更快。
入口頁确定要下线时,410 比 404 更干脆。如果只是资源临时不可用,用 404 或 410 都會把之前累积的抓取關系断開,這时更合适的是保留正常的 200 内容,或返回 503。
5xx:蜘蛛會重试,但也會降低来訪频率
500 表示服務端出错,503 表示服務暂时不可用。两者蜘蛛都會当成临时問题,過一段時間再来。但持續的 5xx 會让蜘蛛下調對该站点的抓取频率,即使之後恢复,也需要一段時間才慢慢加回来。
短時間返回 503 並带上 Retry-After,通常比整站返回 500 更容易让蜘蛛按约定等一等。但如果入口頁長期就是 5xx,蜘蛛不會一直等下去。
在蜘蛛池里怎么處理這些狀態碼
- 先看日誌里的狀態碼分布。把入口頁按 200、3xx、4xx、5xx 分组統計,異常比例突然升高,往往比總量下降更早暴露問题。
- 软 404 要统一收口。失效入口頁明确返回 404 或 410,不要让它們繼續以 200 存在。
- 跳轉尽量一次到位。确定目标後用 301,避免反复更換目标地址。
- 维護窗口用 503 加 Retry-After。比直接返回 500 或干脆關站更可控。
- 過期入口頁要有下线計划。批量失效的 URL 集中處理,比零散报错更容易排查和复盘。
小结
狀態碼是入口頁對蜘蛛说的第一句话,也是最容易被忽略的一句。200 用對是基础,3xx 用對是迁移,4xx 用對是止损,5xx 用對是暫停。把這四類情况分清楚,往往比繼續增加入口頁數量更能决定蜘蛛愿不愿意繼續来。