多數搜尋引擎蜘蛛在抓取一個站点之前,都會先去取一次 robots.txt。這個文件很小,改動也简單,正因為如此,很多人改完之後就不再回头看。等到抓取量下降、新頁面迟迟不被發現,才回头翻日誌,往往問题就出在那几行規則上。
第一步:確認 robots.txt 真的能被取到
先看這個文件本身是否正常:返回 200 狀態碼、内容類型接近 text/plain、正文只包含規則文本。常见的意外有這几種:站点的安全策略或 CDN 規則把 /robots.txt 也拦截了,返回登入頁或用 302 跳到首頁;协议改造後 HTTP 與 HTTPS 各留了一份内容不同的文件;根目錄被重寫規則覆盖,返回了一整頁 HTML。
還要注意狀態碼的差別。如果 robots.txt 返回 5xx,主流搜尋引擎倾向于把這当成临时故障,短期暫停對整站的抓取;如果返回 404,通常會被理解為没有任何限制,等同于允许抓取全部路径。也就是说,服務器故障和文件被删掉,會带来两種完全相反的结果。给這個地址加一個简單的可用性监控,比事後猜测要省事得多。
第二步:排查最容易誤伤的几種寫法
Disallow 是前缀匹配,多寫一個字符、少寫一個斜杠,影响范围就差很遠。下面這些情况在巡检中出現频率最高:
- 測試規則没删干净:上线前寫的 Disallow 根目錄規則忘了去掉,整站對外都是禁止抓取。
- 目錄邊界没寫清楚:想屏蔽後台目錄,结果只寫了前半段路径,把以相同字符串開头的正常栏目一起挡了。想精确匹配某個目錄,注意补上结尾斜杠。
- 通配符范围過大:用問号加通配符一條挡掉所有带參數的地址,會连带挡掉大量内容正常的頁面。
- 只禁不放開:用一個宽泛規則挡掉整块目錄,又忘了對其中少數需要抓取的路径补 Allow。
- 路径大小寫:路径部分区分大小寫,User-agent 名稱不区分,別把两者混為一谈。
- 分域遗漏:子域、獨立域名各有自己的 robots.txt,主域規則不會自動生效。
第三步:別把 robots.txt 当成索引移除工具
這是最常见的一類誤解。想让某個頁面從搜尋结果里消失,直接在 robots.txt 里禁掉它,结果往往相反:蜘蛛進不去頁面,自然讀不到頁面上的 noindex 声明,URL 反而可能繼續留在索引里,只是摘要信息變得很糟糕。
抓取控制和索引控制是两件事。想让頁面登出索引,用 noindex 並保證頁面可以被抓取;想减少無意义的抓取消耗,才用 robots.txt 屏蔽。两者混用,通常两头都做不好。
第四步:顺手检查 Sitemap 声明
在 robots.txt 里寫 Sitemap,是让蜘蛛更快發現入口的低成本方式。检查两点:地址要寫完整的绝對地址,带上协议和域名;站点地图本身要能正常訪問,並且里面不要包含已被 robots.txt 屏蔽的地址,否則蜘蛛會反复遇到「给了地址却不让抓」的矛盾信号。測試环境、预發布环境則相反,用 robots.txt 全站禁抓,比依赖登入驗證更省心。
第五步:改完之後怎么驗證
- 用搜尋引擎官方提供的 robots.txt 測試工具,輸入具体 URL 看判定结果,重点测那几個邊界路径。
- 用命令行或在线工具直接取一次文件,確認狀態碼和返回内容與本地版本一致。
- 检查一段時間的服務器日誌,看 robots.txt 的請求狀態碼是否稳定,有没有出現 5xx。
- 观察被抓取 URL 的數量與分布變化,注意這是慢變量,改完当天看不到明顯差別是正常的。
robots.txt 的問题有一個共同特征:生效时没有提示,出错时也没有报错。把它放進常規巡检清單,每隔一段時間對照實际目錄结构再看一遍,比等到抓取量下滑时再去排查,代價小得多。