站点运营

站点运营:robots.txt 自查,別让一條規則挡住该抓的目錄

robots.txt 是蜘蛛進入站点的第一道门,寫错一條規則,可能让整站或某個栏目長期不被抓取。這篇文章從文件可訪問性、通配符寫法、與 noindex 的分工、Sitemap 声明几個角度给出自查清單,並說明改完後如何驗證,避免規則悄悄生效却没人發現。

站点运营

站点运营:robots.txt 自查,別让一條規則挡住该抓的目錄

多數搜尋引擎蜘蛛在抓取一個站点之前,都會先去取一次 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 全站禁抓,比依赖登入驗證更省心。

第五步:改完之後怎么驗證

  1. 用搜尋引擎官方提供的 robots.txt 測試工具,輸入具体 URL 看判定结果,重点测那几個邊界路径。
  2. 用命令行或在线工具直接取一次文件,確認狀態碼和返回内容與本地版本一致。
  3. 检查一段時間的服務器日誌,看 robots.txt 的請求狀態碼是否稳定,有没有出現 5xx。
  4. 观察被抓取 URL 的數量與分布變化,注意這是慢變量,改完当天看不到明顯差別是正常的。

robots.txt 的問题有一個共同特征:生效时没有提示,出错时也没有报错。把它放進常規巡检清單,每隔一段時間對照實际目錄结构再看一遍,比等到抓取量下滑时再去排查,代價小得多。