搜尋抓取

robots.txt 寫宽了會挡掉哪片目錄:URL 發現前的第一道闸门

robots.txt 决定蜘蛛能不能抓,却常被寫成大范围屏蔽。本文梳理 Disallow 的前缀匹配規則、几種常见誤伤场景,以及被挡目錄與 Sitemap、抓取日誌之間的關系,並给出一套自查和調整步骤,帮你避免 URL 發現在入口處被無意掐断。

搜尋抓取

robots.txt 寫宽了會挡掉哪片目錄:URL 發現前的第一道闸门

robots.txt 是蜘蛛進站前讀的第一個文件,它不负责让頁面被收錄,只负责告诉蜘蛛哪些路径可以抓、哪些先別抓。很多人把它当成一個随手開關,寫两行就上线,结果整片目錄的 URL 發現被掐断,自己還找不到原因。

先分清發現和抓取

URL 發現指的是蜘蛛從某個地方拿到了這個地址;抓取指的是它真的去請求了這個地址。robots.txt 的 Disallow 挡的是後半段。

于是會出現一種情况:別的頁面連結到了 A 地址,蜘蛛确實看到了這個 URL,但請求被拒绝,它不會讀取 A 的内容,也無法顺着 A 頁面里的連結繼續往下走。一條本来能延伸的抓取路径,就断在這一步。

被 robots.txt 屏蔽的 URL 仍有可能出現在搜尋结果里,通常没有摘要或摘要陈舊。但這不是内容被正常收錄,頁面更新也不會被及时反映。

匹配規則是按前缀,不是按目錄

Disallow: /search 不只挡住 /search/ 這個目錄,還會挡住 /search-tips、/searchbox.html 這類開头相同的地址。寫規則时习惯性省略结尾斜杠,就會誤伤一批本来正常的頁面。

  • Disallow: /tag 會连带挡住 /tags/ 下的頁面和 /tag-cloud 這類入口
  • Disallow: /*? 常用来挡參數頁,但也可能把带必要參數的詳情頁一起挡掉
  • Disallow: / 属于极端场景,等于让整站登出抓取
  • 規則里的通配符和结尾符号用得不统一,容易和實际目錄范围對不上

建议把要屏蔽的路径寫到能明确区分的最小粒度,例如 /search/、/search-result/,而不是一個笼统的單词。

被屏蔽的目錄里不要再放 URL

如果 Sitemap 文件里列了一批已经被 Disallow 的地址,相当于一邊递名單一邊關门。蜘蛛會反复遇到名單里有点、但請求被拒的情况,對這批地址的抓取安排没有正面作用。把 Sitemap 中已屏蔽的 URL 清掉,或者把不需要抓取的路径從 Sitemap 移除,让两邊保持一致。

自查與調整步骤

  1. 在浏览器打開 /robots.txt,確認返回 200 且是纯文本,而不是因為路由或防火墙返回 404、403
  2. 逐條讀 Disallow,把每條規則和實际目錄對照一遍,確認没有誤伤相邻路径
  3. 列出站点真正不希望被抓的路径,比如後台、站内搜尋结果頁、购物车、無意义的大參數分頁
  4. 挑一個不该被挡的深层頁地址做驗證,观察一段時間日誌里是否還有蜘蛛請求
  5. 修改後繼續观察抓取日誌,看被挡路径的請求量是否下降、目标路径是否恢复

屏蔽不等于刪除

如果頁面已经不需要存在,更合适的做法是返回 410,或者 301 跳轉到相關地址,而不是用 robots.txt 挡住。挡住只是让蜘蛛抓不到,地址本身還在,歷史索引也可能長期保留一個空壳。這两個動作解决的不是同一個問题。

把 robots.txt 当成一份需要维護的路径清單,每條規則都能说清對應的目錄范围,並定期和日誌、Sitemap 對照一次。它不會直接带来更多抓取,但能避免那些本不该發生的抓取断裂。