搜尋抓取

robots.txt 與抓取路径:Allow、Disallow 和 Crawl-delay 分別能管住什么

robots.txt 常被当作收錄開關,其實它只影响蜘蛛的請求路径。本文說明 Allow 與 Disallow 的匹配顺序、Crawl-delay 的實际效果、哪些路径适合屏蔽、哪些资源不要誤挡,以及它和 Sitemap、内鏈在 URL 發現上的分工。

搜尋抓取

robots.txt 與抓取路径:Allow、Disallow 和 Crawl-delay 分別能管住什么

robots.txt 是蜘蛛訪問站点时最先請求的文件之一。很多站点把它当成收錄開關,寫完却發現頁面照样出現在结果里,或者该被抓的内容一直不来。要把它用對,先得明确它的作用范围:它只表達“希望蜘蛛不要請求哪些路径”,不决定頁面是否被收錄,也不决定排名。

Allow 與 Disallow 的匹配顺序

主流蜘蛛解析 robots.txt 时,通常按“最長匹配優先”判断:如果某條 Allow 和某條 Disallow 同时命中一個 URL,谁寫的路径更長、更具体,就以谁為准。所以想放開某個子目錄,可以在屏蔽整段的同时,用更長的 Allow 規則把它單獨拎出来。

  • 路径匹配看的是前缀,不是完整 URL,寫 /search 會连 /search-page 一起命中。
  • 支持通配符 * 和结尾符 $,但各家蜘蛛的支持程度不一,別把關键逻辑压在個別语法上。
  • 規則里的路径区分大小寫,要和實际 URL 保持一致,避免出現“寫了却没生效”的情况。
  • 按目錄寫規則比按具体 URL 逐條寫更稳,URL 一改,零散規則很容易失效。

Crawl-delay 的實际作用有限

Crawl-delay 是站点向蜘蛛提出的“訪問間隔建议”,Googlebot 基本不使用它,其他蜘蛛的遵守程度也不一致。它既不能真正限制並發,也替代不了服務器侧的限流。如果担心抓取压力,更可靠的做法是:在服務器层面對異常高频請求返回 429503,並在响應头里给出 Retry-After,让蜘蛛自行退让。這样既能保護源站,也不會因為一條静態規則把所有蜘蛛一起挡在门外。

用 robots.txt 给抓取路径做减法

当站点 URL 數量遠大于内容數量时,抓取配額會被大量低價值路径消耗。這时 robots.txt 适合用来做“减法”:

  1. 站内搜尋结果頁、多條件篩選的组合頁,通常没有獨立價值,可以整体屏蔽。
  2. 带跟踪參數的推廣連結,可以按參數特征屏蔽,减少重复路径。
  3. 後台、临时目錄、測試环境,尽早屏蔽,避免被誤抓。
  4. 分頁、标簽、归档這類中間层路径是否屏蔽,要看它們的導航價值,一刀切容易把蜘蛛引進死胡同。

屏蔽要克制:一旦把内鏈经過的路径全部砍掉,蜘蛛可能连通往正文的入口都找不到。動手之前,先確認目标頁面還有没有其他可達路径,比如 Sitemap 或別的列表頁。

別把 CSS、JS 一起挡掉

用通配符屏蔽整個目錄时,很容易顺手把该目錄下的样式和脚本也挡了。蜘蛛拿不到這些资源,頁面渲染出来的連結和内容就可能不完整,URL 發現的范围随之缩小。如果确實不需要渲染,屏蔽無妨;如果站点依赖前端渲染,建议保留必要的资源路径。

與 Sitemap、内鏈的分工

robots.txt 管“不去哪儿”,Sitemap 和内鏈管“该去哪儿”,後者才是 URL 發現的主要通道。把 robots.txt 里屏蔽掉的路径,從 Sitemap 和内鏈中一並移除,避免出現“一邊提交、一邊拒绝”的矛盾信号。

上线前的检查习惯

  • 改動後直接請求 /robots.txt,確認返回 200、内容完整,没有被 CDN 或缓存返回舊版本。
  • 翻抓取日誌抽查:屏蔽路径下是否還有訪問记錄,如果有,多半是規則寫法或缓存問题。
  • 记錄每次修改的時間和内容,抓取量出現異常波動时方便回溯。
robots.txt 是一份請求,不是一道命令。它影响蜘蛛的抓取路径,但收錄與否、能不能被發現,最终仍取决于内容本身、内鏈结构和站点的可達性。