搜尋抓取

robots.txt 的放行與拦截:哪些 URL 该让蜘蛛進来,哪些该挡住

robots.txt 是抓取入口上的開關,管的是抓取,不是收錄。本文說明它到底约束什么,Disallow 與 Allow 的寫法要点,哪些 URL 适合放行、哪些适合拦截,以及改完規則後如何用日誌和測試工具驗證,适合正在清理無效抓取、梳理抓取路径的站点运营者參考。

搜尋抓取

robots.txt 的放行與拦截:哪些 URL 该让蜘蛛進来,哪些该挡住

很多站点把 robots.txt 当成一個“優化開關”,其實它更像抓取入口上的一道门。寫對了,蜘蛛不會把時間耗在没意义的地址上;寫错了,本该被抓到的頁面可能连請求都收不到。下面按“它管什么、怎么寫、怎么分放行和拦截、改完怎么看”四個部分说。

robots.txt 管的是抓取,不是收錄

robots.txt 的規則作用在抓取环节。被 Disallow 的 URL,蜘蛛通常不會去請求,自然也拿不到頁面内容。這里有两個容易被忽略的点:一是被拦住不等于一定不會被索引,如果別處有指向它的連結,地址本身仍可能出現在结果里,只是缺少摘要信息;二是“希望它別被收錄”的正确做法,一般是放行抓取、让頁面返回 noindex,而不是直接在 robots 里拦掉。

拦掉一個頁面,同时也拦掉了它身上的 noindex。想让蜘蛛看到“別收錄”的指令,前提是它能抓到頁面。

寫法上的几個關键点

User-agent 與分组

每個規則组以 User-agent 開头,可以寫具体蜘蛛名,也可以用 * 匹配其余蜘蛛。同一文件里可以有多组,但一组内不要混寫多個 User-agent 再配一堆含义不一致的規則,容易产生理解偏差。多數搜尋引擎蜘蛛只認自己那一组或 * 组。

Disallow 與 Allow

Disallow 表示不允许抓取的路径前缀,Allow 用来在已拦截的范围里開一個口子。主流蜘蛛的常见規則是路径更長、更具体的優先。典型寫法是先拦掉整個目錄,再用 Allow 放行其中一個子路径。

  • Disallow 後留空表示不限制,基本等于全部放行。
  • 只寫 Disallow: / 會把整站挡在外面,除非确實想這样。
  • 路径区分大小寫,/Search 和 /search 在部分實現里並不等價。
  • 结尾不加斜杠时含义不同,/admin 會同时匹配 /admin 和 /administrator。

通配符的用法

* 匹配任意字符,$ 表示路径結束。例如用 /*?sort= 拦住带排序參數的地址,用 /*.pdf$ 拦住以 .pdf 结尾的文件。通配符別放得太宽,否則容易誤伤正常内容頁。

哪些地址适合放行,哪些适合拦

建议放行

  • 正常的内容頁、栏目頁、詳情頁
  • 承载内容與排版的 CSS、JS 和图片
  • Sitemap 文件本身

通常建议拦截

  • 後台、登入、編輯、草稿類地址
  • 站内搜尋结果頁,尤其是带查询參數的
  • 购物车、下單、支付流程
  • 會话 ID、跟踪參數生成的重复地址
  • 測試环境、临时目錄、备份文件

判断标准可以很简單:這個地址被蜘蛛抓到之後,除了消耗抓取,還能带来什么。如果它不會作為落地頁出現,也没有指向有價值内容的連結,拦掉通常更划算。

容易踩的几個坑

  1. 拦掉了 CSS 和 JS,蜘蛛拿不到样式和渲染所需脚本,看到的頁面可能是残缺的。
  2. 在 robots 里拦掉頁面,同时又指望该頁面的 noindex 生效,两個指令互相矛盾。
  3. 上线时用 Disallow: / 做临时遮挡,後来忘了刪除,站点長期處于被挡狀態。
  4. 在規則组里寫 Crawl-delay,但蜘蛛不一定遵循,別把它当成真正的限速開關。
  5. robots.txt 本身返回 404 或 5xx,蜘蛛在拿不到規則时的處理各不相同,都不理想。
  6. Sitemap 声明寫成相對路径或错誤域名,抓取指引等于没寫。

改完之後怎么驗證

修改 robots.txt 不需要手動“提交”,但要確認它生效。可以做的几件事:直接用浏览器訪問 /robots.txt,確認返回碼和内容;用搜尋引擎提供的 robots 測試工具检查某條 URL 是被放行還是被拦;對比改前改後的服務器日誌,看被拦路径的請求量是否下降、内容頁的抓取是否更集中。生效存在延迟,蜘蛛可能還會按舊規則再跑一段時間。

最後提醒一句,robots.txt 只是抓取入口的控制手段,它不决定頁面能不能被收錄,也替代不了内鏈、Sitemap 和内容本身。把它当成“让蜘蛛少走冤枉路”的工具来用,比指望它解决所有抓取問题更現實。