狀態碼是蜘蛛最先讀到的信号
蜘蛛抓一個入口頁,還没解析正文,就先拿到了响應头里的狀態碼。它决定了蜘蛛接下来怎么處理這個 URL:当作正常頁面、当作已失效,還是当作临时故障稍後再来。很多站群把注意力放在正文和外鏈上,狀態碼却常年只有一種——200,這會让蜘蛛的判断依據失真。
200:正常,但別用来掩盖問题
200 表示頁面可正常訪問,是入口頁最常见的目标狀態。問题在于,有些站点把不该给 200 的情况也返回 200:
- 入口頁已停用,但仍返回 200 加一段“頁面不存在”的提示文字,也就是软 404。
- 服務器出错,程序捕获異常後返回了一個空白頁,狀態碼仍是 200。
- 需要登入或驗證的頁面,返回 200 但正文只有几句提示。
這几種情况蜘蛛會認為頁面有效,于是繼續回訪、繼續消耗抓取预算,而實际内容並没有變化。狀態碼要跟頁面真實狀態一致,這是最基本的一條。
404 與 410:入口頁退役时的两種表達
入口頁下线,通常有两個選擇:
- 404:頁面不存在。蜘蛛會逐步降低回訪频率,但不會立刻放弃。
- 410:明确表示永久移除。蜘蛛通常比 404 更快停止回訪。
如果只是临时下线、之後可能恢复,不要用 410。如果确定這個入口頁不再使用,410 能让蜘蛛更快把注意力挪走。两者都不要返回 200。
有些站点為了“保持頁面數量”,把所有失效入口頁都跳轉到首頁。這種做法短期看狀態碼是 301 或 200,長期看會让蜘蛛把大量 URL 都指向同一個頁面,浪費抓取額度。
403:拒绝抓取要谨慎使用
403 表示服務器理解請求但拒绝执行。它常见于 IP 封禁、地区限制、UA 拦截。對蜘蛛来说,偶發 403 影响不大,但如果入口頁長期返回 403,抓取频次會下降,甚至被当作不可訪問资源處理。
用防火墙誤伤蜘蛛的情况並不少见。如果發現抓取量突然掉了一截,先查一下是不是把蜘蛛的 IP 段拦了。
429 與 503:告诉蜘蛛“慢一点”,而不是“別来了”
抓取压力大时,很多站点的第一反應是直接返回 403 或断開连接。更合适的做法是:
- 返回 429 Too Many Requests 或 503 Service Unavailable。
- 在响應头里带上 Retry-After,给出一個建议等待時間。
- 等服務恢复後,再让同一批 URL 正常返回 200。
這样蜘蛛知道是临时狀態,會按建议延後重试,而不是把這個入口頁标记為長期不可用。注意 503 不要長期挂——连續多天返回 503,站点整体抓取节奏都會受影响。
500:偶發可以,持續會被记帳
500 属于服務端错誤。單次出現蜘蛛一般會重试,但如果一個入口頁反复 500,或者整站大面积 500,蜘蛛會降低抓取频率,恢复需要時間。排查顺序通常是:資料库连接、程序超时、缓存击穿、磁盘寫满。
常见誤区
- 把 404 頁面做成“推荐内容頁”,還返回 200,结果蜘蛛抓到的是一堆無意义頁面。
- 限速时直接返回 403,让蜘蛛以為整站拒绝抓取。
- 所有異常统一返回 200 加一段提示,日誌里看不到任何错誤。
- 入口頁改版後舊地址返回 200 但内容為空,蜘蛛持續回訪空頁面。
- 用 302 临时跳轉到错誤頁,長期不修正。
一些落地建议
- 定期按狀態碼統計蜘蛛抓取日誌,看 200、404、5xx 各占多少。5xx 比例持續偏高,說明服務端有問题。
- 入口頁下线时,先决定是 404 還是 410,再统一處理,不要一半一半。
- 限速優先用 429 或 503 加 Retry-After,而不是封 IP。
- 狀態碼和頁面内容保持一致,不要让蜘蛛讀到 200 却看到一個错誤提示頁。
狀態碼只是蜘蛛判断頁面的一個信号,把它寫對,不會直接带来收錄,但能减少無效抓取和誤判,让後續的内容和連結工作更容易被正常處理。