站点运营

站点运营:5xx 错誤與抓取中断,服務器不稳时蜘蛛會遇到什么

服務器間歇性返回 5xx,看起来只是偶發故障,却會让蜘蛛的抓取請求不断落空。這篇文章說明 5xx 與 4xx 的区別、蜘蛛對 5xx 的常见處理方式、典型来源,以及临时下线时如何用 503 與 Retry-After,並给出一份排查顺序和日常预防清單。

站点运营

站点运营:5xx 错誤與抓取中断,服務器不稳时蜘蛛會遇到什么

站点运营里有一類問题不太起眼,但影响很直接:服務器或應用不稳定,頁面間歇性返回 5xx。對訪客来说是“偶尔打不開”,對蜘蛛来说則是“這個地址現在拿不到内容”。偶發一次通常問题不大,持續几天就會拖慢新内容被發現的速度。

5xx 和 4xx 不是一回事

4xx 一般表示請求本身有問题,比如地址不存在(404)或權限不足(403),蜘蛛拿到這類响應後,會倾向于减少對该地址的訪問。5xx 的含义完全不同:請求是合理的,是服務端没能完成處理。所以两者的排查入口要分開——看到 404 先查連結,看到 5xx 先查服務器。

一句话原則:404 是“這里没有這個東西”,5xx 是“我現在给不了你”,後者通常是暂时的。

蜘蛛遇到 5xx 通常會怎样

多數搜尋引擎會把 5xx 视為临时故障,不會立刻把頁面從索引里拿掉,但會带来几個连鎖反應:

  • 该次抓取被记為失敗,這次請求占用的抓取額度等于浪費了;
  • 同一個地址會被安排稍後重试,重试期間新 URL 的排队會變慢;
  • 如果整站连續多天大面积返回 5xx,抓取频率通常會被調低,恢复需要時間;
  • 已收錄頁面可能因為多次抓取失敗,摘要更新變得不稳定。

這些是常见的经驗規律,具体行為會因搜尋引擎和時間窗口而不同,不要把某一次观察当成定论。

常见的 5xx 来源

應用层

  • 資料库连接數打满、慢查询堆积,頁面在超时前返回 500;
  • 第三方接口(支付、评论、外部脚本)挂掉,把整個頁面拖崩;
  • 代碼異常未捕获,只在特定參數或特定 UA 下触發。

服務器與基础设施

  • 進程數或内存不足,PHP-FPM、Node 進程被系統杀掉;
  • 磁盘寫满,日誌、缓存、上传目錄撑爆分区;
  • 部署窗口、重啟、證书或配置變更期間的短暂不可用;
  • CDN 或 WAF 規則誤伤,把正常請求拦成 5xx。

需要临时下线时,用 503 而不是 500

维護、迁移、压力過大需要短暫停止服務时,返回 503 比返回 500 更明确。503 表達的是“服務暂时不可用”,配合 Retry-After 头告知大致恢复時間,比让蜘蛛自己猜要友好。注意几点:

  • 只對确實無法服務的請求返回 503,不要把正常頁面一起挡掉;
  • 维護時間尽量短,長時間挂着 503 對抓取的影响和停机差別不大;
  • 不要用 503 長期替代 404,把该下线的頁面一直留在维護狀態,會积累成结构噪音。

排查顺序

  1. 先看日誌:服務器訪問日誌、應用错誤日誌、資料库慢查询日誌,按時間段對齐;
  2. 分清范围:是全站還是某個栏目,是全部請求還是只對特定 UA、特定 IP 段;
  3. 看時間規律:是否集中在备份、定时任務、批量發布的時間点;
  4. 复現:用相同 URL 和 UA 手動請求,观察狀態碼與响應時間;
  5. 看上游:CDN、WAF、负载均衡的日誌和拦截規則,確認是不是這一层返回的错誤。

日常预防

  • 给 5xx 數量和比例设监控告警,而不是等訪客反馈;
  • 日誌做切割與轮轉,避免磁盘被寫满;
  • 部署前检查依赖服務,避免“一個插件挂了全站 500”;
  • 把非核心功能(评论、推荐、統計脚本)做成失敗可降級,不要阻塞主内容;
  • 定期按狀態碼分布統計蜘蛛請求,5xx 比例上升通常早于抓取量的變化。

服務器稳定是站点运营最底层的一件事。内容、内鏈结构、URL 規范,都建立在“頁面能正常返回 200”這個前提上。把 5xx 压下去,不是為了讨好谁,而是让已经做好的那些工作不至于白費。