搜尋抓取

robots.txt 的抓取邊界:目錄屏蔽、通配符與 Sitemap 声明怎么用

robots.txt 管的是抓取,不是收錄。文章梳理 UA 段的匹配顺序、Disallow 的前缀匹配與通配符用法,点名几個常见寫错的场景(誤挡全站、用 Disallow 代替 noindex、屏蔽 CSS/JS),並给出 Crawl-delay 的局限和修改前後的驗證步骤。

搜尋抓取

robots.txt 的抓取邊界:目錄屏蔽、通配符與 Sitemap 声明怎么用

robots.txt 是站点递给爬虫的第一份說明,它管的是“能不能抓”,不是“能不能收錄”。不少抓取異常、頁面表現不對、渲染判断出错,回头查都是這個文件里某一行寫错造成的。下面按匹配規則、常见誤区和修改前後的驗證三部分来说。

先弄清楚它怎么匹配

  • UA 段的選擇:爬虫會挑最贴合自己身份的那一段,而不是一律讀 * 段。Googlebot 優先讀 Googlebot 段,其他爬虫讀通用段,所以给特定爬虫寫規則时要單獨成段。
  • 同一段内多條規則:路径匹配更長的優先,長度相同时 Allow 通常胜出。寫規則时尽量让意图不冲突,別指望靠顺序。
  • Disallow 是前缀匹配:寫 Disallow: /tmp 會连同 /template、/tmp2 一起挡住,不是只挡 /tmp 這個目錄。想限定目錄,路径末尾补斜杠更稳妥。
  • 通配符* 匹配任意字符,$ 表示结尾,主流搜尋引擎支持,但一些老舊或小众爬虫不一定認,別把關键限制全押在通配上。
  • 路径区分大小寫,空行用来分隔不同的 UA 段,寫乱會導致整段失效。

几個容易踩的坑

  • 通用段里寫了 Disallow: /,本意是挡某個目錄,结果全站被挡,日誌里抓取量突然归零往往就是這里。
  • 想阻止某頁面被收錄,却用 Disallow 把它挡在门外。頁面仍可能因為外鏈出現在结果里,而蜘蛛讀不到頁面上的 noindex。正确顺序是:让頁面可抓、頁面内标 noindex,等狀態稳定後再谈屏蔽。
  • 把 CSS、JS、图片目錄一起挡掉。頁面渲染和移動端判断都依赖這些资源,挡了之後蜘蛛看到的可能是一張缺样式的空壳。
  • Sitemap 声明用了相對路径,或者根本没有声明。這里寫的是绝對地址,也可以寫多行。
  • 注释习惯寫在規則行尾,容易把規則本身注释掉,建议單獨一行寫。

Sitemap 與抓取速率

在 robots.txt 里声明 Sitemap 是给蜘蛛一個發現入口的提示,跨域声明一般需要先完成站点驗證。它只是提示,不代表某個 URL 一定會被抓取,也不代表抓取频次會變化。

Crawl-delay 這块要特別說明:Google 明确不支持這個指令,Bing 部分支持,指望它来控制抓取压力並不可靠。真正影响抓取节奏的是服務器响應速度、站点可抓頁面的規模和内容更新频率。如果服務器吃紧,更可控的做法是在服務器层按 UA 做限速,或者在维護期間返回带 Retry-After 的 503,让蜘蛛按你的节奏退让,而不是在 robots 里寫一個没人执行的數字。

改之前和改之後怎么驗證

  1. 用搜尋引擎提供的 robots 測試工具,把你關心的几類 URL 都跑一遍:首頁、列表頁、詳情頁、被屏蔽的资源目錄,確認结果和预期一致。
  2. 翻服務器日誌,看被屏蔽的路径在修改後是否還有請求。有残留說明規則没生效,或者對方没讀這一段。
  3. 大范围屏蔽之前先小范围试,改完把時間点和具体内容记錄下来,方便出問题时回滚。
  4. 顺手检查 Sitemap 和内鏈,里面如果還挂着已经屏蔽的 URL,蜘蛛會顺着爬過去再被挡住,白白消耗抓取次數。
判断一條規則安不安全,方法很简單:把關键 URL 丢進測試工具,看它返回的是“允许”還是“屏蔽”,和自己想的是不是一回事。

最後提醒一点,robots.txt 是一份约定,不是權限控制。遵不遵守取决于對方,真正私密的内容應该靠登入、鉴權或訪問控制来解决,而不是寫在 Disallow 里。