蜘蛛抓取頁面时,最不希望遇到的情况不是“頁面不存在”,而是“頁面存在但打不開”。前者返回 404,蜘蛛心里有數;後者往往返回 5xx,或者干脆连接超时,蜘蛛拿不到任何内容,只能空手而归。偶發几次問题不大,但如果這類响應在日誌里成規模出現,站点的抓取节奏就會被打乱。
先分清 4xx 和 5xx
4xx 表示請求本身有問题:地址寫错了(404)、權限不够(403)、參數不對(400)。這類响應通常意味着“這個 URL 不该被抓”,蜘蛛會逐渐减少對它的訪問。
5xx 表示服務器端出了問题:脚本报错(500)、網關错誤(502)、服務不可用(503)、超时(504)。這類响應是临时的、可恢复的,但蜘蛛並不知道你是临时抽風還是彻底坏了,它只能按自己的经驗做判断。
蜘蛛遇到 5xx 會怎么處理
多數搜尋引擎的策略是:遇到 5xx 不會立刻删掉頁面,但會降低對该站点的抓取频次,過一段時間再来重试。如果连續多次都是 5xx,原本已经收錄的頁面也可能被暂时移出结果。換句话说,5xx 是抓取预算和已有收錄的双重消耗。
自查第一步:從日誌里筛狀態碼
- 按狀態碼分组統計,看 5xx 的占比。偶發個位數可以先观察,成片出現就要處理。
- 按 URL 分组,看是不是集中在某几個頁面或某個目錄,往往指向同一個功能模块。
- 按時間段看,如果集中在凌晨,多半和备份、定时任務、資料同步撞车。
- 按 UA 区分,確認是搜尋蜘蛛還是普通用戶,避免把用戶侧的报错当成抓取問题。
常见的 5xx 来源
資料库與缓存
连接池被占满、慢查询堆积、缓存服務重啟,都會让動態頁面直接返回 500。蜘蛛连續抓取同一栏目时,這類問题會被放大。
定时任務與备份
整站备份、全量重建索引、批量導資料這類操作會抢占 IO 和 CPU。安排在凌晨本身没错,但蜘蛛也可能在凌晨来,两者撞在一起就會出現超时。
第三方接口
頁面上的天气、匯率、评论、統計脚本如果同步調用外部接口,對方一慢,你的頁面就跟着超时。
限速與防護規則
有些防護策略會把短時間内的高频訪問当成攻击,返回 503 或直接断開连接。蜘蛛的抓取本身就是连續請求,很容易被誤伤。
超时比 5xx 更隐蔽
有些情况服務器根本没来得及返回狀態碼,连接就被断開了,日誌里可能只有一條“连接重置”,或者什么都看不到。判断方法之一是看响應時間分布:如果某個目錄的平均响應時間明顯高于其他頁面,即使暂时没有 5xx,也值得先優化。
一個可执行的排查顺序
- 先確認范围:是全站還是個別栏目,是持續還是偶發。
- 拉出問题時間段的訪問日誌和错誤日誌,對齐時間点。
- 检查是否有定时任務、备份、發布操作落在同一時間窗口。
- 检查資料库慢查询和连接數,看看有没有明顯峰值。
- 检查防護規則和 CDN 回源配置,確認没有誤拦蜘蛛。
- 修好之後,观察一到两周,看 5xx 比例是否回落。
修复之後做什么
問题解决後,不需要做太多花哨的動作。把 Sitemap 里受影响的重要頁面確認一遍,检查内鏈是否正常,然後等蜘蛛自己回来重抓。如果某個重要頁面長期返回 5xx,可以在修复後主動提交一次,帮助它更快恢复。
监控比补救更划算。给 5xx 设一個阈值告警,比等到抓取量下降再回头翻日誌省事得多。
站点运营里,很多問题不是出在内容上,而是出在“蜘蛛来的时候你的服務器刚好在忙”。把 5xx 和超时当成日常巡检項,抓取的稳定性會好很多。