很多人把 robots.txt 当成“收錄開關”,其實它只處理一件事:告诉蜘蛛哪些路径可以来抓。至于抓到的頁面要不要進索引、以什么形式展示,是另一套机制的事。把這两件事混在一起,最容易出現的情况就是——某個目錄已经 Disallow,外鏈還在,搜尋结果里仍然可能以無摘要的形式出現,而你却以為早就處理干净了。
管的是抓取许可,不是收錄结果
被 Disallow 的 URL 不會被抓取,頁面里的 noindex 也就没机會被看到。所以如果一個頁面你希望它不進索引、但又不想让它彻底消失,正确顺序通常是:先放行抓取,再加 noindex,等搜尋引擎確認後再考虑收紧。反過来做的结果,往往是頁面以各種意料之外的形式留在结果里。
三種常见的誤用寫法
- 拦住 CSS 和 JS 资源。頁面能抓到,但渲染判断失真,蜘蛛看到的是残缺版本,對内容理解和移動适配都不利。
- 用 Disallow 處理篩選參數頁。减少重复抓取确實有效,但如果這些 URL 同时也是通往詳情頁的路径,URL 發現會被一起掐断。更稳的做法是让篩選頁可抓,用規范連結和 noindex 收口。
- 顺手拦住分頁。分頁 URL 是内容發現通道,拦掉之後,深层老内容就只能靠 Sitemap 兜底,發現速度會明顯變慢。
規則匹配:最長的那條说了算
以 Google 為例,同一份 robots.txt 里多條規則命中同一個 URL 时,會比較匹配部分的長度,最長的那條生效;長度相同时 Allow 優先。通配符 * 和结尾的 $ 是支持的,但不同蜘蛛對语法的支持程度並不完全一致,跨引擎使用的站点要留一点余量。
所以別指望在一條笼统的 Disallow: / 後面随手加一條 Allow 就能精确放行——要么把 Allow 寫得足够具体(更長),要么干脆把目錄结构本身理清楚,减少規則之間的重叠。
與 Sitemap、内鏈的配合
Sitemap 里塞一堆被 Disallow 的 URL 没有意义,蜘蛛拿到也不會去抓。同理,站内連結大量指向被拦路径,等于把抓取机會丢進黑洞。检查方法很直接:從服務器日誌里挑出被抓最多的目錄,再看這些目錄在 robots.txt 里的狀態,两邊對不上的地方,就是需要處理的地方。
一份能長期维護的寫法
- 先從日誌看現状:哪些目錄被抓得最多,哪些几乎没人来。
- 把 URL 分成三類——必须抓的(内容頁、分頁、必要资源)、可以不抓的(後台、站内搜尋结果頁、纯參數组合)、完全不想被索引的。
- 對第三類優先用 noindex(前提是能抓到),只有确實不想让蜘蛛浪費請求的路径才用 Disallow。
- 改完先驗證:用站長工具里的 robots.txt 測試功能,逐個確認具体 URL 的判定结果符合预期。
- 上线後繼續看日誌,观察被拦目錄的抓取量是否下降、重点目錄是否上升。
文件本身要稳
robots.txt 必须放在根目錄,返回 200 和纯文本。返回 404 通常被理解為没有限制,等于全部放行;返回 5xx 时蜘蛛會保守處理,短期内可能沿用上一次成功获取的版本,長時間不可用則可能降低抓取频率。所以別把它挂在會超时的動態接口上,也別让 200 狀態碼返回一個 HTML 頁面。
robots.txt 是给守規矩的蜘蛛看的礼貌约定,不是安全邊界。真正需要保護的目錄,靠的是權限控制和訪問控制,而不是一行 Disallow。
把 robots.txt 当成一張抓取资源的分配表来维護:哪些路径值得蜘蛛花時間,哪些不值得,寫清楚,观察日誌,定期复核。這比一次寫完就忘,要有效得多。