免费工具 robots.txt 测试:这个网址哪些爬虫能抓
贴上 robots.txt,列出你关心的网址,选好爬虫。每个网址、每个爬虫都给出「允许 / 禁止」、起作用的那一行和它实际读的是哪一组规则;另外列出爬虫会读错或直接跳过的行。
- 按 RFC 9309 判定
- 146 个爬虫 token
- 本地运行
哪个爬虫能抓哪个网址
示例是一个小商城。换成你自己网站 https://你的域名/robots.txt 的内容和你自己的路径,表格和问题清单会跟着更新。不会访问你的网站。
整份粘贴进来,注释和空行都没关系。
一行一个,最多 50 个。也可以贴完整网址,只比较路径和问号后面的参数。
用逗号分开,如 360Spider, Sogou。填 robots.txt 里写的 token,不是完整的 UA 字符串。
User-agent 组
3
文件里有几组规则。
检查次数
64
网址数 × 爬虫数。
允许
28
禁止
36
逐个网址、逐个爬虫的结果
爬虫只读写了自己名字的那一组;没有专门的组时才用 User-agent: *。
| 路径 | 爬虫 | 结果 | 起作用的规则 | 用的哪一组 |
|---|---|---|---|---|
/ | Googlebot | 允许 | 没有规则匹配:允许 | User-agent: *(第 2 行) |
/ | Bingbot | 允许 | 没有规则匹配:允许 | User-agent: *(第 2 行) |
/ | Baiduspider | 允许 | 没有规则匹配:允许 | 自己的组(第 14 行) |
/ | GPTBot | 禁止 | Disallow: /(第 12 行) | 自己的组(第 9 行) |
/ | OAI-SearchBot | 允许 | 没有规则匹配:允许 | User-agent: *(第 2 行) |
/ | ChatGPT-User | 允许 | 没有规则匹配:允许 | User-agent: *(第 2 行) |
/ | ClaudeBot | 允许 | 没有规则匹配:允许 | User-agent: *(第 2 行) |
/ | Claude-SearchBot | 允许 | 没有规则匹配:允许 | User-agent: *(第 2 行) |
/ | Claude-User | 允许 | 没有规则匹配:允许 | User-agent: *(第 2 行) |
/ | PerplexityBot | 允许 | 没有规则匹配:允许 | User-agent: *(第 2 行) |
/ | Perplexity-User | 允许 | 没有规则匹配:允许 | User-agent: *(第 2 行) |
/ | Google-Extended | 允许 | 没有规则匹配:允许 | User-agent: *(第 2 行) |
/ | Applebot-Extended | 允许 | 没有规则匹配:允许 | User-agent: *(第 2 行) |
/ | CCBot | 禁止 | Disallow: /(第 12 行) | 自己的组(第 9 行) |
/ | Bytespider | 禁止 | Disallow: /(第 12 行) | 自己的组(第 9 行) |
/ | Meta-ExternalAgent | 允许 | 没有规则匹配:允许 | User-agent: *(第 2 行) |
/products/red-sneakers?sort=price | Googlebot | 禁止 | Disallow: /*?sort=(第 6 行) | User-agent: *(第 2 行) |
/products/red-sneakers?sort=price | Bingbot | 禁止 | Disallow: /*?sort=(第 6 行) | User-agent: *(第 2 行) |
/products/red-sneakers?sort=price | Baiduspider | 允许 | 没有规则匹配:允许 | 自己的组(第 14 行) |
/products/red-sneakers?sort=price | GPTBot | 禁止 | Disallow: /(第 12 行) | 自己的组(第 9 行) |
/products/red-sneakers?sort=price | OAI-SearchBot | 禁止 | Disallow: /*?sort=(第 6 行) | User-agent: *(第 2 行) |
/products/red-sneakers?sort=price | ChatGPT-User | 禁止 | Disallow: /*?sort=(第 6 行) | User-agent: *(第 2 行) |
/products/red-sneakers?sort=price | ClaudeBot | 禁止 | Disallow: /*?sort=(第 6 行) | User-agent: *(第 2 行) |
/products/red-sneakers?sort=price | Claude-SearchBot | 禁止 | Disallow: /*?sort=(第 6 行) | User-agent: *(第 2 行) |
/products/red-sneakers?sort=price | Claude-User | 禁止 | Disallow: /*?sort=(第 6 行) | User-agent: *(第 2 行) |
/products/red-sneakers?sort=price | PerplexityBot | 禁止 | Disallow: /*?sort=(第 6 行) | User-agent: *(第 2 行) |
/products/red-sneakers?sort=price | Perplexity-User | 禁止 | Disallow: /*?sort=(第 6 行) | User-agent: *(第 2 行) |
/products/red-sneakers?sort=price | Google-Extended | 禁止 | Disallow: /*?sort=(第 6 行) | User-agent: *(第 2 行) |
/products/red-sneakers?sort=price | Applebot-Extended | 禁止 | Disallow: /*?sort=(第 6 行) | User-agent: *(第 2 行) |
/products/red-sneakers?sort=price | CCBot | 禁止 | Disallow: /(第 12 行) | 自己的组(第 9 行) |
/products/red-sneakers?sort=price | Bytespider | 禁止 | Disallow: /(第 12 行) | 自己的组(第 9 行) |
/products/red-sneakers?sort=price | Meta-ExternalAgent | 禁止 | Disallow: /*?sort=(第 6 行) | User-agent: *(第 2 行) |
/checkout/help | Googlebot | 允许 | Allow: /checkout/help(第 5 行) | User-agent: *(第 2 行) |
/checkout/help | Bingbot | 允许 | Allow: /checkout/help(第 5 行) | User-agent: *(第 2 行) |
/checkout/help | Baiduspider | 允许 | 没有规则匹配:允许 | 自己的组(第 14 行) |
/checkout/help | GPTBot | 禁止 | Disallow: /(第 12 行) | 自己的组(第 9 行) |
/checkout/help | OAI-SearchBot | 允许 | Allow: /checkout/help(第 5 行) | User-agent: *(第 2 行) |
/checkout/help | ChatGPT-User | 允许 | Allow: /checkout/help(第 5 行) | User-agent: *(第 2 行) |
/checkout/help | ClaudeBot | 允许 | Allow: /checkout/help(第 5 行) | User-agent: *(第 2 行) |
/checkout/help | Claude-SearchBot | 允许 | Allow: /checkout/help(第 5 行) | User-agent: *(第 2 行) |
/checkout/help | Claude-User | 允许 | Allow: /checkout/help(第 5 行) | User-agent: *(第 2 行) |
/checkout/help | PerplexityBot | 允许 | Allow: /checkout/help(第 5 行) | User-agent: *(第 2 行) |
/checkout/help | Perplexity-User | 允许 | Allow: /checkout/help(第 5 行) | User-agent: *(第 2 行) |
/checkout/help | Google-Extended | 允许 | Allow: /checkout/help(第 5 行) | User-agent: *(第 2 行) |
/checkout/help | Applebot-Extended | 允许 | Allow: /checkout/help(第 5 行) | User-agent: *(第 2 行) |
/checkout/help | CCBot | 禁止 | Disallow: /(第 12 行) | 自己的组(第 9 行) |
/checkout/help | Bytespider | 禁止 | Disallow: /(第 12 行) | 自己的组(第 9 行) |
/checkout/help | Meta-ExternalAgent | 允许 | Allow: /checkout/help(第 5 行) | User-agent: *(第 2 行) |
/cart | Googlebot | 禁止 | Disallow: /cart(第 3 行) | User-agent: *(第 2 行) |
/cart | Bingbot | 禁止 | Disallow: /cart(第 3 行) | User-agent: *(第 2 行) |
/cart | Baiduspider | 允许 | 没有规则匹配:允许 | 自己的组(第 14 行) |
/cart | GPTBot | 禁止 | Disallow: /(第 12 行) | 自己的组(第 9 行) |
/cart | OAI-SearchBot | 禁止 | Disallow: /cart(第 3 行) | User-agent: *(第 2 行) |
/cart | ChatGPT-User | 禁止 | Disallow: /cart(第 3 行) | User-agent: *(第 2 行) |
/cart | ClaudeBot | 禁止 | Disallow: /cart(第 3 行) | User-agent: *(第 2 行) |
/cart | Claude-SearchBot | 禁止 | Disallow: /cart(第 3 行) | User-agent: *(第 2 行) |
/cart | Claude-User | 禁止 | Disallow: /cart(第 3 行) | User-agent: *(第 2 行) |
/cart | PerplexityBot | 禁止 | Disallow: /cart(第 3 行) | User-agent: *(第 2 行) |
/cart | Perplexity-User | 禁止 | Disallow: /cart(第 3 行) | User-agent: *(第 2 行) |
/cart | Google-Extended | 禁止 | Disallow: /cart(第 3 行) | User-agent: *(第 2 行) |
/cart | Applebot-Extended | 禁止 | Disallow: /cart(第 3 行) | User-agent: *(第 2 行) |
/cart | CCBot | 禁止 | Disallow: /(第 12 行) | 自己的组(第 9 行) |
/cart | Bytespider | 禁止 | Disallow: /(第 12 行) | 自己的组(第 9 行) |
/cart | Meta-ExternalAgent | 禁止 | Disallow: /cart(第 3 行) | User-agent: *(第 2 行) |
文件里的问题
对照 RFC 9309 和百度、Google 等搜索引擎的官方文档检查。
- 说明第 5 行Allow「/checkout/help」写在一条更宽的 Disallow 后面。RFC 9309 和 Google 按最长规则判定,顺序无所谓;但百度的文档写的是「按顺序第一条匹配的 Allow / Disallow 生效」,百度可能会判成禁止。把 Allow 行挪到 Disallow 前面,两种读法结果就一致了。
- 正常没发现问题,每一行都是爬虫能看懂的写法。
版本 v1.0更新于 更新记录
每一列在告诉你什么
每一行是「一个爬虫看一个网址」。先看结果,再看解释它的两列。
允许还是禁止
禁止表示请这个爬虫不要抓这个网址。这是请求不是门锁:守规矩的爬虫会照办,不守的照样来;被禁止的网址如果有外链,Google 仍可能收录一个没有摘要的结果。
起作用的规则
最终胜出的那一行 Allow 或 Disallow,带行号。多条都匹配时取最长的,一样长时 Allow 优先。「没有规则匹配」表示爬虫有自己适用的组,但里面没有一条覆盖这个网址,所以允许。
用的哪一组
大部分意外出在这里。爬虫一旦有自己名字的组,就完全不看 User-agent: *。示例里给百度蜘蛛单独写了一组只禁 /search,结果 * 里禁掉的购物车、带排序参数的网址,百度蜘蛛反而都能抓。
问题清单
错误会让规则或 Sitemap 失效;警告是有的爬虫会读错或跳过的行;说明解释 Crawl-delay 这类非标准写法。文件没问题时只显示一条「正常」。
工具测的是你贴进来的文字。线上那份可能不一样:确认 https://你的域名/robots.txt 返回 200 和纯文本,每个主机名(www、m、shop)都要有,http 和 https 都试一下。宝塔面板里 robots.txt 放在网站根目录,开了伪静态的要确认它没被转发给首页。
三步用完
不用安装,也不会访问你的网站。
-
1
贴上文件
浏览器打开你的 robots.txt,全选复制粘贴。想在上线前试改动,就贴改好的版本。
-
2
列出网址
把必须能被抓的页面(首页、栏目页、商品页、文章页)和本来想屏蔽的页面(购物车、站内搜索、后台)都放进去,贴完整网址也行。
-
3
选爬虫、看结果
默认是主要 AI 爬虫加 Google、必应、百度。也可以切到全部 AI 爬虫、全部搜索引擎,或者自己加 token(如 360Spider)。按问题清单改完再测一遍。
爬虫怎么判断能不能抓(RFC 9309)
RFC 9309(2022 年 9 月)把 robots 协议正式写成了标准,Google、必应和大多数知名爬虫都按它执行。本工具完全照它判定:
- 选组:用爬虫的产品 token 去比 User-agent,不区分大小写、整词匹配;同一个 token 的多个组合并;没有组写它的名字才用
*;两者都没有就全部允许 - 选规则:匹配到的 Allow / Disallow 里路径最长的胜出;一样长时 Allow 胜出;一条都不匹配就允许
- 路径:区分大小写、从开头比;
*匹配任意字符,末尾的$表示结尾;先把百分号编码归一化(中文路径按 UTF-8 编码后再比) /robots.txt本身永远允许。Sitemap、Crawl-delay 等行不会拆开或改变分组
| 组里的规则 | 网址路径 | 结果 |
|---|---|---|
Disallow: /fish | /fish.html | 禁止:前缀匹配 |
Disallow: /fish/ | /fish | 允许:不匹配 |
Disallow: /Fish | /fish | 允许:路径区分大小写 |
Disallow: /*.php$ | /index.php?lang=en | 允许:$ 要求网址在这里结束 |
Disallow: / + Allow: /$ | / | 允许:/$ 更长 |
Disallow: / + Allow: /p | /page | 允许:/p 更长 |
Disallow: /folder + Allow: /folder | /folder/page | 允许:一样长时 Allow 优先 |
Disallow: /新闻 | /%E6%96%B0%E9%97%BB/1.html | 禁止:中文按 UTF-8 编码后相同 |
四个爬虫读同一份示例文件
示例有三组规则。下面是默认爬虫里的四个对同样几个网址的判定,以及原因。
| 爬虫 | 读的哪一组 | /products/red-sneakers?sort=price | /checkout/help | /cart |
|---|---|---|---|---|
| Googlebot | *(没有自己的组) | 禁止:/*?sort= | 允许:Allow 比 /checkout/ 长 | 禁止 |
| Baiduspider | 自己的组:只禁 /search | 允许 | 允许 | 允许 |
| Bytespider | 和 GPTBot、CCBot 同一组 | 禁止:Disallow: / | 禁止 | 禁止 |
| ClaudeBot | *(没有自己的组) | 禁止 | 允许 | 禁止 |
百度蜘蛛是那个坑:为了单独禁 /search 给它开了一组,* 里的规则对它就全部失效了。要保留,就把 * 的规则在百度那一组里再写一遍。另外 /checkout/help 对 Googlebot 是允许,但按百度文档的「第一条匹配生效」读法会被前面的 Disallow 挡住,所以问题清单提示把 Allow 挪到前面。
robots.txt 为什么没按你想的生效
多数出问题的文件语法都没错,错的是逻辑。
以为规则会叠加
单独写了名字的组会替换 *,不是在它基础上追加。共用的规则要在每个具名组里各写一遍。
用 Disallow 删收录
Disallow 只是不抓,不等于不收录,有外链的网址照样可能出现在结果里。要删收录,放开抓取再加 noindex。
把 CSS、JS 也屏蔽了
像 Disallow: /static/ 这样的规则会让搜索引擎渲染不出页面,可能被当成空白页或移动端不友好。
放错主机或目录
每个主机名在根目录各放一份:m.example.cn 不会读 www.example.cn 的文件,/blog/robots.txt 永远不会被读取。
看看哪些爬虫真的遵守了
robots.txt 写的是你的意愿,TapCub 的机器人报表记录爬虫实际做了什么:把搜索引擎、AI 爬虫、恶意爬虫和真人分开统计,不混进真人数据。
怎么检查某个网址有没有被 robots.txt 屏蔽?
把文件和网址贴到上面,每个爬虫一行,写明允许还是禁止,并给出起作用的那一行。要看搜索引擎眼里的线上版本:百度搜索资源平台有 Robots 工具可以检测和更新;Google Search Console 有 robots.txt 报告(2023 年底取代了旧的 robots.txt 测试工具),网址检查可以看单个网址是否被屏蔽。
为什么百度蜘蛛不按 User-agent: * 的规则来?
因为文件里另外有一组写了 Baiduspider。爬虫找到自己名字的组,就只读那一组。要么删掉这一组,要么把 * 里的规则复制进去。Googlebot 等其他爬虫同理。
Allow 和 Disallow 的先后顺序有影响吗?
按 RFC 9309、Google 和必应的做法没有影响:最长的路径胜出,一样长时 Allow 优先。但百度的 robots 文档写的是按顺序取第一条匹配的规则。把 Allow 写在 Disallow 前面,两种读法结果一致,最省心。
robots.txt 里的路径区分大小写吗?
区分。Disallow: /Admin 挡不住 /admin。字段名(Disallow、User-agent)和爬虫 token 不区分大小写,路径区分。中文路径按 UTF-8 编码比较,直接写中文和写 %E6… 编码是一样的。
在 robots.txt 里禁止了,页面就会从百度、Google 消失吗?
不会。它只是不抓。如果别的页面链接了这个网址,搜索引擎仍可能收录一个没有摘要的结果。要删除收录,让页面可以被抓,再加 noindex 的 robots meta 标签或 X-Robots-Tag 响应头。
AI 爬虫会遵守 robots.txt 吗?
大厂都声明自动抓取的爬虫会遵守:OpenAI(GPTBot、OAI-SearchBot)、Anthropic(ClaudeBot、Claude-SearchBot、Claude-User)、Google(Google-Extended)、Perplexity(PerplexityBot)。由用户触发的抓取不一样:OpenAI 说 ChatGPT-User 可能不适用 robots.txt,Perplexity 说 Perplexity-User 一般不遵守,Meta 说 Meta-ExternalFetcher 可能绕过。
robots.txt 打不开或报错会怎样?
按 RFC 9309:返回 4xx(比如 404)时爬虫可以抓全站;返回 5xx 或连不上时,应当把整站当成禁止抓取,直到文件恢复。网站开了 CDN 或防火墙的,注意别把 /robots.txt 也拦掉。
我贴的内容会上传吗?
不会。文件和网址都在你的浏览器里解析,不发给 TapCub,也不访问你的网站。这个工具没有分享链接,粘贴的内容不会出现在网址里。