robots.txt 配置:允许 / 禁止规则、常见错误与测试方法
一、robots.txt 到底管什么、不管什么
robots.txt 是放在网站根目录的一个纯文本文件,告诉搜索引擎爬虫:哪些路径可以来抓,哪些不要来。它是一个君子协议——守规矩的爬虫(Googlebot、Bingbot)会遵守,不守规矩的爬虫(垃圾采集器)根本不读这个文件。
最重要的一个认知:robots.txt 控制的是「抓取」,不是「索引」。这两件事经常被混淆。如果你 Disallow 了某个路径,Googlebot 不会来抓这个路径下的页面,但如果有外链指向这些 URL,Google 依然知道这些 URL 存在,会把 URL 本身显示在搜索结果里——只是没有标题、没有描述、没有内容摘要,就是一串光秃秃的链接。
| 认知误区 | 实际情况 | 后果 |
|---|---|---|
| Disallow 了就不会出现在 SERP | 有外链的 URL 仍会出现在 SERP | 光秃秃 URL,无标题无描述 |
| robots.txt 能阻止页面被索引 | 不能,要阻止索引用 noindex | 页面还是会出现在搜索结果 |
| robots.txt 能阻止竞争对手看 | 任何人都能访问 /robots.txt | 反而是公开信息 |
| robots.txt 里的规则越多越好 | 写错一条全站消失 | 配置必须最小化 |
| robots.txt 能保护敏感页面 | 君子协议,恶意爬虫不遵守 | 敏感页面要靠密码保护 |
和其他 SEO 模块的关系:robots.txt 是 Google SEO 技术底座的最底层配置,和 XML Sitemap 优化配合使用——在 robots.txt 末尾声明 Sitemap 位置,Google 通过 robots.txt 发现 Sitemap。和 技术 SEO 审计清单的关系:robots.txt 是抓取象限的第 1 项检查。
二、规则语法:User-agent、Disallow、Allow、Sitemap
robots.txt 的语法很简单,四个核心指令。但简单不代表不会写错——一个斜杠的方向、一个星号的位置,都会改变规则含义。
| 指令 | 写法示例 | 作用 | 注意事项 |
|---|---|---|---|
| User-agent | User-agent: * | 指定规则对哪个爬虫生效 | * 表示所有爬虫,必须放在规则组第一行 |
| Disallow | Disallow: /admin/ | 阻止抓取该路径下所有页面 | 斜杠结尾表示整个目录 |
| Allow | Allow: /admin/public/ | 允许抓取被上级 Disallow 覆盖的子路径 | 用于精细覆盖,不是所有爬虫都支持 |
| Sitemap | Sitemap: https://… | 声明 Sitemap 位置 | 放在文件末尾,独立于规则组 |
| 通配符 * | Disallow: /*?sort= | 匹配任意字符序列 | 用于阻止带参数的 URL |
| 结尾 $ | Disallow: /test.html$ | 精确匹配以该字符串结尾的 URL | 用于精确阻止单个文件 |
一个标准的 B2B 站点 robots.txt 应该长什么样?底部是核心配置:User-agent: * 开头,Disallow 阻止 admin、cart、checkout 等功能性路径,阻止带参数的筛选和排序 URL,末尾声明 Sitemap 位置。产品页、文章页、分类页不写任何规则——默认就是允许抓取。
场景示例一:一个电商 B2B 站点的 robots.txt 写了 Disallow: /products/,本意是阻止抓取产品列表页的分页版本,结果把所有产品页都阻止了。三周后发现 Google 搜索品牌词,SERP 里只显示首页和关于我们页,所有产品页都不见了。修复方法:把规则改成 Disallow: /products/?page=,只阻止带分页参数的 URL,不阻止 /products/ 本身。用 GSC robots 测试工具逐条验证后再上线。
三、两大致命错误:全站阻止和用错工具
robots.txt 的错误有大有小,但有两个错误是致命的——一旦犯了,整个站点从搜索结果消失。
| 错误类型 | 症状 | 发现信号 | 修复方法 | 恢复时间 |
|---|---|---|---|---|
| Disallow: / 全站阻止 | Google 不抓取任何页面 | GSC 覆盖率「已抓取未索引」暴涨到全站 | 删除 Disallow: /,保留必要规则 | 1 至 3 天重新抓取,1 至 2 周排名恢复 |
| 用 robots.txt 阻止索引 | 页面出现在 SERP 但无标题 | SERP 显示光秃秃 URL,无摘要 | 改用 noindex meta 标签 | 2 至 4 周从 SERP 消失 |
| 规则路径写错 | 该阻止的没阻止,该允许的被阻止 | GSC 抓取统计异常 | 用测试工具逐条验证 | 改完即生效 |
| 忘记声明 Sitemap | Google 发现 Sitemap 速度慢 | GSC Sitemap 报告显示「未提交」 | 在 robots.txt 末尾加 Sitemap: 指令 | 下次抓取时发现 |
反直觉判断在这里:很多人以为我不想让某个页面出现在搜索结果里,就写 Disallow。这是错的。Disallow 只是不让 Google 抓内容,Google 依然知道这个 URL 存在——因为它从外链、从 Sitemap、从历史抓取记录里知道。结果是:SERP 里出现一串光秃秃的 URL,没有标题、没有描述、没有摘要,用户点进去还是 403 或空白页,体验极差,还浪费了展示机会。
正确做法是:如果你不想让某个页面被索引,给那个页面加 noindex meta 标签(<meta name=”robots” content=”noindex”>),同时不要用 robots.txt 阻止它——因为 noindex 需要 Google 能抓取到这个页面才能生效。如果你既 Disallow 了又加了 noindex,Google 抓不到页面就读不到 noindex 标签,索引不了也阻止不了,两头落空。
场景示例二:一个 B2B 站点的报价单下载页(/pricing/quote-request/)不想被 Google 索引,因为它是表单页不需要排关键词。运营团队写了 Disallow: /pricing/quote-request/。结果三个月后,这个 URL 出现在 SERP 里——搜索「quote request」时,显示一串光秃秃的 URL 没有标题。因为有几个行业目录站外链指向了这个页面。修复方法:删掉 robots.txt 里的 Disallow 行,改成在页面 head 里加 noindex meta 标签。两周后这个 URL 从 SERP 消失。
四、测试方法与上线流程
robots.txt 是改完就生效的——没有缓存期,Google 下次来就会读新的。这意味着写错了立刻出事。所以每次修改必须验证。
| 步骤 | 动作 | 工具 | 通过标准 |
|---|---|---|---|
| 1. 本地编辑 | 修改 robots.txt 内容 | 文本编辑器 | 语法正确,无多余空格 |
| 2. 浏览器访问验证 | 直接访问 https://域名/robots.txt | 浏览器 | 返回 200,内容是纯文本 |
| 3. GSC 测试工具验证 | 输入目标 URL,检查是否被允许 | GSC robots 测试工具 | 重要页面全部 Allow |
| 4. 上线后监控 | 观察 GSC 抓取统计和覆盖率报告 | GSC | 抓取量不异常下降 |
| 5. 改版后复查 | 每次改版后重新检查 robots.txt | GSC + 浏览器 | 新路径未被误阻止 |
检查清单:每次改完 robots.txt,至少测试以下 5 个 URL:首页(/)、产品列表页、产品详情页、博客文章页、联系我们页。确认这 5 个全部是 Allow 状态。如果其中任何一个显示 Disallow,说明规则写错了——最常见的错误是 Disallow: / 后面少了个空格、或者 Disallow: /products 写成了 Disallow: /products/ 但你想阻止的是 /products/spec/ 子目录。
和 站点重构与换域名的关系:换域名时,旧域名的 robots.txt 不能 Disallow 全站——因为旧域名上的 301 重定向需要 Googlebot 来抓取才能传递权重。如果旧域名 robots.txt 写了 Disallow: /,Google 不抓旧页面就读不到 301 指令,权重传递断了。正确做法是旧域名 robots.txt 保持允许抓取,只阻止 admin 等功能性路径。
FAQ 常见问题
robots.txt 和 noindex 有什么区别?
Disallow: / 是什么意思?为什么危险?
怎么测试 robots.txt 写得对不对?
robots.txt 能保护敏感页面不被竞争对手看到吗?
换域名后旧域名的 robots.txt 应该怎么配?
Allow 指令什么时候用?
写在最后
robots.txt 是 SEO 里最容易出大事故的小文件。它只有几行字,但一个斜杠写错,整个站点从搜索结果消失,恢复要一两周。记住两个核心原则:robots.txt 管抓取不管索引,想阻止索引用 noindex;改完必须用 GSC 测试工具验证。
落地三步:本周用浏览器访问你的 robots.txt,对照本文的标准配置检查有没有 Disallow: / 或过度阻止的规则;下周用 GSC robots 测试工具逐条验证重要页面全部 Allow,在文件末尾加上 Sitemap 声明;之后每次改版或调整 URL 结构后,第一时间复查 robots.txt,确认新路径没有被误阻止。
一句可以记住的话:robots.txt 是给 Google 写的请假条,不是门锁——写多了容易把自己关在门外,想藏起来的页面得用 noindex,不能靠 Disallow。
