搜尋抓取

Crawl-delay 设了之後,蜘蛛是抓得稳了還是干脆不来了

服務器压力大时,很多人會在 robots.txt 里加 Crawl-delay。這個指令並非所有蜘蛛都嚴格遵守,設定後會降低請求频率,也可能推迟新 URL 的發現。本文說明它适合哪些场景、有哪些更细的替代做法,以及如何用日誌驗證限速是否真的起了作用。

搜尋抓取

Crawl-delay 设了之後,蜘蛛是抓得稳了還是干脆不来了

服務器偶尔扛不住蜘蛛的並發請求时,很多人的第一反應是在 robots.txt 里加一行 Crawl-delay。這個指令看起来简單,但它的實际效果取决于蜘蛛是否遵守、你的站点規模以及抓取需求的紧迫程度。設定之前,最好先弄清楚它會改變什么。

Crawl-delay 是什么,哪些蜘蛛會看

Crawl-delay 寫在 robots.txt 中,用来告诉蜘蛛两次請求之間至少間隔多少秒。它和 Disallow 不同,Disallow 是拒绝訪問某段路径,Crawl-delay 是要求降低訪問频率,並不禁止抓取。

需要留意的是,不同搜尋引擎對這個指令的態度並不一致。有的蜘蛛會明确讀取並遵守,有的則把它当作參考,甚至完全忽略。也就是说,你不能假设寫了就一定會生效,尤其不能把它当作控制抓取量的唯一手段。

設定之後,抓取會發生什么變化

  • 單位時間内的請求數下降,服務器压力随之减轻;
  • 同样一段時間内,蜘蛛能翻的頁面變少,新 URL 的發現和重抓可能被推迟;
  • 如果站点本身頁面不多,影响通常有限;如果 URL 數量大、更新频繁,延迟會累积得比較明顯。

換句话说,它是在用抓取速度換服務器稳定。這個交換是否划算,要看你的站点處于什么阶段。

哪些情况适合设,哪些情况要谨慎

适合考虑的场景

  • 服務器配置有限,蜘蛛集中訪問时 CPU 或資料库压力明顯;
  • 站点規模不大,頁面更新频率低,不需要蜘蛛高频回訪;
  • 測試环境或不希望被频繁抓取的辅助站点。

需要谨慎的场景

  • 新站或新栏目刚上线,正需要蜘蛛尽快發現 URL;
  • 内容更新频繁,依赖重抓来同步變化;
  • 已经用了 CDN 或缓存,蜘蛛請求並不直接打到源站。

如果你的站点属于後一類,先排查是不是某個目錄或參數拖慢了响應,往往比全局限速更對症。

比 Crawl-delay 更细的替代做法

與其一刀切地拉長間隔,不如從几個更具体的地方入手:

  1. 分開處理目錄:只對压力大的路径設定延迟,其他目錄保持正常抓取节奏。
  2. 優化响應速度:减少首字节時間,蜘蛛的等待變短,抓取效率自然會好一些。
  3. 利用缓存:让蜘蛛請求命中缓存,源站压力就不會随抓取量线性上升。
  4. 控制重抓信号:頁面内容没變时,不要频繁改動 lastmod 或制造無意义的更新,减少不必要的回訪。
  5. 看日誌再决定:先確認蜘蛛請求集中在哪些时段、哪些 URL,再判断是限速還是優化。

如果站点正被放在連結池或蜘蛛池里,短時間内的抓取請求可能更加集中。這时先看日誌里這些請求落在哪些 URL 上:如果大量是參數頁、重复地址或早已下线的頁面,優先清理這些入口,比直接给全站加延迟更有效。

怎么驗證設定有没有起作用

設定几天後,可以回到服務器日誌里看蜘蛛請求的時間分布。如果請求間隔确實拉大、服務器错誤减少,同时重要頁面的抓取没有明顯掉队,說明這個值大致合适。如果發現新頁面長時間没有被訪問,或者抓取覆盖出現停滞,就要考虑把延迟調小,甚至取消。

把 Crawl-delay 当成一個調节旋钮,而不是收錄開關。它不會让蜘蛛更愿意来,只能让它来得慢一点。

最终還是要回到一個基本判断:你的服務器是真的扛不住,還是只是某几個頁面太慢。分清楚這一点,再决定要不要在 robots.txt 里寫下那行數字。