搜尋抓取

robots.txt 里的 Disallow 與 Allow:蜘蛛被挡在门外通常出在哪一步

robots.txt 只控制抓取范围,既不控制收錄,也不是訪問權限工具。本文梳理 Disallow、Allow、通配符、大小寫等常见誤配置,說明它與 Sitemap、noindex 的分工,並给出改動前後可执行的检查步骤,减少蜘蛛被規則誤挡的情况。

搜尋抓取

robots.txt 里的 Disallow 與 Allow:蜘蛛被挡在门外通常出在哪一步

robots.txt 常被当成一個一劳永逸的開關,但它實际只做一件事:告诉遵守規則的蜘蛛,哪些路径不必来抓。它既不控制頁面是否被收錄,也不是訪問權限工具。很多站点的問题不在于没寫這個文件,而是寫了一行语义含糊的規則,把本来该抓的路径一起挡在了外面。

先分清职责邊界

被 Disallow 的 URL 並不會自動從结果里消失。如果它此前被抓取過,或者有外鏈指向它,仍可能以別的方式出現,只是内容不是来自本站的實时抓取。反過来,想让某個頁面不進入索引,更合适的做法是在頁面里返回 noindex;想限制訪問,則要用登入校驗或 IP 限制。把這三件事混在一起處理,最容易出問题。

常见的几類誤配置

整站被挡

  • Disallow: / —— 等于告诉蜘蛛整個站点都不用抓,多發生在測試环境配置被同步到线上的时候。
  • 測試阶段用的域名被寫進規則,正式域名下同一份文件被原样複製過去。

通配符范围過宽

Disallow: /*? 會挡掉所有带查询參數的 URL,篩選頁、分頁、排序版本會一起消失。如果列表頁的翻頁本身就依赖參數,蜘蛛就断在半路。寫通配符之前,先把站内用到的參數列出来,確認哪些真的不需要被訪問。

Allow 與 Disallow 同时命中

同一條路径既被 Allow 又被 Disallow 覆盖时,通常按最長匹配决定;長度相同时,Allow 優先。所以想放開某個子目錄,把 Allow 寫得更具体就够了,不一定非要把父級規則删掉重寫。

大小寫與结尾斜杠

robots.txt 里的路径区分大小寫,/Search/ 與 /search/ 是两條不同規則。结尾斜杠同样有区別,寫成 Disallow: /tag 會挡住 /tag 以及所有以 /tag 開头的路径,覆盖面可能比预期宽不少。

顺手挡掉了 CSS 和 JS

渲染依赖样式和脚本的站点,如果把 /assets/ 或 /static/ 一並挡掉,蜘蛛取到的頁面结构可能和用戶看到的相差很遠,頁面里的連結發現也會受影响。這類目錄通常不應该出現在 Disallow 列表里。

它和 Sitemap、noindex 怎么配合

  • robots.txt:划定抓取范围,减少無意义的請求。
  • Sitemap:提供 URL 的發現入口,可以在 robots.txt 里用 Sitemap 指令声明它的位置。
  • noindex:控制頁面是否進入索引,和抓取范围是两件事。
  • canonical:處理同一内容多版本並存的問题。
不要用 Disallow 去清理重复内容。URL 被挡住之後,蜘蛛讀不到頁面里的 noindex,反而可能長期保留一個没有内容的空壳。

改動前後可以做的检查

  1. 直接訪問 /robots.txt,確認狀態碼正常、返回的是纯文本而不是错誤頁。
  2. 逐條讀規則,标出每條實际影响的目錄,特別留意通配符的位置。
  3. 確認 Sitemap 的声明地址可以訪問,且内容與目前 URL 结构一致。
  4. 改動後用日誌驗證:被挡的路径蜘蛛不再請求,该抓的路径請求量没有明顯下滑。
  5. 观察一到两周,看各目錄的抓取分布是否出現異常倾斜。

從日誌里確認規則的效果

規則是否按预期生效,最终要落到請求日誌上。按目錄統計蜘蛛請求量,改動前後各取一段做對比,能看出哪些目錄被放開了、哪些彻底安静了。如果發現某個栏目請求量突然归零,先回头看 robots.txt,再排查是否有其他拦截层在起作用。

把 robots.txt 当成一份需要定期复核的配置,而不是寫完就忘的文本文件,蜘蛛的抓取路径通常會稳定很多。