搜尋抓取

服務器抖動时,蜘蛛會怎么退让:5xx、503 與抓取节流的實际表現

蜘蛛抓取站点时,5xx 和 404 传递的信号完全不同。本文說明连續 5xx 如何影响抓取频率、局部错誤與整站故障在影响面上的差別,並给出從日誌、CDN 與源站排查狀態碼、维護期返回 503 的具体思路。

搜尋抓取

服務器抖動时,蜘蛛會怎么退让:5xx、503 與抓取节流的實际表現

一個 URL 能不能被發現,前提是蜘蛛来請求时,服務器能给出一份明确的回答。404 说的是“這里没有”,5xx 说的是“現在拿不到”。這两種信号在抓取层面被處理的方式差別很大,而不少“蜘蛛最近不怎么来了”的問题,根源恰恰在後者。

5xx 和 404 传递的不是同一種信息

404、410 属于确定性回答:這個地址上没有内容,蜘蛛记錄之後,長期會减少回訪。5xx 則属于临时性错誤,蜘蛛通常會理解為服務端出了問题,不會立刻给頁面定性,而是把這次抓取记為失敗,安排稍後重试。

這個区別的實际意义在于:一個頁面短暂返回 5xx,一般不會直接導致它被從索引中拿掉,但會拖慢蜘蛛對它的再次訪問。如果同一批 URL 反复 5xx,抓取队列里的重试會不断占用位置,真正的新 URL 發現速度就被挤慢了。

抓取节流:蜘蛛自己會踩刹车

站点的响應時間和错誤率,是蜘蛛調整抓取速率的重要輸入。当错誤比例升高、响應明顯變慢时,蜘蛛會主動降低對站点的訪問频率,日誌里通常表現為来訪次數下降、訪問間隔拉長、並發請求减少。

需要区分的是,這更像一種针對單個站点的自動調速,而不是對整站的整体處置。响應恢复稳定之後,抓取频率一般會逐步回升,只是回升往往比下降慢一些,不會在故障結束的当天就回到原来的水平。

為什么慢响應有时比失敗更麻烦

一次干脆的 5xx,蜘蛛很快就能結束這次請求、轉向下一個 URL。而一個持續十几秒才返回、或者连接挂着不動的請求,會占住连接和等待時間。当站内大量 URL 都出現這種情况时,蜘蛛在一段時間内能抓到的頁面數量會明顯减少,表現上很像“抓取變少了”,其實是被慢响應消耗掉了。

局部 5xx 和整站 5xx,影响面完全不同

  • 單個頁面偶發 5xx:重试几次後通常能恢复,對整体抓取影响很小。
  • 某一類 URL 批量 5xx,比如某個栏目、某组带參數的頁面:會拖慢该目錄下 URL 的發現和更新。
  • 整站大面积 5xx:蜘蛛會明顯降低訪問,恢复後需要一段時間重新建立抓取节奏。
  • 間歇性 200 與 503 交替出現:最难判断,蜘蛛會一邊重试一邊降速,問题持續時間往往被拉長。

排查时,先分清 5xx 是從哪一层出来的

踩到這個問题时,建议按下面的顺序確認,而不是直接改代碼:

  1. 绕開 CDN,用源站 IP 或内網直连測試同一批 URL,確認错誤来自源站還是邊缘节点。
  2. 按狀態碼和時間段聚合服務器日誌,找出 5xx 集中的 URL 類型和發生时段。识別蜘蛛不能只看 UA,尽量结合反向解析或官方 IP 段核對。
  3. 检查後端慢查询、缓存集中失效、定时任務與内容發布高峰是否重叠,這類原因通常表現為成片的 504 或连接超时。
  4. 核對各层超时設定:網關、负载均衡、應用层如果超时阈值不一致,蜘蛛可能收到 504,也可能直接看到连接中断。

维護和故障期間的處理方式

計划内的维護,让頁面返回 503 並带上 Retry-After,比返回 200 的空頁面、或者干脆返回 404 都更清楚。前者告诉蜘蛛“暂时不可用”,後者等于告诉它“這個地址以後別来了”,恢复之後還得重新让它認识這些 URL。

故障恢复後,並不需要立刻把全部内容重新提交一遍。正常的内容更新和内鏈調整,會自然带動蜘蛛重新走一遍站内路径;你可以用抓取統計和 Sitemap 的报错信息观察回升情况,重点看错誤率是否降下来,而不是盯着某一天的来訪量。

需要避免的操作包括:故障期間跑全站重定向、批量把頁面改成 404、临时關閉整站訪問。這几類改動會造成不可逆的信号,恢复之後要花更長時間修正。

5xx 告诉蜘蛛“稍後再来”,404 告诉蜘蛛“別来了”。出問题时,先想清楚此刻應该對它说哪一句。

抓取問题很少由單一原因造成。服務器响應是否稳定,是 URL 發現和抓取路径的地基,先把這個前提確認清楚,再去讨论内鏈结构和 Sitemap 的優化,顺序會顺很多。