搜尋抓取

服務器故障窗口内的 URL 發現:抓取中断的判断與恢复顺序

服務器故障时,搜尋蜘蛛看到的可能是连接超时、5xx 或缓存命中的正常頁面,不同返回對 URL 發現的影响並不一样。本文梳理故障期間建议的返回方式、恢复时先放出哪些頁面、哪些临时改動要避免,以及恢复後如何用抓取日誌核對發現鏈路是否已经接上。

搜尋抓取

服務器故障窗口内的 URL 發現:抓取中断的判断與恢复顺序

服務器出故障的那几個小时,站点的 URL 發現往往比頁面本身更早受影响。頁面打不開只是暂时看不到内容,但抓取路径断了之後,新 URL 進入队列的节奏會被推迟很久。下面按故障窗口、恢复顺序和事後核對三部分说说怎么處理。

故障期間搜尋蜘蛛會遇到什么

同一段時間里,不同 URL 的返回结果可能完全不一样:

  • 连接超时或连接被拒:通常發生在负载打满、進程挂掉的时候,蜘蛛拿到的是網絡层的失敗。
  • 5xx 响應:程序還在跑,但資料库或缓存不可用,返回 500、502、503。
  • 正常返回:静態頁、CDN 缓存命中的頁面照常打開。

這几種情况的後續影响不同。5xx 一般被当作临时故障處理,蜘蛛會隔一段時間回来重试;连接失敗也類似。但如果故障期間返回的是 200 狀態碼的空頁面或错誤提示頁,問题就從服務层變成了内容层,處理起来反而更麻烦。

為什么 URL 發現會先断

URL 發現依赖的是「抓到頁面 → 讀出連結 → 把新 URL 放進队列」這條鏈,鏈路前段一断,後面全停:

  • 列表頁、栏目頁打不開,新發布的詳情頁就没有入口被讀出来。
  • Sitemap 如果和主站放在同一台机器、同一個域名下,故障期間可能一起拿不到。
  • 内鏈集中在導航和侧栏,導航又依赖動態查询,故障时往往最先失效。

已经進過队列的 URL 不會因為一次故障就消失,但「已發現未抓取」的數量會在這段時間停止增長,恢复後也不會立刻补上。

恢复时的顺序

如果只能分批恢复,建议按下面顺序,把發現路径最短的环节先放出来:

  1. 首頁與主要栏目頁,保證入口可訪問。
  2. 站内搜尋、分類列表等承载大量連結的聚合頁。
  3. Sitemap 文件本身,以及 Sitemap 索引。
  4. 詳情頁、评论、用戶中心等末端頁面。

恢复過程中可以留意抓取日誌里的狀態碼分布,如果 5xx 比例還在高位,說明還没到可以让蜘蛛放心抓的阶段。

故障期間不建议做的事

  • 不要用 200 返回空白頁或错誤提示頁。蜘蛛會当成正常内容抓走,後面要靠内容更新来纠正。
  • 不要全站 301 到首頁。這會改變大量 URL 的落地位置,恢复正常後需要重新校正。
  • 不要临时加 Disallow。robots.txt 的拦截是長期的,忘了改回来會直接影响發現。
  • 不要顺手改版。故障窗口内做结构改動,出問题後很难判断是哪一步造成的。
临时维護更稳妥的做法是返回 503 並带上 Retry-After,让蜘蛛知道這是短时狀態,而不是内容消失。

恢复後的核對清單

服務恢复不代表影响結束,可以按這几項對一遍:

  • 抓取日誌中故障時間段的 5xx 數量與持續時間,判断影响范围。
  • Sitemap 是否已能被正常訪問,索引文件與分片是否齐全。
  • 最近發布的頁面是否已经被列表頁、導航重新連結到。
  • 「已發現未抓取」的數量是否開始回落。
  • 首頁到詳情頁的連結路径是否和故障前一致,有没有因為临时改動留下断鏈。

站点稳定性本身就是抓取效率的一部分。與其在故障後反复提交,不如把入口頁、Sitemap、列表頁做成故障时也能撑住的静態兜底,把 URL 發現這條鏈保護住。