如何验证 Robots.txt:免费检查工具 + 7 大常见错误
robots.txt 是每个爬虫在访问你的网站之前读取的第一个文件,而且它容不得半点差错:一个写错的字符就可能让整个网站从 Google 消失,一条放错位置的规则则可能悄悄把私密目录开放给 GPTBot。爬虫只会按字面解析这个文件,并且从不报告任何问题,所以只有经过验证,你才能确认规则是否真的按你的意图生效。本指南将介绍:语法规则、最长匹配如何在 Allow 与 Disallow 之间做出裁决、空的 Disallow 究竟意味着什么、如何测试 AI 爬虫规则,以及七种最常见的错误——所有这些都可以用免费的 Robots.txt 验证器逐一检查。
有效的 robots.txt 到底意味着什么?
验证在三个层面上进行,文件必须全部通过:
- 语法——每一行都能被解析为爬虫可识别的指令。无法解析的行会被静默忽略。
- 语义——规则产生你预期的效果。一个完全能通过解析的文件,仍可能屏蔽某个落地页,或者放行你本想拦截的爬虫。
- 可达性——文件必须是小写的
robots.txt,位于精确主机和协议的根目录下(https://example.com/robots.txt),以纯文本形式返回 200,且大小不超过 500 KiB——这是 Google 设定的体积上限,超出部分会被忽略。这个 URL 区分大小写(Robots.TXT会 404,等于允许抓取一切),而且按主机各自独立:example.com、www.example.com和blog.example.com各需要一份。
状态码与文件内容同等重要。404 并不算错误,401 和 403 也不是:除 429 以外的 4xx 状态码,Google 一律按“不存在 robots.txt”处理——即不加任何限制——所以一个返回 401 的 Basic-Auth 预发布站点并不是被屏蔽,而是不受任何规则约束。真正危险的是 429 和 5xx:RFC 9309 要求爬虫把它们当作完整但临时的全站禁止——一份报错的 robots.txt 可能让整站的抓取陷入停滞。重定向(http 跳转到 https、裸域名跳转到 www)会被跟随——至少五跳。
每个 robots.txt 都必须遵守的语法规则
格式本身很小:每行一条指令,指令与值之间用一个冒号分隔。可被识别的指令只有 User-agent、Allow、Disallow、Sitemap 和 Crawl-delay;其余内容一律忽略。一份干净的文件:
# Rules for all crawlers
User-agent: *
Disallow: /admin/
Disallow: /cart
Allow: /cart/help
Sitemap: https://example.com/sitemap.xml
决定它能否被正确解析的细节:
- 规则必须写在
User-agent:行的后面;位于其上的规则会被整行忽略。 - 一条
User-agent:行对其下所有规则生效,直到下一条User-agent:行出现为止;空行并不会结束一个组。 - 连续的多条
User-agent:行构成一个组,共享其下的规则——这就是给 GPTBot 和 ClaudeBot 设定同一套策略的方法。 - 指令名不区分大小写;路径区分大小写。
Disallow: /Admin/屏蔽不了/admin/。 Sitemap:可以出现在任何位置,但它的值必须是绝对 URL。
Allow 与 Disallow 如何相互作用:最长匹配规则
大多数文件都栽在这里。规则并不按书写顺序生效,最后一条也不会自动胜出。匹配分两步。第一步,前缀匹配:模式从 URL 的第一个字符开始比对,所以 Disallow: /cart 也会屏蔽 /cartoons 和 /cart/help。第二步,最长匹配:在所有匹配的规则中,路径最长的那条获胜——长度相同时 Allow 获胜,这是 Google 指定、RFC 9309 沿用的平局裁决规则。
User-agent: *
Disallow: /search
Allow: /search/faq
Disallow: /*.pdf$
拿三个 URL 来看:
/search/results?page=2——匹配/search(7 个字符)。被屏蔽。/search/faq——同时匹配/search(7 个字符)和/search/faq(11 个字符):更长者获胜,允许抓取。/files/report.pdf——匹配/*.pdf$:*匹配任意连续字符,$把匹配锚定在结尾。这里有个陷阱:匹配会连查询字符串一起算上,所以/*.pdf$依然会漏掉/report.pdf?utm_source=x,因为这个 URL 并不以 .pdf 结尾。
接下来是空值的情况。不带值的 Disallow: 是一个合法模式,含义是“对这个 user-agent 允许一切”——Google 官方的示例正是这样用的:
User-agent: *
Disallow: /private/
User-agent: GPTBot
Disallow:
其他所有爬虫都被挡在 /private/ 之外,而 GPTBot 被明确允许抓取一切——这是为单个爬虫解除屏蔽的标准做法。相比之下,空的 Allow: 什么也不做。
如何用免费检查工具验证 Robots.txt
免费的 Robots.txt 验证器一次性检查全部三个层面:语法(按行号标出问题)、语义(借助上面的最长匹配引擎)和可达性。
第 1 步:把文件导入工具
先选择一个标签页。Paste text(粘贴文本)用于检查草稿;Check URL(检查 URL)会从线上站点抓取 https://yoursite.com/robots.txt,验证的是爬虫实际收到的文件。404 和返回 HTML 页面(配置错误的 404 处理程序)都会被标记——上文的状态码规则同样适用:401/403 意味着“没有规则”,5xx 意味着“全部禁止”。
第 2 步:解读验证结果
结果顶部是三个计数器——通过、警告、错误;每条发现各占一行,标注行号并附修改建议。错误指那些无法实现其表面意图的行(缺少冒号的规则、非绝对 URL 的 Sitemap、带空格的路径);文件其余部分仍能正常解析。警告指合法但有风险的写法(缺少 User-agent: * 块、没有 Sitemap 指令、会被 Googlebot 忽略的 Crawl-delay)。零错误、加上逐条确认过的警告,就是健康状态。
第 3 步:用真实 URL 测试规则
结果下方是抓取测试面板,它会像爬虫一样套用你的规则。任选一个路径和一个爬虫——Googlebot、Bingbot、GPTBot、ClaudeBot 和 PerplexityBot 已内置,你文件中出现的每个 user-agent 都会列出,而且只要文件里有 User-agent: * 块,就会列出 *(所有其他爬虫)这一项。如果缺少 *,文件就没有默认组:任何没有专属组的爬虫都会落入“全部允许”。判定结果会显示 ALLOWED(允许)或 BLOCKED(屏蔽),并给出获胜的规则及其所在行。变现页面、管理路径、你刚改过的任何模式,都值得测一测。
第 4 步:修复、重跑、部署
修掉被标记的行,重新验证直到干净,部署上线,然后再对线上文件运行一次 URL 检查。如果需要推倒重写,免费的 Robots.txt 生成器会搭出一个干净的结构,你可以在同一工具里再次验证。
7 个常见的 robots.txt 错误
1. 规则出现在任何 User-agent 行之前
位于所有 User-agent: 行之上的 Disallow 会被忽略——通常是某个块被删除后残留的规则。修复:以 User-agent: * 开头,让每条规则都落在某个块内。
2. 缺少冒号与指令拼写错误
disallow /admin/(没有冒号)、User agent: *(用空格顶替连字符)或 Dissalow:(拼错)都不会有任何报错——这些行被直接跳过,对应路径保持开放。修复:每一行都必须形如 Directive: value(指令: 值);验证器会标记所有不合规的行。
3. 在 Disallow 中使用绝对 URL
Disallow: https://example.com/admin/ 什么都匹配不到:路径永远是相对于主机的,于是这条规则静默失效,/admin/ 依然可以被抓取。修复:只写路径。相反,Sitemap 行则必须写成绝对 URL。
4. Disallow: / 屏蔽了整站
User-agent: * 下面的一条 Disallow: / 就足以让整个网站从搜索中消失。典型成因:预发布环境的文件被原样复制到生产环境,或者 WordPress 的“建议搜索引擎不索引本站点”选项在上线后忘记关闭。这个选项生成的是虚拟 robots.txt——并没有哪一行可以删除——所以要到“设置 → 阅读”里去关掉它,或者向网站根目录上传一个真实的 robots.txt 文件来覆盖虚拟文件。随后在 Search Console 的网址检查(URL Inspection)中对关键页面请求重新抓取,可以加快恢复。
5. 空值产生与意图相反的效果
不带值的 Allow: 毫无作用;不带值的 Disallow: 却等于允许一切。修复:想“什么都不屏蔽”,就在对应的组里写空的 Disallow:;想屏蔽某条路径,就把路径补上。
6. 路径中带空格
RFC 9309 的语法规定路径在第一个空格处终止,所以 Disallow: /my folder/ 会退化成 Disallow: /my,悄无声息地过度屏蔽所有 /my* URL。修复:做百分号编码,写成 /my%20folder/。
7. 缺少 Sitemap 指令
这不算解析错误,而是白白错失的机会:没有 Sitemap: https://example.com/sitemap.xml,发现就只能依靠在 Search Console 或 Bing 站长工具里手动提交,或者外部链接。修复:把绝对 URL 加上——可以用 XML 站点地图生成器制作一份。至于 Crawl-delay,虽然能被解析,Googlebot 却会忽略——它从来不是可靠的限流手段。
测试 AI 爬虫规则:GPTBot、ClaudeBot、PerplexityBot
AI 爬虫正是 robots.txt 重新被人编辑的原因,而它们带来一条大多数人都会漏掉的规则:当爬虫拥有自己的具名组时,只有那个组对它生效——* 块对这个爬虫会被完全忽略。爬虫怎么找到自己的组?靠子串匹配:只要某组的 user-agent 值出现在爬虫自身的 user-agent 标识之内,Google 就会匹配该组,最具体的匹配获胜。因此,当不存在 googlebot-news 组时,Googlebot 组同样管辖 Googlebot-News;而 User-agent: Google 会捕获所有 Googlebot 变体——通常比预期的影响面更宽。由此产生一种出人意料的失效模式:
User-agent: *
Disallow: /admin/
Disallow: /internal/
User-agent: GPTBot
Disallow: /internal/
别把它读成“GPTBot 继承了 /admin/ 的屏蔽”。错了:GPTBot 匹配到自己的组,* 的规则对它不适用,/admin/ 对它是敞开的。想让通用限制同样生效,就把它们在 GPTBot 组里重写一遍——ClaudeBot、PerplexityBot 或任何具名爬虫同理。
抓取测试正是为这项检查准备的:把同一个敏感路径跑两次——一次选 *(文件里有 * 块时才会列出),一次选 GPTBot——然后对比两次判定。如果差异并非本意,就合并两个组。要审计线上站点究竟放行了哪些 AI 爬虫,可以把验证器与 AI 爬虫检查器搭配使用。
常见问题
如何检查我的 robots.txt 是否有效?
把文件粘贴进免费的 Robots.txt 验证器,或者输入域名抓取线上文件。你会得到带行号和修复建议的通过/警告/错误计数,外加一个抓取测试,显示某个 URL 对指定爬虫是允许还是屏蔽。零错误说明文件能正常解析;抓取测试则确认它的行为符合预期。
空的 Disallow 是什么意思?
不带值的 Disallow: 是一个合法模式,表示对其上方指名的 user-agent 允许一切。它是在整体严格的文件里为单个爬虫解除屏蔽的标准做法。而空的 Allow: 则完全没有作用。
Disallow 一个页面能让它从 Google 消失吗?
不能。robots.txt 控制的是抓取,不是索引。如果别的页面链接到某个被屏蔽的 URL,Google 仍可能把它列出来——只是无法读取其内容。要让页面移出索引,应当允许爬虫抓取它,并使用 noindex 标签或响应头;屏蔽这个 URL 反而会让 Google 永远看不到 noindex。
Crawl-delay 能拖慢 Googlebot 吗?
不能。Googlebot 从不遵循 Crawl-delay;支持它的是另外一些爬虫,例如 Bingbot 和 Yandex。验证器之所以把 Crawl-delay 行标为警告,正是因为这个原因。如果问题出在 Googlebot 的抓取压力上,解决办法在 Google Search Console 的抓取频率设置里,而不是 robots.txt。
Google 需要多久才能感知 robots.txt 的改动?
Google 对 robots.txt 的缓存最长可达 24 小时,因此一处修复可能要等大约一天才生效,之后的重新抓取还要另外计算。请在部署之前、而不是之后验证草稿——免费验证器可以在文件进入生产环境之前就检查粘贴的内容。