搜尋抓取

服務器抖動與抓取节奏:5xx、限速和 CDN 回源怎么影响 URL 發現

URL 被連結和 Sitemap 發現之後,還要靠一次成功的 HTTP 請求才能進入抓取流程。本文拆解 5xx 抖動、429 限速、403 誤拦截和 CDN 回源失敗如何影响蜘蛛的抓取节奏,並给出可以照着做的排查清單。

搜尋抓取

服務器抖動與抓取节奏:5xx、限速和 CDN 回源怎么影响 URL 發現

URL 被寫進 Sitemap、内鏈也挂上了,並不代表蜘蛛一定能顺利拿到内容。在“發現”和“抓取”之間,還隔着一次真實的 HTTP 請求。這次請求能不能成功、耗时多久,很大程度上由站点的服務器狀態决定。抓取路径上的稳定性問题,往往不是一次性故障,而是持續的小抖動,慢慢让一批 URL 長期停在“已發現、未抓取”的狀態。

蜘蛛怎么理解一次失敗

同样是抓取失敗,在蜘蛛眼里的含义並不相同。

  • 5xx:服務器端問题。通常被视為临时狀態,蜘蛛會降低這段路径的抓取频率,稍後再试;持續出現則可能让整個目錄被标记為不稳定。
  • 429 或带 Retry-After 的 503:明确的限速信号。蜘蛛一般會遵守等待時間,但等待期間它不會原地不動,而是先去抓別的 URL。
  • 连接超时、TLS 握手失敗:连响應都拿不到,蜘蛛無法区分是網絡問题還是站点問题,只能保守後退。
  • 403:多半是 WAF 或防爬策略把蜘蛛挡在外面。這類拦截经常是規則誤伤,普通浏览器能打開,蜘蛛却一直拿到 403。

把這几類狀態分開統計,比笼统地看一個“抓取失敗率”更有意义。一次 5xx 抖動可以忽略,连續一周的 403 才是真正在消耗 URL 被發現的机會。

抖動通常從哪来

  • 發布瞬間:批量發文章、清缓存、重啟服務,几秒内出現大量 502。
  • 資料库或接口超时:動態頁面在高峰期响應時間從几百毫秒涨到數秒。
  • CDN 回源失敗:邊缘节点有缓存时一切正常,偏偏回源那一次赶上源站異常。
  • 限速阈值過低:把正常抓取和恶意請求一起限掉。

這些問题的共同点是:人工訪問几乎察觉不到,但蜘蛛是批量、並發、持續地訪問,撞上異常的概率被放大很多倍。

限速是為了让抓取持續,而不是让抓取停止

担心抓取压力是合理的,但處理方式值得斟酌。直接返回 403 或直接断连,會让蜘蛛难以判断该以什么节奏回来;返回 429 並给出 Retry-After,反而是一種更清晰的沟通。允许蜘蛛以較低频率稳定訪問,長期看通常比“高峰封禁、低谷放開”更划算,因為稳定的节奏能让新 URL 更快進入待抓队列。

CDN 與缓存层:蜘蛛看到的是哪一层

接入 CDN 之後,需要先確認蜘蛛拿到的到底是什么:是缓存好的静態结果,還是每次都回源。如果缓存命中率偏低,蜘蛛的每次請求都會打到源站,压力比预想中大得多。另外,如果缓存层對爬虫 UA 做了特殊處理,比如强制回源或返回驗證碼頁,抓取路径就和真實用戶体驗完全脱节,日誌里的狀態碼也會失真,後續分析會被带偏。

站点可以先检查的几件事

  1. 按小时統計日誌里的 5xx 比例,看是否集中在固定的發布时段。
  2. 確認爬虫 UA 是否被 WAF 規則命中,用真實 UA 發一次請求做對照。
  3. 检查 CDN 對爬虫的缓存策略與回源配置。
  4. 给動態頁面加缓存或降級方案,避免高峰期整頁超时。
  5. 關注响應時間的 P95,而不只是平均值。
抓取预算不是被谁抢走的,很多时候是被一次次超时和失敗慢慢耗掉的。稳定的响應,比偶尔很快的响應更有價值。

小结

URL 發現只是入口,真實抓取才是内容進入索引的门槛。把服務器抖動、限速策略和缓存层這三處看清楚,蜘蛛的抓取路径會顺畅不少。這不是一次性的優化,而是需要跟着發布节奏和流量變化持續观察的事情。