服務器偶尔抖一下,頁面打不開,蜘蛛會怎么记帳?很多人一看到 5xx 就慌,担心頁面马上從索引里消失;也有人把 404 和 503 混着用,结果让本来只是临时故障的頁面被当成永久不存在。這两種做法都容易让收錄出現不必要的波動。
先分清三類狀態:临时、永久、被限流
蜘蛛判断一個 URL 值不值得再回来,主要看返回的狀態碼语义,而不是你心里的想法。
- 2xx:抓取成功,内容進入解析流程。抓到了不等于收錄,但至少流程正常。
- 3xx:跟着跳轉繼續走,鏈路過長或出現循环會被放弃。
- 4xx:多數被理解為“這個地址不對”。404、410 属于明确的永久信号,反复出現會让 URL 逐步登出抓取队列。
- 5xx:服務器端問题,属于临时性失敗,通常會被重试。
- 429:請求過多,是限流信号,蜘蛛一般會降低訪問频率,而不是認定頁面失效。
一次失敗不會让頁面掉出索引
單次 5xx、超时或连接被拒,通常只是“這次没抓到”,蜘蛛會在後續排期里重试。真正麻烦的是持續性:如果同一批 URL 在較長時間里反复返回 5xx 或超时,常见的後果是抓取频率被压低、這些頁面的更新迟迟不被發現,索引里的版本越来越舊。是否會被移除,取决于失敗持續多久、范围多大,以及這個 URL 本身的重要性,没有一個固定天數可以套用。
把 5xx 当成 404 用,是自查时最常见也最亏的一種寫法。
维護頁该用 503,而不是 404
停机维護、資料库临时不可用,返回 503 並带上 Retry-After,比返回 404 或 200 的空壳頁更符合语义。返回 404 會被理解為頁面永久消失;返回 200 的空頁則容易變成软 404,两種情况都會影响索引里這一頁的去留。
429 通常不是坏事,但要看谁在挨打
CDN、WAF 或限流規則如果對所有来訪者一视同仁,蜘蛛很可能也吃到 429 或 403。短時間内問题不大,長期如此,抓取量會明顯下滑,新頁面被發現的节奏也會被拖慢。可以检查是否给已驗證的爬虫留了正常通道,以及 Retry-After 是否被正确下發。
自查顺序
- 從服務器日誌里按狀態碼分组,看看 5xx、429、超时各自占爬虫請求的比例,以及集中在哪些时段、哪些 URL。
- 對比出問题的 URL 是否属于同一類模板或同一台後端机器,先排除局部故障。
- 看抓取統計里請求量和响應時間的趋势,確認是短期波動還是持續恶化。
- 检查 CDN、WAF 規則、證书和跳轉配置,這些地方最容易在改版後誤伤爬虫。
- 修复後不必急着做額外動作,正常重试會逐步恢复;如果某個重要頁面長期没被重新抓取,再考虑從内鏈或站点地图重新提交。
几個容易踩的点
- 把後端报错统一包装成 200 的空白頁,等于制造软 404,比直接报 5xx 更难排查。
- 用 404 處理所有異常,會把临时故障寫成永久信号。
- 只在高峰期限流爬虫,等于让抓取總在失敗时段進行。
- 證书過期、DNS 解析失敗這類問题,日誌里可能连狀態碼都没有,需要單獨盯监控。
狀態碼是站点對蜘蛛说的“话”。说清楚是临时還是永久,比修好之後反复提交更有效。收錄的恢复通常跟着抓取恢复走,急不来,把错誤率压下去就是最直接的推進。