大多數站点运营者更在意 404 和软 404,因為那類問题看起来「和内容有關」。但真正會让搜尋引擎放慢抓取的,往往是 5xx。404 說明「這個地址没有東西」,5xx 說明「服務器現在不行」。前者是内容判断,後者是稳定性判断,而搜尋引擎對後者的容忍度低得多。
為什么 5xx 比 404 更值得優先處理
当蜘蛛請求一個地址並收到 500、502、503、504 這類狀態碼时,它得不到任何有效信息:既不知道頁面是否還存在,也不知道该不该從索引里剔除。于是常见的连鎖反應是——
- 已有索引被暂时保留,但真實訪客点進去只看到错誤頁;
- 抓取配額被浪費在反复重试同一個地址上,新内容發現變慢;
- 如果整站大面积返回 5xx,抓取频率可能被整体下調,恢复起来需要時間。
也就是说,5xx 不只是「這一刻打不開」,它會影响接下来一段時間的抓取节奏。
常见的 5xx 来源
- 資料库连接被打满:並發一上来,查询排队超时,頁面直接 500。
- 後端脚本执行超时:某個栏目頁的聚合逻辑太重,平时勉强跑得動,流量一涨就崩。
- 反向代理與源站配置不一致:超时時間、协议、端口對不上,表現成 502。
- CDN 回源失敗:源站短暂不可用,邊缘节点返回 5xx,日誌却不在源站上。
- 發版或重啟没有優雅降級:進程切換的几十秒里,請求全部失敗。
怎么查:三個角度交叉驗證
- 服務器訪問日誌:按狀態碼做統計,重点看 5xx 集中在哪些 URL 前缀、哪些時間段。是整站性的,還是集中在某個栏目或接口上。
- 站点监控:用外部拨测覆盖首頁、栏目頁、詳情頁各取几個样本,避免只监控首頁而漏掉深层頁面。监控频率不要太低,否則短时抖動會被完全忽略。
- 搜尋後台的抓取統計:看抓取错誤里的服務器错誤條目,以及抓取频率曲线有没有明顯下滑。這一項能帮你判断問题是不是已经影响到蜘蛛。
三個角度如果指向同一批 URL,基本就能定位了;如果只有日誌有異常而监控正常,往往是特定 UA 或特定路径才有問题,需要單獨构造請求复現。
處理时的几個原則
先恢复稳定,再谈優化
出問题时優先让頁面能正常打開,哪怕暂时降級成静態缓存或简化版頁面,也比持續返回 5xx 好。降級时狀態碼仍然是 200,内容是完整的,這對蜘蛛来说是可用頁面。
维護窗口用 503,不要用 404 或 200
計划内维護應该返回 503,並带上合理的 Retry-After 响應头。返回 404 會让蜘蛛誤以為頁面消失,返回 200 却给空内容則容易形成软 404,两者都會让索引狀態變乱。
限流要留白名單
為了防止爬虫压力打垮服務器而做限流,思路没错,但要给搜尋引擎的 UA 留出合理額度,否則限流本身就成了新的抓取障碍。同时避免「超過阈值就直接 5xx」,更稳妥的做法是排队或返回 429。
恢复之後要做的收尾
- 观察一到两周的抓取频率,確認是否回到原有水平;
- 把這次的错誤样本整理成告警規則,覆盖到目錄級而不只是首頁;
- 检查被错誤影响期間是否有頁面被誤判、需要重新提交;
- 记錄原因與處理動作,下次同類問题不必從零排查。
5xx 自查的重点不是「找出一個 bug」,而是让服務器在異常时也能给出可理解的狀態碼。蜘蛛不怕你慢,怕的是你什么都不说。