為什么 5xx 比 404 更影响抓取节奏
404 表示頁面不存在,蜘蛛通常會較快停止訪問该 URL。5xx 表示服務器暂时無法完成請求,蜘蛛會把它当作可恢复的错誤:先短時間重试,如果持續失敗,就會降低對该站点的抓取频次。這個過程常被称為抓取退避。退避一旦形成,恢复不是立刻的,即使服務器已经恢复正常,抓取量也可能需要一段時間才回到原有水平。
先在抓取日誌里確認三件事
不要只看服務器监控。把蜘蛛訪問日誌和源站错誤日誌對照,重点確認:
- 5xx 占比:是集中在少數 URL,還是全站随机出現。
- 時間分布:是否與發版、备份、定时任務、流量高峰重合。
- URL 類型:列表頁、詳情頁、静態资源、接口路径,哪一類最先失敗。
如果 5xx 集中在某類動態路径,問题往往在應用层;如果静態文件也大量 5xx,則更可能是 CDN 回源、负载均衡或網絡层。
按层排查常见诱因
- CDN 與回源:查看回源 5xx 比例、回源超时設定、源站健康检查是否誤判。CDN 缓存了 5xx 响應时,蜘蛛可能在短時間内反复拿到同一個错誤頁。
- 應用進程:PHP-FPM、Java 线程池、Node 進程是否被打满,是否出現重啟或排队超时。
- 資料库與缓存:连接池耗尽、慢查询堆积、Redis 超时,常表現為 500 或 504。
- 限速與防護:WAF、限速規則、防爬策略是否把蜘蛛請求誤判為異常流量,返回 503。
- 發布與运维操作:滚動發布、批量生成静態頁、資料库备份是否造成短时不可用。
503 與 Retry-After 的使用邊界
計划维護时,返回 503 並附带 Retry-After 比直接返回 500 更清晰,但不要把它当作長期挡箭牌。频繁或長時間 503 同样會让抓取频次下降。若只是單個接口抖動,優先修复接口,而不是让整站返回 503。
抓取退避是渐進的:错誤持續越久,恢复越慢。修复後先保證一段時間内稳定返回 200,再观察抓取频次變化。
修复後如何观察回稳
- 连續几天查看蜘蛛訪問日誌中的 5xx 比例,確認降到可忽略水平。
- 對比修复前後的日均抓取 URL 數與抓取频次,不要只看單日峰值。
- 检查 Sitemap 和重要内鏈入口是否仍能正常訪問,避免错誤頁被缓存。
- 如果使用 CDN,清理異常狀態碼缓存,並確認回源健康检查路径不會被蜘蛛大量訪問。
常见誤区
- 只重啟應用,不查根因,導致 5xx 反复出現。
- 把 5xx 当成 404 處理,忽略退避對抓取预算的影响。
- 在 robots.txt 中临时屏蔽整站,恢复後忘记移除。
- 修复後立刻提交大量 URL,期望抓取量马上回升。
服務器稳定性是 URL 發現和抓取的基础。把 5xx 控制在低水平並保持一段時間,比短期内的各種提交動作更有效。抓取频次的恢复需要观察周期,建议以周為單位對比日誌,而不是频繁調整規則。