搜尋抓取

抓取路径上的狀態碼:蜘蛛遇到 200、301、410、503 时分別怎么走

服務器返回的狀態碼,是蜘蛛判断下一步怎么做的重要依據。本文按 2xx、3xx、4xx、5xx 四類,說明蜘蛛在抓取路径上會如何反應,並给出跳轉鏈、软性狀態、维護窗口等常见問题的排查思路。

搜尋抓取

抓取路径上的狀態碼:蜘蛛遇到 200、301、410、503 时分別怎么走

服務器返回什么狀態碼,是蜘蛛决定“這個 URL 還要不要繼續看”的第一手依據。同样是一次抓取,200 和 503 對蜘蛛的含义完全不同:前者是“内容在這里”,後者是“我現在拿不到,過一會儿再来”。理解這层含义,能把不少抓取異常定位到服務器配置或路由規則上,而不是一味怀疑連結寫得不够。

狀態碼是蜘蛛的下一步指令

蜘蛛拿到响應後,先看狀態碼,再看内容。狀態碼决定了它是把 URL 放進待解析队列、沿着 Location 繼續跳,還是暂时搁置、過段時間再来。

  • 2xx:認為抓取成功,正文會進入解析流程。
  • 3xx:不解析正文,改去請求 Location 指向的地址。
  • 4xx:除少數情况外,视為该 URL 目前不可用,通常不再频繁回訪。
  • 5xx:视為服務端临时故障,属于“可以再试”的一類。

200 不等于一切正常

有些頁面返回 200,正文却是“抱歉,该商品不存在”“暂無資料”這類提示。蜘蛛看到 200,會当成正常頁面繼續處理,用戶点進来却發現是空壳。這類软性狀態需要站点主動返回 404 或 410,让信号保持一致。反過来,如果列表頁在無结果时返回 404,但用戶仍可通過參數訪問到有内容的版本,也要留意別誤伤真正有價值的頁面。

3xx:跳轉能让蜘蛛跟几次

301 表示永久迁移,蜘蛛會把新地址作為規范版本;302、307 表示临时,蜘蛛一般仍保留原地址。鏈條上每多一次跳轉,就多消耗一次請求;鏈路過長或出現回环,蜘蛛可能中途放弃。常见做法是让跳轉直達最终地址,不要在中間叠好几层。

常见的跳轉配置問题

  • 老域名整站 301 到新域名首頁,原頁面與新頁面的對應關系會丢失,建议一對一映射。
  • http 到 https 的跳轉没做全时,部分 URL 會走两次跳轉才落地。
  • 带斜杠與不带斜杠的地址互相跳轉,容易形成回环。

4xx:明确说“這里没有”

404 和 410 都表示頁面不存在,区別在于 410 更明确地表達“已永久移除”。内容下架後返回 404 或 410,比繼續返回 200 的空白頁更清晰。403 表示有權訪問但被拒绝,蜘蛛會理解為“暂时看不到”,如果長期如此,抓取會减少。

429 是“請求過于频繁”。当抓取速率超過服務器承受范围时,返回 429 並配合 Retry-After,比直接超时更明确,蜘蛛會按提示降低频率。

5xx:服務器稳定性直接反映在抓取节奏上

500、502、503、504 通常来自程序異常、網關問题或後端超时。偶發几次影响不大,但如果持續存在,蜘蛛會降低對该站点的抓取频次,恢复也需要時間。計划维護时返回 503 並给出 Retry-After,比让用戶和蜘蛛看到超时頁面更可控。

需要留意的几種情况

  1. 源站慢導致 504,邊缘缓存却返回 200 的舊内容,容易造成同一 URL 内容不一致。
  2. 資料库压力大时随机返回 500,蜘蛛會反复重试,進一步加重负载。
  3. 部分节点故障導致同一 URL 时好时坏,抓取结果不稳定。
狀態碼是站点對蜘蛛说的话。说得越准确,蜘蛛越容易把有限的抓取资源花在真正有内容的 URL 上。

排查思路

  • 用訪問日誌按狀態碼分组,看 404、500、301 各自的占比與集中路径。
  • 對重要頁面做一次狀態碼抽查,確認没有意外的跳轉鏈。
  • 站点改版後,检查舊 URL 是 301 到新地址,還是直接變成了 404。
  • 抓取量異常下降时,先看服務器是否在连續返回 5xx。

把狀態碼處理好,並不保證頁面一定被抓取或被收錄,它只是把抓取路径上的障碍减少一些,让蜘蛛每次来訪都能得到明确的答复。