给 AI 爬虫单独开白名单,近三成网站反而放行了搜索页和账户页

AI Summary (BLUF)
一项针对5,539个robots.txt文件的分析发现,29.8%的文件在为AI爬虫单独设置规则时,意外放行了原本对所有人屏蔽的路径,如搜索、账户和API。同时,仅7.1%的网站采取了“屏蔽训练爬虫、保留答案引擎”的策略。文章解释了robots.txt的匹配规则,并给出了修复建议。
核心洞察
这份研究最有意思的地方在于,它揭穿了一个很多人没意识到的技术细节:你在 robots.txtA text file that instructs web crawlers which pages or files to access or ignore on a website. 里给 GPTBotOpenAI's web crawler used to collect data for training AI models like ChatGPT and GPT-4. 单独开一个“欢迎光临”的组,反而会让它绕过你给所有其他爬虫设的封锁线。29.8% 的网站踩了这个坑,而且被放行的恰恰是搜索页、账户页、API 这些最不该开放的地方。如果你只关心一件事:去检查一下你的 robots.txt 里有没有那个只有 Allow: / 的 AI 爬虫组。
核心结论
29.8% 的 robots.txt 文件存在“点名放行”缺口:这些文件在为所有爬虫封锁路径的同时,又单独为某个 AI 爬虫建立了组,导致该爬虫至少绕过了一道封锁(1105 个文件中有 329 个)。
被放行的恰恰是最不该开放的路径:站内搜索结果(155 个文件,47.1%)、登录和账户页(136 个,41.3%)、API 接口(92 个,28.0%)、后台管理区(79 个,24.0%)、购物车和结账页(70 个,21.3%)。
GPTBot 是最常被放行绕过的爬虫(187 个文件),其次是 OAI-SearchBotChatGPT Search使用的爬虫User-Agent,用于索引网页内容以供搜索引用,需在robots.txt中允许。(179 个)、ChatGPT-User(178 个)、PerplexityBotPerplexity's web crawler used to collect data for training its AI search engine.(150 个)和 ClaudeBot(139 个)。
仅 7.1% 的网站实现了“封锁训练爬虫、对所有答案引擎开放”的策略:在 1106 个至少封锁一个训练爬虫的文件中,64.6% 同时也封锁了至少一个答案引擎。
llms.txtA standardized file format that allows website owners to communicate AI training and usage policies to AI crawlers, language models, and AI-driven search engines. 采用率仍低:6082 个有响应的网站中仅 14.4%(878 个)提供了有效的 llms.txt;2.7% 的 robots.txt 带有 Cloudflare 的
Content-Signal行。
主要发现
- 29.8% 的 robots.txt 文件在为所有爬虫封锁路径的同时又点名了某个 AI 爬虫,结果让这个爬虫至少绕过了一道封锁(1105 个文件里有 329 个)。其中 182 个文件里,该爬虫的组只写了一句话:要么是笼统的
Allow: /,要么是空的Disallow:。 - 最常被放行的路径:站内搜索(155 个文件)、登录和账户页(136 个)、API(92 个)、后台管理区(79 个)、购物车和结账页(70 个)。
- 最常被放行的爬虫:GPTBot(187 个)、OAI-SearchBot(179 个)、ChatGPT-User(178 个)、PerplexityBot(150 个)、ClaudeBot(139 个)。
- 23.2% 的 robots.txt 文件至少点名了一个 AI 爬虫。GPTBot 被 14.8% 的网站整站封锁(前 1000 名域名里是 21.6%);CCBotCommon Crawl's web crawler used to collect data for AI training, with partial compliance to llms.txt standards.(15.3%)和 Bytespider字节跳动旗下豆包等AI产品的爬虫User-Agent。(15.1%)被封锁得最多。
- 20.0% 的网站至少封锁了一个训练爬虫,但只有 7.1% 在封锁训练爬虫的同时对全部 9 个 AI 答案引擎保持开放。
- 有响应的网站里,14.4% 提供了有效的 llms.txt;2.7% 的 robots.txt 带有 Cloudflare 的
Content-Signal行。 - WordPress 网站点名 AI 爬虫的比例低于其他网站(16.9% 对 22.0%)。
背后的规则
robots.txt 是一组一组的规则。每个组以一行或多行 User-agent 开头,后面跟着给这些爬虫的规则。按照标准 RFC 9309 robots.txt 的官方标准文档,规定了爬虫匹配规则,包括用户代理组的优先级。,爬虫会先找点名自己的组。只有找不到的时候才会回退:
“如果不存在匹配的组,爬虫必须遵守 user-agent 行为
*的组(如果存在的话)。”
RFC 9309,第 2.2.1 节
Google 对自己爬虫的文档也是这么说的:针对特定 user agent 的组和全局 * 组不会合并。所以,一个文件只要添加了 GPTBot 的组,哪怕里面只写了 Allow: / 表示欢迎,GPTBot 就不再读取 User-agent: * 下面写的任何规则。
图 1:一个文件,两种读法
robots.txt 原文:
User-agent: *
Disallow: /search
Disallow: /account/
Disallow: /api/
User-agent: GPTBot
Allow: /
各爬虫实际能抓什么:
| 路径 | 其他所有爬虫(如 Googlebot) | GPTBot(有自己的组) |
|---|---|---|
/search?q=… |
封锁 | 放行 |
/account/settings |
封锁 | 放行 |
/api/v2/orders |
封锁 | 放行 |
/blog/any-post |
放行 | 放行 |
高亮行:文件为所有人封锁、却唯独对点名爬虫放行的路径。
两种修法
- 如果这个组只是为了欢迎爬虫(里面除了
Allow: /什么都没有),删掉它。爬虫会回退到User-agent: *,跟其他爬虫遵守同样的规则。 - 如果爬虫确实需要自己的规则,把
User-agent: *下的每一条Disallow都复制进它的组里:
User-agent: GPTBot
Disallow: /search
Disallow: /account/
Disallow: /api/
我们的免费 robots.txt 检查工具能帮你找出这个问题:粘贴一个文件,它会列出所有被点名爬虫能到达、但 User-agent: * 封锁了的路径。
统计口径:当一个路径在 User-agent: * 下被封锁,而某个被点名的 AI 爬虫自己的组对该路径完全没有规则、或者只有笼统的 Allow: / 时,我们算这个文件存在缺口。如果组里是有意放行某个具体路径(比如 Allow: /api/public/),我们不算。在 * 下封锁整站、同时放行点名爬虫,是一种常见的刻意做法,所以单独的 Disallow: / 也不算。
被放行了什么
这些路径都不是秘密,robots.txt 是公开的,它也不是访问控制。但这些是站主有意封锁的路径:会产生大量近似重复 URL 的搜索结果页、账户页,以及每次请求都要花钱的接口。
图 2:被放行的路径类型
占 329 个有缺口文件的比例。一个文件可以同时计入多个类型。
| 路径类型 | 占文件比例 | 文件数 |
|---|---|---|
| 站内搜索结果 | 47.1% | 155 |
| 登录、账户和注册页 | 41.3% | 136 |
| API 接口 | 28.0% | 92 |
| 后台管理区 | 24.0% | 79 |
| 购物车、结账和订单 | 21.3% | 70 |
| Feed 和 XML 文件 | 13.4% | 44 |
按被封锁路径中的模式归类(search、?s=、login、account、/api/、admin、cart、checkout、feed 等),所以类型划分是近似的。
最常见的形态是只允许一切的组,也就是笼统的 Allow: / 或空的 Disallow::329 个文件里有 182 个(55.3%)。另外 147 个给了爬虫自己的规则,但漏掉了某些对其他所有人封锁的路径。
图 3:被放行绕过封锁的爬虫
329 个有缺口文件中,各爬虫被放行的文件数。20 个中的前 10。
| 爬虫 | 文件数 | 运营方 |
|---|---|---|
GPTBot |
187 | OpenAI |
OAI-SearchBot |
179 | OpenAI |
ChatGPT-User |
178 | OpenAI |
PerplexityBot |
150 | Perplexity |
ClaudeBot |
139 | Anthropic |
Google-Extended |
137 | |
CCBot |
84 | Common Crawl |
Amazonbot |
65 | Amazon |
Claude-SearchBot |
64 | Anthropic |
Claude-User |
63 | Anthropic |
Google-Extended 是一个权限令牌,不是爬虫:Google 用 Googlebot 抓取,而 Googlebot 仍然遵守自己的组。对它来说,缺口是规则上的缺口,不一定是实际抓取上的缺口。
谁封锁了哪个 AI 爬虫
在我们能解析的 5539 个 robots.txt 文件中,各爬虫被整站封锁的比例,也就是对 / 的判定结果。这包括在 User-agent: * 下封锁所有爬虫的文件:有 238 个(4.3%)这么做。前 1000 名域名封锁得比后面多:21.6% 封锁 GPTBot,而 1001 到 10000 名是 14.1%。
图 4:按爬虫看整站封锁比例
占可解析 robots.txt 文件的比例:全部 5539 个、前 1000 名(495 个文件)和 1001 到 10000 名(5044 个)。
| 爬虫 | 用途 | 封锁 · 全部 | 前 1000 | 1001–10000 |
|---|---|---|---|---|
CCBot(Common Crawl) |
训练 | 15.3% | 23.8% | 14.5% |
Bytespider(字节跳动) |
训练 | 15.1% | 24.8% | 14.2% |
GPTBot(OpenAI) |
训练 | 14.8% | 21.6% | 14.1% |
ClaudeBot(Anthropic) |
训练 | 13.8% | 21.4% | 13.0% |
Google-Extended(Google) |
训练 | 12.1% | 19.0% | 11.4% |
meta-externalagent(Meta) |
训练 | 12.1% | 20.0% | 11.3% |
Applebot-Extended(Apple) |
训练 | 11.6% | 18.2% | 10.9% |
Amazonbot(Amazon) |
训练 | 11.4% | 16.8% | 10.9% |
PerplexityBot(Perplexity) |
答案引擎 | 11.0% | 18.4% | 10.3% |
ChatGPT-User(OpenAI) |
答案引擎 | 9.5% | 14.9% | 9.0% |
DuckAssistBot(DuckDuckGo) |
答案引擎 | 8.3% | 14.5% | 7.7% |
meta-externalfetcher(Meta) |
其他 | 8.2% | 13.9% | 7.7% |
Perplexity-User(Perplexity) |
答案引擎 | 8.1% | 15.8% | 7.3% |
OAI-SearchBot(OpenAI) |
答案引擎 | 8.0% | 12.9% | 7.5% |
Claude-User(Anthropic) |
答案引擎 | 7.8% | 15.2% | 7.0% |
Claude-SearchBot(Anthropic) |
答案引擎 | 7.6% | 14.3% | 6.9% |
Google-CloudVertexBot(Google) |
其他 | 7.5% | 15.2% | 6.7% |
Amzn-SearchBot(Amazon) |
答案引擎 | 5.7% | 10.5% | 5.2% |
Amzn-User(Amazon) |
答案引擎 | 5.6% | 10.1% | 5.2% |
OAI-AdsBot(OpenAI) |
其他 | 4.4% | 9.1% | 4.0% |
用途分类来自各厂商文档:训练爬虫收集页面用于构建模型;答案引擎抓取页面来回答问题,可以引用和链接你;其他包括广告检查之类的抓取器。Perplexity 表示 Perplexity-User 一般会忽略 robots.txt,因为是用户要求访问该页面,所以封锁它只是表达一个它不会执行的偏好。
封锁训练、保留回答:7.1%
一个常见的建议是把决策拆开:拒绝 GPTBot、CCBot 这类只拿不给的训练爬虫,允许 OAI-SearchBot、PerplexityBot 这类能引用和链接你的答案引擎。这么做的人很少。在 1106 个至少封锁了一个训练爬虫的文件里,714 个(64.6%)同时也封锁了至少一个答案引擎。只有 392 个(占全部文件的 7.1%)在封锁训练爬虫的同时对全部 9 个答案引擎保持开放。
图 5:训练爬虫对答案引擎
占 5539 个可解析 robots.txt 文件的比例。封锁指整站封锁。
| 模式 | 占文件比例 | 文件数 |
|---|---|---|
| 至少封锁一个训练爬虫 | 20.0% | 1106 |
| 至少封锁一个答案引擎 | 13.1% | 727 |
| 封锁训练、对所有答案引擎开放 | 7.1% | 392 |
| 全部 20 个都封锁 | 3.5% | 194 |
8 个训练爬虫、9 个答案引擎、3 个其他。全部 20 个都点名封锁的情况几乎没有:194 个全部封锁的文件里有 193 个是通过封锁所有爬虫实现的。
llms.txt 和 Content Signals
llms.txt 于 2024 年 9 月提出,是放在网站根目录的一个 Markdown 文件,给语言模型提供一份摘要和关键页面列表。它唯一必需的要素是一行 # 标题。在我们请求的 6082 个有响应的网站里,878 个(14.4%)提供了有效的文件:状态码 200、是纯文本而不是网页、以标题行开头。前 1000 名域名稍微领先:18.5%,而 1001 到 10000 名是 14.0%。
图 6:/llms.txt 返回了什么
占 6082 个有响应网站的比例。不含 403、429、5xx 和网络错误。
| 响应 | 占网站比例 | 网站数 |
|---|---|---|
| 无文件(404 或 410) | 70.6% | 4296 |
| 有效 llms.txt | 14.4% | 878 |
| 返回的是 HTML 页面而非文件 | 6.7% | 409 |
| 重定向到其他页面 | 4.3% | 264 |
| 纯文本但没有 # 标题行 | 2.3% | 142 |
| 其他响应 | 1.5% | 93 |
Content Signals 由 Cloudflare 于 2025 年 9 月发布,在 robots.txt 里加一行 Content-Signal,包含三个是或否的偏好:search、ai-input 和 ai-train。5539 个文件里有 150 个(2.7%)带了这一行,其中 90 个写了 ai-train=no。这一行只是表达偏好,不属于 RFC 9309,爬虫没有义务读取它。
WordPress 网站
我们通过首页 HTML 识别出 396 个 WordPress 网站。其中 41.3% 的 robots.txt 仍然包含 WordPress 的默认规则(Disallow: /wp-admin/ 和 Allow: /wp-admin/admin-ajax.php)。它们点名 AI 爬虫的频率低于其他网站,封锁 GPTBot 的比例则差不多。
图 7:WordPress 与其他网站
首页可读取的网站(不是机器人验证页)。robots.txt 各行使用可解析的文件。
| WordPress | 其他网站 | |
|---|---|---|
| 网站数 | 396 | 4894 |
| 可解析 robots.txt | 361 | 3959 |
| 至少点名一个 AI 爬虫 | 16.9% | 22.0% |
| 整站封锁 GPTBot | 10.0% | 10.5% |
| 至少封锁一个训练爬虫 | 12.5% | 15.1% |
| 提供有效 llms.txt | 16.6% | 14.7% |
WordPress 的判定依据:generator 标签、api.w.org 链接,或者首页 HTML 里同时有 wp-content 和 wp-includes 路径。有 22 个网站 robots.txt 里有 WordPress 规则但首页没有痕迹,两列都不计入。在这个排名段里 WordPress 不常见(可读首页的 7.5%),所以样本偏小。
检查你自己的文件
把你的 robots.txt 粘贴到我们的免费检查工具里。它会显示 Googlebot、Bingbot 和 20 个 AI 爬虫能抓什么,并列出所有被点名爬虫能到达、但 User-agent: * 封锁了的路径。它在你的浏览器里运行,不上传任何东西。
打开 robots.txt 检查工具
要写新文件?同一页面上的生成器会把你写的规则复制进它添加的每个爬虫组,所以不会有缺口。
用 WordPress?我们的免费插件 AI Crawler Check 会在后台检查你线上的 robots.txt 有没有这些缺口,并在站点健康里标出来。它只读文件,从不修改。
常见问题
User-agent: * 对 GPTBot 适用吗?
只有当文件里没有任何组点名 GPTBot 时才适用。一旦有组以 User-agent: GPTBot 开头,GPTBot 就只遵守那个组,忽略 User-agent: * 下的所有规则。在前 10000 名域名里,29.8% 的 robots.txt 文件在为所有人封锁路径的同时点名了 AI 爬虫,结果让某个被点名的爬虫至少绕过了一道封锁。
有多少网站封锁 GPTBot?
前 10000 名域名里,我们能读取的 5539 个 robots.txt 文件中有 14.8% 整站封锁 GPTBot:11.4% 是点名封锁,其余是封锁所有爬虫。前 1000 名域名里这个比例是 21.6%。
怎么封锁 AI 训练但允许 AI 搜索?
给每个你想拒绝的训练爬虫(比如 GPTBot、ClaudeBot、CCBot 和 Google-Extended)单独建一个组,写 Disallow: /。答案引擎比如 OAI-SearchBot、Claude-SearchBot 和 PerplexityBot 不要写进文件,让它们遵守 User-agent: *;或者给每个建一个组,把 User-agent: * 下的每条规则都复制进去。这项研究里只有 7.1% 的网站封锁训练的同时对所有答案引擎开放。
有多少网站有 llms.txt 文件?
有响应的网站里 14.4% 提供了有效的 llms.txt(6082 个里的 878 个)。前 1000 名域名里是 18.5%。
robots.txt 足以挡住 AI 爬虫吗?
不够。robots.txt 只是一个请求。守规矩的爬虫会遵守,不守规矩的不会,还有些代表用户行动的抓取器说自己不适用它,Perplexity 就说 Perplexity-User 是这样。任何必须保密的东西都需要登录或服务端规则。
方法
- 域名: Tranco 榜单的前 10000 条,这是一个为研究构建的流行域名排名(列表 4672X,生成于 2026-10-11)。
- 时间: 2026-10-12 一次抓取,07:35 到 09:34 UTC。
- 爬虫: HitMindBot,user agent 为
Mozilla/5.0 (compatible; HitMindBot/1.0; +https://hitmind.ai/bot)。每个域名最多三次请求,依次进行:/robots.txt,然后/llms.txt(前 64 KB),然后首页(前 256 KB,仅用于检测 WordPress)。我们遵守每个网站给 HitMindBot 的规则,没点名我们时遵守User-agent: *,跳过了它们禁止的内容(llms.txt 有 270 个网站)。robots.txt 返回服务器错误或没有响应时,我们按 RFC 9309 的规定,把该网站视为完全禁止,不再抓取其他内容。 - 文件大小: robots.txt 最多读取 500 KiB,这是 Google 采用的限制。10 个超过 100 KB 的文件按前 100 KB 分析。
- 规则: RFC 9309 的组选择和最长匹配优先(平局时 Allow 胜出),支持
*和$通配符,与我们公开的 robots.txt 检查工具使用同一套代码。封锁指规则对该爬虫禁止/。点名指文件里有该爬虫 user agent 的组。 - AI 爬虫: 我们 robots.txt 生成器里的 20 个 user agent,每个都附有厂商文档,按内容用途分组(8 个训练、9 个答案引擎、3 个其他)。
- llms.txt 有效的判定:返回 200、不是 HTML 页面、没有重定向到其他路径、第一个非空行是
#标题。 - 更正,2026 年 10 月 21 日: 本页最初写的是 28.4% 的 robots.txt 文件至少点名了一个 AI 爬虫。我们的分析在文件既没有该爬虫的组、也没有
User-agent: *组时,也把爬虫算作被点名。更正后的比例是 23.2%;WordPress 对比和 CSV 里各爬虫的“点名”计数也因同样原因变了。封锁数字没有变,继承缺口的结果也没有变。
10000 个域名对 /robots.txt 的返回情况
| 返回情况 | 数量 | 占比 |
|---|---|---|
| 提供了可解析的 robots.txt | 5539 | 55.4% |
| 403 Forbidden | 1208 | 12.1% |
| 503 Service Unavailable | 920 | 9.2% |
| 其他 5xx 或 429 | 70 | 0.7% |
| 无文件(404 或 410) | 667 | 6.7% |
| 其他 4xx | 61 | 0.6% |
| 返回 HTML 页面而非 robots.txt | 480 | 4.8% |
| 无响应(DNS、TLS、超时、拒绝) | 1054 | 10.5% |
| 其他 | 1 | 0.0% |
局限
- 大约五分之一的域名拒绝了我们。 1208 个对 robots.txt 返回 403,920 个返回 503,多数是机器人防护。它们被排除在所有比例之外。拒绝未知机器人的网站可能也更常拒绝 AI 爬虫,所以封锁比例更可能是偏低而不是偏高。
- 很多条目不是网站。 流行域名榜单包含 API、CDN、广告和分析主机名,它们不提供页面,这解释了很多完全无响应的域名(1054 个)。
- 单一地点的一次快照。 少数网站会按地区或 user agent 返回不同文件。
- 规则,不是行为。 缺口显示的是规则允许什么,不是任何爬虫实际抓了什么,有些缺口可能是有意为之。我们按 RFC 9309 执行,看不到各厂商解析器的实际行为。
- 权限令牌。 Google-Extended 和 Applebot-Extended 不是爬虫。Google 和 Apple 用 Googlebot 和 Applebot 抓取,所以这两个令牌的缺口在实际中可能什么都不会改变。
- 近似处理。 路径类型是对路径的模式匹配。WordPress 检测依赖首页,有 1573 个首页是机器人验证页。
数据和引用
下载汇总数据(CSV)。本页每个数字都来自那个文件,附有分母。我们不公布单个网站的结果,正如我们爬虫页面所承诺的。
跑数据的过程中我们发现并修复了自己 robots.txt 检查工具里的四个问题:两个会报告不存在的缺口,两个会让它在异常文件上卡住(一个规则里有 88 个通配符,一个有 12000 行 Disallow)。这里所有数字都用修复后的代码从存储的文件重新算过。
引用格式:
HitMind,“AI crawler access in the top 10,000 sites,” October 2026. https://hitmind.ai/research/ai-crawler-access-2026/
关于数据的问题,或者想要我们没有公布的细分:support@hitmind.ai。
常见问题(FAQ)
为什么给 GPTBot 单独写 Allow: / 反而会放行我封锁的页面?
robots.txt 按组匹配,爬虫只读点名自己的组,找不到才回退到 *。一旦为 GPTBot 建组,哪怕只写 Allow: /,它就不再读 User-agent: * 下的 Disallow,搜索、账户、API 等路径因此被放行。
robots.txt 里 AI 爬虫组意外放行了哪些路径?
研究显示,329 个有缺口的文件中,最常被放行的是站内搜索(47.1%)、登录和账户页(41.3%)、API(28.0%)、后台管理区(24.0%)、购物车和结账页(21.3%)。
怎么修复 robots.txt 里 AI 爬虫绕过封锁的问题?
两种修法:若该组只为欢迎爬虫、内容只有 Allow: /,直接删掉,让它回退到 *;若爬虫确实需要单独规则,就把 User-agent: * 下每条 Disallow 原样复制进它的组里。
版权与免责声明:本文仅用于信息分享与交流,不构成任何形式的法律、投资、医疗或其他专业建议,也不构成对任何结果的承诺或保证。
文中提及的商标、品牌、Logo、产品名称及相关图片/素材,其权利归各自合法权利人所有。本站内容可能基于公开资料整理,亦可能使用 AI 辅助生成或润色;我们尽力确保准确与合规,但不保证完整性、时效性与适用性,请读者自行甄别并以官方信息为准。
若本文内容或素材涉嫌侵权、隐私不当或存在错误,请相关权利人/当事人联系本站,我们将及时核实并采取删除、修正或下架等处理措施。也请勿在评论或联系信息中提交身份证号、手机号、住址等个人敏感信息。




