常见問题

入口頁频繁返回 429 或 503,搜尋蜘蛛會怎么調整抓取节奏

入口頁返回 429、503 或 5xx 时,搜尋蜘蛛的處理方式並不相同。本文梳理三類错誤碼的含义、Retry-After 的正确用法、错誤率與抓取频次的關系,以及一套可执行的排查顺序,帮助减少入口頁因服務端错誤出現的抓取节奏下滑。

常见問题

入口頁频繁返回 429 或 503,搜尋蜘蛛會怎么調整抓取节奏

做蜘蛛池入口頁时,服務端错誤碼经常被当成小事處理:先重啟服務,或者干脆換個 IP 繼續。但搜尋蜘蛛對不同的错誤碼有不同解讀,429、503 和 5xx 带来的後果差別很大,值得單獨理一遍。

先分清三類错誤碼的含义

搜尋蜘蛛拿到响應後,第一件事是判断這個頁面現在能不能訪問。同样是失敗,信号强弱並不一样:

  • 404 / 410:明确的“不存在”,長期返回會逐步把 URL 從索引里清掉,入口頁尤其敏感。
  • 403 / 401:訪問被拒绝,抓取方通常不會反复硬闯,抓取频次會明顯下降。
  • 429:請求過多,属于限流信号,含义是“你在,但慢一点”。
  • 500 / 502 / 503 / 504:服務端問题或临时不可用,一般被视為暂时狀態,會安排重试。

對入口頁来说,最忌讳的是把本该是 404 的頁面返成 200 空内容,或者把限流返成 403。前者會让蜘蛛反复抓取無效頁面,後者等于主動請對方少来。

429:抓取频次下降的起点

429 本身不是封禁,它是服務器主動告诉抓取方目前並發太高。常见触發原因有两個:一是入口頁所在服務器资源有限,二是站内連結數量大、蜘蛛短時間内连續請求。

如果响應里带 Retry-After 头,抓取方一般會按這個時間等待;不带的话,就按自身经驗做退避。問题在于,持續大量的 429 會让搜尋蜘蛛對整站的抓取节奏做整体下調,恢复後也不會马上回到原来的水平。所以看到 429 就換 IP,往往只是把問题推迟到下一個 IP 上。

503 與 Retry-After 的正确配合

計划内的维護、灰度發布、压测,用 503 加 Retry-After 是合适的:既表達了暂时不可用,也给出了恢复時間,能减少被誤判成長期故障的概率。但要注意两点:

  • Retry-After 的時間要给真實值,不要统一寫 86400,那相当于告诉對方一整天別来。
  • 不要為了省事長期挂 503。持續時間過長,抓取方會按不可用處理,恢复後需要一段時間重新建立抓取节奏。

5xx 错誤率與抓取频次的關系

搜尋蜘蛛通常按域名或 IP 维度統計错誤率。短時間内 5xx 占比升高,抓取並發和频次會被压低,這是保護自身资源的常規做法。關键要看清:

  • 错誤集中在某一台机器或某一個入口頁,還是全站性的;
  • 是後端超时導致的,還是反向代理直接返回的;
  • 是否只在抓取高峰期出現,平时正常。

這三種情况對應的修法完全不同,只看總错誤率容易誤判。

排查顺序建议

  1. 先從訪問日誌里按狀態碼分组,看 429、503、5xx 各占多少,是否集中。
  2. 確認是否 CDN、WAF 或安全策略拦截了搜尋蜘蛛,這類拦截常表現為 403 或 429。
  3. 检查後端连接數、超时設定和慢查询,排除资源瓶颈。
  4. 看入口頁是否存在無意义的循环請求,比如頁面上的連結反复指向自身。
  5. 修复後观察一段時間内的回訪情况,不要指望立刻恢复原频次。

几個常见誤区

  • 用 200 返回一個空白頁掩盖错誤,實际上會制造软 404 問题。
  • 用 302 把错誤流量轉走,抓取方跟過去後仍然是错誤頁面,問题没解决。
  • 看到 429 就断定被针對,忽略了自己入口頁的並發设計。
  • 忽略 Retry-After,让抓取方按預設策略退避,恢复時間被拉長。
狀態碼是入口頁和搜尋蜘蛛之間最直接的沟通方式。返回什么碼,就等于告诉對方“現在是什么情况”,含糊不得。

把错誤碼当成信号而不是噪音,入口頁的抓取稳定性會好很多。至于修复之後多久能恢复抓取频次、多久能重新發現目标 URL,取决于站点整体情况和抓取方的調度,没有人能给出确定時間。