简答:文件本身不如围绕它的纪律重要。逐个点名代理、把理由写在规则旁边、用「取一次」而不是「读一遍」来验证、给整份文件标日期。外面多数 AI 爬虫的 robots.txt 四条全不满足。
为什么点名优于通配
每个主要厂商都刻意运行好几个代理——一个抓训练语料、一个做搜索索引、一个响应用户触发的抓取——就是为了让站长能分别决定。冲着厂商去的通配把这些决定压成一个,结果几乎从来不是任何人选择过的。最典型的结局是:在同一行里既拒绝了训练用途,也把自己从某个答案引擎里删掉了。
把理由写在规则旁边
这听起来像整理卫生,实际上是这里价值最高的习惯。一条没有解释的 Disallow 会穿过每一次迁移被永远复制下去,因为没人敢删一行自己看不懂的规则。两个词的上下文,能省掉十年的照搬。
# 训练语料:不提供。立场 2026-09 复核。
User-agent: GPTBot
Disallow: /
# 答案界面:放行。封掉这些会让我们从答案里消失。
User-agent: OAI-SearchBot
Allow: /
User-agent: PerplexityBot
Allow: /
# 后台界面:任何地方都不收录。
User-agent: *
Disallow: /admin/
Disallow: /api/
Sitemap: https://example.com/sitemap.xml用「取一次」验证
读 robots.txt 告诉你的是本意,只有实际请求才告诉你行为。CDN 规则和 WAF 经常对一切看起来像机器人的请求返回 403,而 robots.txt 读起来完全宽容——robots.txt 检查器会报告一切正常。用每个 User-Agent 各请求自己的页面一次,比对状态码和返回的 HTML,并且把「取不到」和「页面不存在」当成两回事。
两件不要做的事
- 不要编代理名字。有些厂商没有公布任何可以按名放行的名称。照着一个没人遵守的名字写规则,比留空更糟,因为你会以为自己放行了什么。
- 不要指望封住用户触发的抓取代理。其中几个被明确记载为通常不遵守 robots.txt,因为请求来自真人。如果确实需要拦,那是边缘规则层面的决定,而且有真实代价。
给文件标上日期。厂商文档会变,而一份建立在去年代理名之上的策略比没有策略更糟,因为它看起来是最新的。