搜尋抓取

robots.txt 改動之後:蜘蛛多久才會按新規則走

改完 robots.txt 發現蜘蛛還在抓舊路径,或者原本正常的頁面突然進不来了,這類情况多半不是規則寫错,而是缓冲時間與解析差异。本文說明蜘蛛讀取 robots.txt 的节奏、返回碼带来的不同處理,以及怎样用日誌確認改動是否已经生效。

搜尋抓取

robots.txt 改動之後:蜘蛛多久才會按新規則走

robots.txt 是站長手里最直接的一個開關,改起来只需要一個文本文件。但很多人改完之後會困惑:明明已经 Disallow 了,日誌里那條路径還在被抓;或者反過来,原本抓得好好的目錄,忽然安静了。這中間隔着的,是蜘蛛讀取規則的节奏和它對你這份文件的解讀方式。

蜘蛛不是每次抓取前都重新下载 robots.txt

绝大多數爬虫在抓取前會先取一次 robots.txt,但為了省流量,它們會把這份文件缓存一段時間。缓存没過期,蜘蛛就繼續按舊規則走。所以你改完文件後的几小时内,日誌里仍出現舊行為,属于正常現象,不代表改動失敗。

比較實际的做法是:改完之後记住時間点,然後回到服務器日誌中,专门看 /robots.txt 這個請求的時間戳。当日誌里出現了改動之後的又一次請求,通常意味着新版本已经進入它的缓存。

不同蜘蛛的节奏並不一致

  • 大型搜尋引擎的爬虫缓存時間相對長一些,規則切換偏慢但稳定。
  • 部分二线爬虫、聚合類爬虫可能每次都重新讀取,改動几乎是即时的。
  • 還有一些小爬虫基本不看 robots.txt,規則改不改對它没有影响。

因此,用一次观测去推断所有蜘蛛的行為,容易得出错誤结论。分爬虫、分時間段看日誌,才看得出差异。

先確認 robots.txt 本身能被正常取到

規則能不能生效,前提是文件能被取到並且被正确解讀。几個基础检查点:

  • 路径必须是根目錄下的 /robots.txt,子目錄里的同名文件不起作用。
  • 返回值應為 200,内容為纯文本,不要返回 HTML 頁面。
  • 用 301 或 302 跳到別的域名或路径时,各家爬虫處理方式不同,有的會跟随,有的直接当作異常,稳定性差,建议直接返回 200。
  • 返回 4xx(除 429 這類限流碼)时,多數爬虫會视為「没有限制」,也就是放行全部抓取。
  • 返回 5xx 时,Googlebot 的處理偏保守,會暫停抓取该站,而不是当成允许。
改動前後都在日誌里留下 robots.txt 的請求记錄,比凭感觉猜测可靠得多。

几個容易寫错、寫错又不易察觉的地方

  • Disallow 只负责阻止抓取,不等于让已收錄的頁面消失。想让頁面登出索引,需要頁面本身返回 noindex,或走相應的移除流程。
  • 路径区分大小寫,/News 和 /news 是两個不同的位置,寫漏一個等于没挡。
  • 通配符 * 與结尾符 $ 的支持程度各家不同,用来做精细控制的規則,最好用測試工具逐個驗證。
  • Sitemap 是獨立指令,不要塞進某個 User-agent 组里去理解,它的位置和分组無關。
  • 規則是從上往下匹配的,但同一组内多條 Allow 與 Disallow 的優先級,不同爬虫的實現會有细微差別,規則越简單越不容易出問题。

让改動被更快感知的几個做法

  1. 改動前,把想挡和想放的 URL 各挑几個,用測試工具確認匹配结果符合预期。
  2. 一次只改一處,改完留出观察窗口,日誌里的變化才容易归因。
  3. 保留舊版本文件,發現誤伤时能立刻回滚。
  4. 改完關注 robots.txt 的請求時間戳,確認新版本已经被讀取,再判断效果。
  5. 如果目的只是控制抓取频率,優先考虑抓取频次設定或服務器端限流,而不是整條路径封掉。

把它当成门槛,而不是實时開關

robots.txt 更像一道门槛:它决定了蜘蛛能走到哪里,但從你修改它,到蜘蛛按新規則走路,中間有一段缓冲。给這段時間留出余量,用日誌確認規則已被讀取,比反复修改文件更有效。真正需要即时控制的场景,比如临时流量压力,還是交给服務器侧的手段更稳妥。