搜尋抓取

404、410 還是 503:狀態碼怎么影响蜘蛛對 URL 的取舍

狀態碼是蜘蛛判断 URL 存留的第一手信号。本文梳理 200、3xx、404、410、503 各自的适用场景,重点讲软 404 的识別與處理,以及 5xx 持續出現對整站抓取的影响,並给出一份可直接执行的排查清單。

搜尋抓取

404、410 還是 503:狀態碼怎么影响蜘蛛對 URL 的取舍

狀態碼是蜘蛛判断 URL 存留的第一手信号

蜘蛛抓一個 URL,最先看的是响應狀態。它不了解你的业務,只能靠狀態碼、頁面内容和歷史记錄去推断這個地址還该不该留在队列里。所以狀態碼寫错,往往不只是“服務器报错”這種小事,而是直接影响 URL 的發現與去留。

200 與 3xx:正常路径

200 表示内容可取。需要注意的是,只有正文真正有内容时,200 才有意义。

3xx 是跳轉。一跳的 301 能把訪問者和發現信号顺着传到新地址,鏈條拉長了就會损耗。永久搬家用 301,临时活動用 302,別長期用 302 顶替 301。

404 與 410:刪除也要给個明确答案

两者都表示内容不在,但语义不同。

  • 404:暂时找不到或狀態不确定,蜘蛛會保留观察,過段時間再来看看。
  • 410:确定永久移除,通常比 404 更快让蜘蛛把地址從队列里清出去。

如果是批量下架的商品、過期活動頁,用 410 更干脆;如果不确定以後會不會恢复,404 更稳妥。

還要提醒一点:如果這個地址本身有外部連結、也有真實用戶訪問,直接给 404 不如先做 301 到相關頁面,把訪問者和信号接住。

软 404 是最容易踩的坑

頁面返回 200,正文却寫着“该商品已下架”“暂無相關内容”——這就是软 404。蜘蛛拿到 200,會当成正常頁面繼續抓、繼續占配額,甚至反复回来確認。判断方法很简單:在服務器日誌或抓取工具里看看,那些空结果頁是不是長期被反复抓取。如果是,把它們改成真正的 404 或 410。

503:临时停服的正确寫法

维護、压测、临时過载时用 503,表示“現在不行,稍後再来”。它比 500 友好,因為语义上明确是临时的。

  • 配合 Retry-After 响應头,告诉蜘蛛多久之後再来。
  • 不要長期挂着 503,拖得太久,蜘蛛可能開始降低訪問频率。
  • 不要用 503 冒充 404 去藏地址,這样只會让蜘蛛反复重试。

5xx 持續出現會拖慢整站

500、502、504 這類错誤偶發問题不大。但如果某個目錄、某類模板经常 5xx,蜘蛛會判断這块区域不稳定,降低抓取频率,连带影响同一批 URL 的發現速度。

排查顺序一般是:先看是不是某個接口超时,再看資料库连接,最後看是否有模板在處理異常參數时崩溃。把出错集中在少數 URL 上,比让整站响應變慢要好。

狀態碼要前後一致

常见的不一致有几種:

  • 同一個 URL,有时 301 到 A,有时 301 到 B。
  • 移動端返回 404,PC 端返回 200。
  • 带參數返回 200,不带參數返回 404,而两者其實是同一内容。

這些都會让蜘蛛反复试探,浪費抓取配額。處理原則是:一個 URL 只對應一種结果,跳轉目标固定,设备差异交给自适應或對應的标注方式處理。

狀態碼不是给用戶看的装饰,而是给机器看的结论。寫得越确定,蜘蛛做决定越快。

一份可执行的检查清單

  1. 導出近期日誌里的 4xx、5xx 地址,按目錄归類。
  2. 区分哪些是真正下线的(该 410),哪些是跳轉没做好(该 301)。
  3. 找出返回 200 但正文為空的頁面,逐個改成 404 或 410。
  4. 检查维護頁是否用了 503 並带 Retry-After。
  5. 检查同 URL 的狀態碼是否稳定,特別是移動端與 PC 端。
  6. 改完後观察一周,看這類地址的抓取频次是否下降。

狀態碼處理干净,URL 發現的队列才會干净。它不會直接带来排名,但能减少無效抓取,让蜘蛛把時間花在真正需要被看见的地址上。