AI公司将各自的爬虫派往网络各处,网站所有者则通过robots.txt作答,这是一个纯文本文件,用来告诉自动化访问者可以抓取哪些内容。每家主要AI公司都会公布其爬虫所响应的名称,因此网站可以屏蔽其中一个、部分或全部,同时仍然欢迎搜索引擎。
我们想要了解当前的情况。在2026年10月6日,我们请求了Tranco排名前10,000个域名中每一个的robots.txt,评估了针对16个AI爬虫和两个搜索爬虫的规则,并记录了每个网站在其首页上允许哪些爬虫访问。本指南分享了这些结果、我们编写的评估器,以及这些结果对任何收集网络数据的人意味着什么。
关键要点
- 在前10,000个域名中,有5,754个提供了我们能够读取的robots.txt。其中五分之一,即20.4%,至少屏蔽了一个AI爬虫访问其首页。
- 被屏蔽最多的爬虫是Common Crawl的CCBot(16.2%)、ByteDance的Bytespider(15.3%)、OpenAI的GPTBot(15.1%)和Anthropic的ClaudeBot(14.0%)。
- 搜索引擎几乎从不被屏蔽:Googlebot被屏蔽2.6%,Bingbot被屏蔽3.3%,其中大多数是屏蔽所有爬虫的网站。17.3%的网站在屏蔽至少一个AI爬虫的同时,仍允许两个搜索引擎进入。
- 许多网站将训练与回答区分开来。在屏蔽GPTBot的871个网站中,有345个仍然允许ChatGPT-User,后者会在有人向ChatGPT询问某个页面时抓取该页面。
- 网站规模越大,屏蔽的可能性越高:前1,000名网站中有29.5%至少屏蔽一个AI爬虫,而排名在5,001至10,000之间的网站这一比例为18.8%。
我们如何测量
对于每个域名,我们请求https://<domain>/robots.txt,如果失败则回退到www.主机,使用一个标明我们身份并链接到我们网站的User-Agent,以适度的速度进行。然后,我们针对首页路径/评估每个爬虫的规则。
我们遵循了robots.txt标准RFC 9309,而不是大多数库所采用的简化方式:
- 一个爬虫会使用所有点名它的组,仅当没有任何组点名它时,才回退到
*组。 - 最长匹配的规则胜出,若长度相同则
Allow胜出。 - 4xx响应表示没有规则;5xx响应表示一切都被禁止。
Python内置的解析器应用的是第一个匹配的规则而非最长的规则,这会误读常见的文件,例如Disallow: /后跟Allow: /$,因此我们编写了自己的评估器,并针对该标准中的用例进行了测试。当某个爬虫不得抓取首页时,我们将其计为“被屏蔽”,并分别记录该文件是点名了该爬虫,还是仅通过*将其屏蔽。
在这10,000个域名中,有5,877个返回了可解析的robots.txt,其中5,754个是不同的网站;其余大多是API主机、内容分发网络以及其他不提供网站服务的域名。460个以HTML页面而非robots文件作答,根据标准,这被视为没有规则。
我们的发现
| 爬虫 | 运营方 | 用途 | 首页被屏蔽比例 | 文件中被点名比例 |
|---|---|---|---|---|
| CCBot | Common Crawl | 被广泛用于AI训练的开放网络存档 | 16.2% | 15.2% |
| Bytespider | ByteDance | 为AI模型进行抓取 | 15.3% | 13.1% |
| GPTBot | OpenAI | 训练 | 15.1% | 17.7% |
| ClaudeBot | Anthropic | 训练 | 14.0% | 15.1% |
| meta-externalagent | Meta | 训练及AI产品 | 12.5% | 10.8% |
| Google-Extended | 训练及为Gemini提供支撑,与搜索分开 | 12.3% | 13.5% | |
| anthropic-ai | Anthropic | 较早的Anthropic标识 | 11.7% | 9.9% |
| Applebot-Extended | Apple | 训练,与Applebot分开 | 11.7% | 10.1% |
| Amazonbot | Amazon | 为Amazon服务进行抓取 | 11.7% | 10.3% |
| cohere-ai | Cohere | AI产品 | 11.7% | 9.2% |
| PerplexityBot | Perplexity | 用于回答的搜索索引 | 10.8% | 12.7% |
| ChatGPT-User | OpenAI | 在用户提问时抓取页面 | 9.4% | 11.7% |
| Perplexity-User | Perplexity | 在用户提问时抓取页面 | 7.7% | 6.2% |
| OAI-SearchBot | OpenAI | ChatGPT中的搜索结果 | 7.5% | 9.9% |
| Claude-User | Anthropic | 在用户提问时抓取页面 | 7.3% | 6.1% |
| Claude-SearchBot | Anthropic | Claude中的搜索结果 | 7.2% | 6.1% |
| Bingbot | Microsoft | 网络搜索 | 3.3% | 7.4% |
| Googlebot | 网络搜索 | 2.6% | 9.1% |
百分比均基于5,754个网站。“被点名”一列统计的是通过名称明确指向该爬虫的文件,无论是屏蔽还是允许,这就是为什么两列数字不同:有些网站点名某个爬虫只是为了欢迎它,而有153个网站通过*屏蔽了所有爬虫,却没有点名任何一个。
三种模式
AI爬虫被屏蔽,搜索引擎则不然。 17.3%的网站在允许Googlebot和Bingbot访问首页的同时,至少屏蔽了一个AI爬虫。只有0.2%的网站按名称屏蔽了Googlebot。网站所有者正在清楚地划分界限:是否被搜索引擎收录,与是否被收集用于AI训练,是两回事。
训练比回答更常被屏蔽。 用于收集训练数据的爬虫被屏蔽的频率明显高于那些因有人提问而抓取页面的爬虫:GPTBot在15.1%的网站上被屏蔽,而ChatGPT-User只有9.4%;ClaudeBot被屏蔽14.0%,而Claude-User只有7.3%。在屏蔽GPTBot的871个网站中,有345个仍允许ChatGPT-User;在屏蔽ClaudeBot的806个网站中,有390个仍允许Claude-User。换言之,许多网站希望出现在AI的回答中,却不愿为训练做贡献。
屏蔽率随规模上升。 在前1,000名网站中,29.5%屏蔽了至少一个AI爬虫,21.0%屏蔽了GPTBot。而在排名5,001至10,000的网站中,这两个数字分别降至18.8%和13.9%。大型出版商和平台的内容对训练而言最有价值,它们恰恰是最有可能选择退出的一方。
只有5.2%的网站在允许Googlebot的同时,屏蔽了五个最主要的AI爬虫(GPTBot、ClaudeBot、Google-Extended、CCBot和PerplexityBot)的全部。大多数退出都是有选择性的:一个网站会屏蔽某些公司而不屏蔽其他公司,或者屏蔽训练而允许回答。
代码
下面的模块解析robots.txt文件,并依照RFC 9309的规则对任意爬虫进行评估。它不依赖任何外部库。
import re
from urllib.parse import quote, unquote
def parse_groups(text):
"""Split robots.txt into groups: a list of (user-agent tokens, [(allow, path)])."""
groups, agents, rules, in_rules = [], [], [], False
for raw in text.splitlines():
line = raw.split("#", 1)[0].strip()
if ":" not in line:
continue
key, value = (part.strip() for part in line.split(":", 1))
key = key.lower()
if key == "user-agent":
if in_rules: # a user-agent line after rules starts a new group
groups.append((agents, rules))
agents, rules, in_rules = [], [], False
agents.append(value.lower())
elif key in ("allow", "disallow") and agents:
in_rules = True
if value: # an empty Disallow allows everything
rules.append((key == "allow", value))
if agents:
groups.append((agents, rules))
return groups
def rules_for(groups, product_token):
"""RFC 9309: use every group naming the crawler's product token; otherwise the '*' groups."""
token = product_token.lower()
named = [r for agents, rules in groups for r in rules if token in agents]
if any(token in agents for agents, _ in groups):
return named
return [r for agents, rules in groups for r in rules if "*" in agents]
def _pattern(path):
regex = "".join(".*" if ch == "*" else re.escape(ch) for ch in path.rstrip("$"))
return re.compile(regex + ("$" if path.endswith("$") else ""))
def allowed(groups, product_token, path="/"):
"""Longest matching rule wins; Allow wins a tie (RFC 9309, section 2.2.2)."""
target = quote(unquote(path), safe="/?=&*$%:@!,;~+")
best_len, verdict = -1, True
for allow, rule in rules_for(groups, product_token):
rule = quote(unquote(rule), safe="/?=&*$%:@!,;~+")
if _pattern(rule).match(target):
length = len(rule)
if length > best_len or (length == best_len and allow):
best_len, verdict = length, allow
return verdict
def names(groups, product_token):
"""Does the file address this crawler by name, rather than only through '*'?"""
return any(product_token.lower() in agents for agents, _ in groups)
以及检查一个网站,这里以我们自己的为例:
import requests
from robots import parse_groups, allowed, names
text = requests.get("https://shifter.io/robots.txt", timeout=15,
headers={"User-Agent": "ExampleSurvey/1.0 (+https://example.com/bot)"}).text
groups = parse_groups(text)
for crawler in ["GPTBot", "ClaudeBot", "Google-Extended", "CCBot", "Googlebot"]:
print(f"{crawler:16} homepage allowed: {allowed(groups, crawler, '/')} named: {names(groups, crawler)}")
我们的文件点名了主要的AI爬虫并明确允许它们,因此这五个都返回允许,而Googlebot则是通过*被允许的。我们针对16个用例测试了该评估器,包括最长匹配优先、平局规则、通配符和路径结尾模式、合并的组以及空文件。
这对数据收集意味着什么
- 针对每个爬虫分别读取robots.txt,而不仅仅是针对
*。 一个通过*欢迎所有人的网站,仍可能屏蔽某个被点名的爬虫,而且网络上这样做的网站比例正在增长。 - 诚实地表明你的收集者身份。 只有当爬虫说明自己是谁时,robots规则才能发挥作用。如果你以自己的名义进行收集,请检查针对该名称以及你收集目的所适用的规则。
- 尊重网站所划分的界限。 许多网站现在将搜索、训练与按需抓取区分开来。收集训练数据的采集者应将对训练爬虫的屏蔽视为同样适用于自己,即便自己的名称未被列出。
- 定期重新检查。 退出选项会随网站更新文件而变化;六个月前建立的名单已经过时。
我们关于robots.txt、AI退出选项与保留信号的指南涵盖了网站使用的其他信号以及欧洲的法律背景,网络抓取最佳实践则涵盖了如何在不损害所访问网站的情况下进行收集。需要在抓取时遵守退出选项的训练数据流程,详见构建大规模训练数据集。
测量的局限性
- 仅限首页。 我们评估的路径是
/。许多网站会屏蔽AI爬虫访问特定板块,例如文章或搜索页面,而首页保持开放,因此在网站某处限制AI爬虫的比例要高于这些数字所显示的。 - 仅限robots.txt。 网站还通过HTTP头、meta标签和服务条款发出信号,并通过机器人管理手段加以执行。一个在robots.txt中未屏蔽某爬虫的网站,仍可能在网络层面屏蔽它。
- 单一快照。 这些是2026年10月6日从一个网络所获取的文件状态。
- 仅限顶级网站。 前10,000个域名并非整个网络;较小的网站可能表现不同。
结论
如今,五分之一的顶级网站会告诉至少一个AI爬虫不要访问其首页,而几乎所有网站仍然欢迎搜索引擎。退出选项是有选择性的:训练用爬虫被屏蔽的频率高于那些为用户抓取页面的爬虫,而最大的网站屏蔽得最多。
对于任何收集网络数据的人来说,实际的经验教训是:针对具体的爬虫和用途来读取robots.txt,使用遵循标准的评估器,并随着网络不断重新划定这些界限而定期复查。
来源与参考资料
- IETF,RFC 9309:机器人排除协议,2022年9月。
- Tranco,列表 Q2K34。
- 前10,000个域名的robots.txt文件,由Shifter于2026年10月6日使用上述代码请求获取。