蜘蛛池知识

蜘蛛池入口頁的 HTTP 狀態碼怎么選:200、404、410、429、503 的适用场景

蜘蛛池入口頁返回什么狀態碼,直接影响蜘蛛下一次的判断。本文按 200、404、410、429、503 分別說明适用场景、Retry-After 的用法,以及软 404、長期 5xx 這些容易被忽略的坑,最後给出一份可以直接對照检查的配置清單。

蜘蛛池知识

蜘蛛池入口頁的 HTTP 狀態碼怎么選:200、404、410、429、503 的适用场景

蜘蛛訪問一個入口頁时,服務器返回的第一個信息不是頁面内容,而是狀態碼。蜘蛛通常會先看狀態碼,再决定這次抓取怎么處理:是收下頁面、過段時間再来,還是把這個 URL 标记成失效。很多入口頁效果不理想,問题並不在内容本身,而是狀態碼用错了地方。

狀態碼先分成四類看

2xx 表示正常返回,3xx 表示跳轉,4xx 表示請求本身有問题,5xx 表示服務器這邊出了問题。入口頁日常會用到的,主要是 200、404、410、429、503 這几個。它們各自對應的语义不一样,混用會让蜘蛛的判断也跟着乱。

200:入口頁的預設狀態

只要頁面能正常返回内容,就返回 200。不要為了临时隐藏頁面、或者做灰度測試,把一個正常頁面改成 404 或 503,這類改動蜘蛛看到之後,會按對應语义處理,恢复起来需要時間。

几種容易誤用 200 的情况

  • 空模板頁、占位頁返回 200,蜘蛛會当成正常頁面收下;
  • 後端报错时把错誤信息渲染成一個正常頁面返回 200;
  • 列表頁没有内容时仍然返回 200,而不是提示為空。

404 與 410:確認不再提供的入口頁

404 表示暂时找不到,410 表示确定永久刪除。理论上 410 的信号更明确,蜘蛛處理时通常更快把 URL 從索引中清理掉。但前提是:這個入口頁确實不打算再做了。

  • 入口頁被合並到另一個保留頁面:優先做 301,而不是直接 404;
  • 内容彻底下线、也不再复用:410;
  • 只是临时维護、換服務器:不要用 404 或 410,用 503 更合适。

429 與 503:限流和维護要用對

429 表示請求太频繁被限流,503 表示服務暂时不可用。這两個都允许带 Retry-After 响應头,告诉蜘蛛多久之後再過来。寫得具体一点,比让它自己猜要稳妥。

  • 自己做了訪問频率限制:返回 429,並带上 Retry-After;
  • 資料库、後端服務临时故障:返回 503,並带上 Retry-After;
  • 不要用 200 包一個「請稍後再试」的提示頁,那属于软错誤。

5xx 長期挂着會有什么影响

短時間内少量 5xx 一般問题不大,但如果某個目錄長期大量返回 500、502、503,蜘蛛通常會降低這個目錄的抓取频率,嚴重时暫停抓取。等狀態恢复之後,抓取节奏要重新爬回来,需要一段時間。所以 5xx 應该是短期的、有明确原因的,而不是服務器一直没修好。

软错誤:狀態碼和内容對不上

返回 200,頁面正文里寫着「内容不存在」或「已刪除」——這就是典型的软 404。蜘蛛會把它当作正常頁面收下,時間一長,入口頁里就堆了一批没有實际内容的頁面,反而稀释了整体质量。

處理办法很简單:頁面内容如果真的没了,就让狀態碼也跟着變,別让两者各说各话。

一份可直接對照的配置清單

  1. 能正常展示内容的入口頁:200;
  2. 已合並的低质入口頁:301 到保留頁面,不要直接刪除;
  3. 確認永久下线的入口頁:410,過渡期先用 404 也可以;
  4. 触發频率限制:429 + Retry-After;
  5. 後端临时故障:503 + Retry-After,恢复後尽快改回 200;
  6. 定期抽检:日誌里 5xx 的占比如果一直偏高,先查服務器,再谈抓取。

狀態碼本身不复杂,难的是長時間保持一致。入口頁數量多的时候,建议用脚本定期抽查一批 URL,看看同一個模板下的頁面是不是一半正常、一半报错。把這件事做成例行检查,比出問题之後再回头排查要省事得多。