很多网站把这个加到了robotstxt在过去两年的某个时候:
User-agent: GPTBot
Disallow: /
User-agent: ClaudeBot
Disallow: /
User-agent: *
Disallow: /api/
如果您不想让您的内容用于训练模型,这是一个合理的选择。https://www.iissbbs.com但许多团队也有CDN规则、WAF设置或更进一步的一揽子“阻止AI机器人”开关。没有任何人决定,该网站也从人工智能中消失搜索:ChatGPT搜索,困惑,克劳德的网页搜索。
人工智能公司现在运行单独的机器人,用于训练、搜索索引和在用户要求时获取页面。你可以区别对待每一个。大多数网站没有,因为名字不明显。
哪个机器人做什么
来自每个公司自己的文档:
公司 机器人程序 这是干什么用的 如果你挡住它
OpenAI公司 GPTBot 培训用数据 内容不应该被用来训练OpenAI的模型
OpenAI公司 OAI-SearchBot ChatGPT搜索 不显示在ChatGPT搜索答案中,但导航链接仍然会出现
OpenAI公司 ChatGPT-User 当用户询问时获取页面 OpenAI表示,https://www.ycsjb.com因为这些是用户发起的robotstxt规则可能不适用
人类的 ClaudeBot 培训用数据 培训中排除的未来内容
人类的 Claude-SearchBot 搜索索引 可能会降低您在Claude搜索结果中的可见性
人类的 Claude-User 当用户询问时获取页面 Claude无法为该用户检索您的页面
谷歌 Google-Extended 双子座培训和基础 谷歌说是的不影响谷歌搜索的收录或排名
困惑 PerplexityBot 困惑的搜索索引 未出现在困惑搜索结果中
有两件事很突出。
谷歌的人工智能概述不在名单上。它们是由谷歌机器人抓取的普通搜索索引构建的。Google-Extended控制双子座的训练和基础,而不是你是否出现在人工智能概述中。阻止Googlebot进入人工智能概述会让你完全退出搜索。
训练和搜索是分开的开关。OpenAI的文档写得很清楚:一个站点可以允许OAI-SearchBot在禁止时出现在搜索结果中GPTBot让它的内容远离训练。
一个robotstxt,让你在人工智能搜索中,但在训练之外
如果这就是你想要的交换:
# Search and user-requested fetches: allowed
User-agent: OAI-SearchBot
User-agent: ChatGPT-User
User-agent: Claude-SearchBot
User-agent: Claude-User
User-agent: PerplexityBot
Disallow: /api/
Disallow: /admin/
Allow: /
# Model training: blocked
User-agent: GPTBot
User-agent: ClaudeBot
User-agent: Google-Extended
Disallow: /
# Everyone else
User-agent: *
Disallow: /api/
Disallow: /admin/
Sitemap: /sitemapxml
一个容易犯的错误是:爬虫只跟随与其名称最匹配的特定组忽略了User-agent: *完完全全。所以你为每个人阻挡的任何路径(/api/, /admin/)必须在每个命名组中重复,如上所述。否则,命名的机器人可以访问它。
是否屏蔽培训是商业决策,而不是技术决策。一些公司希望他们的文档包含训练数据,以便模型能够正确描述他们的产品。关键是要有意识地做出选择。
用脚本测试它,而不是通过阅读它
用眼睛阅读robotstxt就是上面的错误如何在代码审查中幸存下来的。Python的标准库可以解析它:
# check_robotspy
from urllibrobotparser import RobotFileParser
SITE = ""
BOTS = [
"GPTBot", "OAI-SearchBot", "ChatGPT-User",
"ClaudeBot", "Claude-SearchBot", "Claude-User",
"Google-Extended", "PerplexityBot", "Googlebot", "Bingbot",
]
PATHS = ["/", "/blog/", "/pricing", "/api/health", "/admin/"]
rp = RobotFileParser(f"{SITE}/robotstxt")
rpread()
width = max(map(len, BOTS))
print(" " * width, *[pljust(12) for p in PATHS])
for bot in BOTS:
row = ["allow"ljust(12) if rpcan_fetch(bot, SITE + p) else "BLOCK"ljust(12) for p in PATHS]
print(botljust(width), *row)
输出是一个你可以在几秒钟内读懂的网格:
/ /blog/ /pricing /api/health /admin/
GPTBot BLOCK BLOCK BLOCK BLOCK BLOCK
OAI-SearchBot allow allow allow BLOCK BLOCK
将它放在CI中,与预期的网格一起提交,因此对robotstxt翻转单元会导致构建失败。
(urllibrobotparser遵循最初的robotstxt规则。它应用第一个匹配的规则,而Google应用最具体的规则,这就是为什么Disallow上面的线在前面Allow: /:然后文件双向读取相同的内容。它也不支持*和$路径中的通配符,所以保持文件简单或单独测试通配符规则。)
然后检查robotstxt看不到的图层
robotstxt是一个请求。你的CDN、WAF或bot管理设置才是真正的答案。在查询robotstxt之前,请求可能会被阻塞。检查两件事。
1服务器返回给每个用户代理的内容:
for ua in "OAI-SearchBot/14" "Claude-SearchBot" "PerplexityBot" "GPTBot/14"; do
code=$(curl -s -o /dev/null -w "%{http_code}" -A "Mozilla/50 (compatible; $ua)" /blog/)
echo "$ua -> $code"
done
A 403或者挑战页面意味着robotstxt之外的东西在决定。这只测试基于用户代理头的规则。一些机器人管理产品也验证机器人的IP范围,这是一个欺骗curl无法繁殖。如果你需要允许的话,OpenAI会公布爬虫的IP范围。
2机器人是否真的找到了你。你的访问日志是事实:
grep -Eo "OAI-SearchBot|ChatGPT-User|GPTBot|Claude-SearchBot|Claude-User|ClaudeBot|PerplexityBot" accesslog \
| sort | uniq -c | sort -rn
如果你允许的搜索机器人从来没有出现,或者只得到403s,区块在robotstxt的上游。
这没有做到的是
允许搜索机器人让你合适的待引。它不会让任何人引用你。这取决于你的页面是否回答了人们提出的问题,具体细节是摘要无法替代的。那是内容问题,不是配置问题。但是首先修复配置是值得的,因为如果爬虫得到403,再多好的内容也没有用。
我们写道,如果你试图找出哪些机构或工具值得为此付费选择地理代理的指南,包括那些声称持怀疑态度的。