為什么 robots.txt 值得單獨检查一遍
robots.txt 是放在站点根目錄的一個纯文本文件,搜尋引擎蜘蛛在抓取前會先讀取它。規則本身很简單,但一旦寫错,影响范围往往是整站級別的:要么该被發現的頁面被挡住,要么本该屏蔽的測試頁面被放進来。它不像頁面内容那样每天有人看,改完之後很容易被遗忘,所以更适合放進固定的检查清單里。
第一步:確認文件本身能被正常訪問
- 用浏览器或命令行工具打開 https://你的域名/robots.txt,確認返回 200,而不是 404 或 500。
- 確認返回的是纯文本,没有被 CDN 或 WAF 拦截成驗證頁、登入頁。
- 如果站点有 www 和非 www、http 和 https 多個入口,每個入口最好都能讀到同一份規則。
如果 robots.txt 返回 5xx,蜘蛛通常會把整站视為暂时不可抓取;如果返回 404,則等同于没有限制。两種结果的差別很大,別靠猜。
语法自查:几個容易寫错的点
- User-agent 與 Disallow 的配對:每一组規則以 User-agent 開头,後面的 Disallow、Allow 都属于它這一组,中間不要插入空行,否則會被当成新的一组。
- 路径前缀匹配:Disallow 後面跟的是路径而不是完整網址,寫成 https://example.com/admin 是無效的,應该寫成 /admin。
- 通配符的含义:星号匹配任意字符,美元符号表示结尾。比如 /search 會连带挡住 /search-result,而 /search$ 只匹配這一條路径。
- 大小寫敏感:路径部分区分大小寫,/Admin 和 /admin 是两條不同的規則。
- Sitemap 指令:可以在這里声明站点地图地址,注意寫完整的绝對地址,而不是相對路径。
別把渲染需要的资源一起挡住
有些站点為了节省抓取配額,會一口气屏蔽 js、css 和图片目錄。结果是蜘蛛拿到一個没有样式、没有内容的空壳,頁面能被抓取,但很难被正确理解。更稳妥的做法是:只屏蔽确實不需要被抓的目錄,把渲染必需的静態资源放開;如果某個具体资源不想被抓,再單獨處理那一條路径,而不是砍掉整個目錄。
robots.txt 與 meta robots 的分工
這两者经常被混用,但作用並不相同:robots.txt 控制的是“能不能抓”,meta robots 标簽或响應头里的 X-Robots-Tag 控制的是“抓到了能不能收錄”。
- 如果某個頁面被 robots.txt 挡住,蜘蛛就不會去讀它頁面里的 noindex,頁面仍可能以無描述的形式出現在结果里。
- 想彻底從索引中移除,應该让頁面保持可被抓取,同时在頁面层級返回 noindex;確認移除生效後,再考虑是否收紧抓取。
- 批量下线的栏目、活動頁、參數頁,适合用 noindex 逐個處理,而不是一條 Disallow 全砍。
和站点地图、目錄结构保持一致
站点地图里提交的地址,不應该同时出現在 Disallow 列表里,這種自相矛盾會让抓取信号變得混乱。每次調整栏目或改版 URL 之後,把 robots.txt、站点地图、内鏈規則放在一起過一遍,看看有没有已经废弃的路径還留在文件里。
測試环境與线上环境分開處理
- 測試站、预發布域名建议整体禁止抓取,避免半成品頁面被收錄。
- 這條規則寫在測試站自己的 robots.txt 里,而不是靠“反正没人知道這個域名”。
- 上线前再確認一次:生产环境的 robots.txt 没有被測試配置覆盖掉。
把它放進發布检查清單
- 改完 robots.txt 後,用搜尋引擎提供的 robots.txt 測試工具或 URL 检查工具,驗證一條具体路径是否符合预期。
- 在服務器上保留一份變更记錄,寫明改動内容、原因和日期。
- 每隔一段時間抽查:随机挑几個重要栏目地址,確認它們没有被誤屏蔽。
robots.txt 只有几行,却直接决定了蜘蛛能看到什么。把它当作一份需要長期维護的配置文件,而不是一次寫完就再也不用碰的東西,站点运营會少很多莫名其妙的“抓不到”問题。