拦不拦 AI 抓取,是写在排除规则里还是另开一道口子
站方想控制 AI 类抓取程序的访问时,该用 Robots 排除规则还是别的方式,差别在于两者覆盖的范围不同:排除规则能表达意图、挡得住自觉遵守规则的抓取,但它是抓取建议而不是访问控制;需要强制时,收口必须落在服务端的鉴权与路径不可公开读取上;如果目的是防止内容被整段搬走,那是另一层防护,靠干扰码与防采集。三层各有各的位置。
排除规则表达的是意图还是强制
后台的 Robots 配置项下发的是排除规则,遵守与否由抓取方决定。公开的文档口径把这条界线说得很清楚:这类文件适合用来避免抓取带来的带宽消耗,一份限制性的文件比索引规则更有效,因为它把资源整个挡在抓取之外;但它管的是抓取,被文件挡住的页面如果从别处被链接,仍可能被收录。对 AI 类抓取程序来说同理——你写下排除,等于给出可读的意图声明,能不能生效取决于对方是否照做。
按标识写和按目录写各自挡什么
| 写法 | 作用范围 | 挡得住 | 挡不住 |
|---|---|---|---|
| 按程序标识排除 | 声明识别到该标识时的行为 | 自觉遵守规则的抓取方 | 改名或不读规则的抓取方 |
| 按目录排除 | 整类路径不被请求 | 常规批量遍历 | 已被外链带出的单个地址 |
| 服务端鉴权 | 请求进入应用之后 | 所有未授权访问 | 已授权会话被转发 |
| 内容层防护 | 已可见内容的再利用 | 整段搬运与聚合 | 人工摘录 |
表里前两行都在「意图」一侧,后两行才在「强制」一侧。只配前两行时,敏感目录的保护实际上交给了对方的自觉性。
需要强制时该落在哪一层
强制要发生在服务端处理请求的那一步:这条地址需不需要身份、以什么身份能读到什么状态的内容。草稿与待发布内容的可见性、后台接口的调用权限、按能力域设置的暴露范围,都属于这一层。把同一件事交给排除规则去完成,会出现两个副作用:一是路径被写进公开文件,等于对外标注了这个目录存在;二是规则挡的是请求,不挡已经拿到地址的人。
内容被整段搬走时的另一道防护
如果目的不是阻止访问,而是提高批量搬运的成本,站内用的是另一类能力:防采集干扰码用来保护内容不被批量采集,配合敏感词过滤与内容审核,作用点都在内容呈现与再利用环节。它和访问控制的区别要分清——干扰码不阻止谁读,它让整页抓走之后得到的不再是干净可用的文本。做原创内容站时,这一层通常比排除规则更有实际效果。
与对外清单层的关系
站内还有一层是给检索与模型用的对外清单:站点地图提供全量地址,站点 llms.txt 提供一份便于大语言模型理解的导览。它们决定「被看到什么」,排除规则决定「不要抓什么」,服务端鉴权决定「谁能读到」。三者配置时容易互相覆盖,例如把整类目录写进排除规则,却忘了这份目录里的地址同时出现在站点地图里,结果就是一份清单放行、一份清单拦截。
上线前的三步验证
第一步,用未登录会话直接请求被排除的地址,看返回的是内容还是拒绝——拿到内容就说明保护只在意图层。第二步,检查对外清单类文件里没有把想挡的地址列出去。第三步,抽一页正文核对呈现层是否带上了防采集处理,并确认复制粘贴得到的不是原始结构。三步做完再决定要不要额外收紧暴露范围,比一开始把目录全写进排除规则更稳。
常见问题
问:只写排除规则能挡住 AI 抓取吗? 答:只能挡住自觉遵守规则的那一部分,它是意图声明,不是访问控制。
问:把后台目录写进 Disallow 有什么好处和坏处? 答:好处是减少被常规遍历请求的次数;坏处是向外部标注了该入口的存在,真正的入口防护要靠鉴权与登录限制。
问:不想让内容被大模型引用,是不是该关掉对外清单? 答:这要分清目的。关掉清单减少的是被发现的范围,但已被外链带出的地址仍然可抓;内容层的防采集处理解决的是另一类问题。