服務器偶尔扛不住蜘蛛的並發請求时,很多人的第一反應是在 robots.txt 里加一行 Crawl-delay。這個指令看起来简單,但它的實际效果取决于蜘蛛是否遵守、你的站点規模以及抓取需求的紧迫程度。設定之前,最好先弄清楚它會改變什么。
Crawl-delay 是什么,哪些蜘蛛會看
Crawl-delay 寫在 robots.txt 中,用来告诉蜘蛛两次請求之間至少間隔多少秒。它和 Disallow 不同,Disallow 是拒绝訪問某段路径,Crawl-delay 是要求降低訪問频率,並不禁止抓取。
需要留意的是,不同搜尋引擎對這個指令的態度並不一致。有的蜘蛛會明确讀取並遵守,有的則把它当作參考,甚至完全忽略。也就是说,你不能假设寫了就一定會生效,尤其不能把它当作控制抓取量的唯一手段。
設定之後,抓取會發生什么變化
- 單位時間内的請求數下降,服務器压力随之减轻;
- 同样一段時間内,蜘蛛能翻的頁面變少,新 URL 的發現和重抓可能被推迟;
- 如果站点本身頁面不多,影响通常有限;如果 URL 數量大、更新频繁,延迟會累积得比較明顯。
換句话说,它是在用抓取速度換服務器稳定。這個交換是否划算,要看你的站点處于什么阶段。
哪些情况适合设,哪些情况要谨慎
适合考虑的场景
- 服務器配置有限,蜘蛛集中訪問时 CPU 或資料库压力明顯;
- 站点規模不大,頁面更新频率低,不需要蜘蛛高频回訪;
- 測試环境或不希望被频繁抓取的辅助站点。
需要谨慎的场景
- 新站或新栏目刚上线,正需要蜘蛛尽快發現 URL;
- 内容更新频繁,依赖重抓来同步變化;
- 已经用了 CDN 或缓存,蜘蛛請求並不直接打到源站。
如果你的站点属于後一類,先排查是不是某個目錄或參數拖慢了响應,往往比全局限速更對症。
比 Crawl-delay 更细的替代做法
與其一刀切地拉長間隔,不如從几個更具体的地方入手:
- 分開處理目錄:只對压力大的路径設定延迟,其他目錄保持正常抓取节奏。
- 優化响應速度:减少首字节時間,蜘蛛的等待變短,抓取效率自然會好一些。
- 利用缓存:让蜘蛛請求命中缓存,源站压力就不會随抓取量线性上升。
- 控制重抓信号:頁面内容没變时,不要频繁改動 lastmod 或制造無意义的更新,减少不必要的回訪。
- 看日誌再决定:先確認蜘蛛請求集中在哪些时段、哪些 URL,再判断是限速還是優化。
如果站点正被放在連結池或蜘蛛池里,短時間内的抓取請求可能更加集中。這时先看日誌里這些請求落在哪些 URL 上:如果大量是參數頁、重复地址或早已下线的頁面,優先清理這些入口,比直接给全站加延迟更有效。
怎么驗證設定有没有起作用
設定几天後,可以回到服務器日誌里看蜘蛛請求的時間分布。如果請求間隔确實拉大、服務器错誤减少,同时重要頁面的抓取没有明顯掉队,說明這個值大致合适。如果發現新頁面長時間没有被訪問,或者抓取覆盖出現停滞,就要考虑把延迟調小,甚至取消。
把 Crawl-delay 当成一個調节旋钮,而不是收錄開關。它不會让蜘蛛更愿意来,只能让它来得慢一点。
最终還是要回到一個基本判断:你的服務器是真的扛不住,還是只是某几個頁面太慢。分清楚這一点,再决定要不要在 robots.txt 里寫下那行數字。