知识

robots.txt、AI退出选项与保留信号:2026年网络数据采集者应遵守的规则

robots.txt现在在欧盟具有法律效力,新的AI信号正在普及。每种信号意味着什么、AI爬虫遵守哪些信号,以及数据团队应如何应对。

James Meadow

James Meadow

2026年9月26日 · 3 分钟阅读

在robots.txt三十年的历史中,它大部分时间只是一种礼貌:一份纯文本文件,请求爬虫不要访问某些路径,除了良好礼仪之外别无支撑。这一点已经改变。它在2022年成为正式的互联网标准。在欧盟,机器可读的选择退出机制现在决定了文本与数据挖掘是否合法,而人工智能模型提供商负有法律义务去发现并遵守这些机制。与此同时,一批新的信号涌现出来,每一种都声称在表明某个网站允许人工智能系统对其内容做什么。

对于任何采集公开网络数据的人来说,尤其是那些数据最终会用于训练或输入人工智能模型的人来说,实际的问题很简单:哪些信号是你必须遵守的,它们意味着什么,以及你应该如何应对?本指南阐述了截至2026年9月的现状。

关键要点

  • robots.txt是一项IETF标准,即RFC 9309。它定义了精确的匹配规则,但明确指出其规则”并非一种访问授权形式”。
  • 在欧盟,商业性文本与数据挖掘的例外情形仅适用于权利人尚未”以适当方式,例如机器可读手段”就在线内容保留其权利的情况。德国法院已裁定,此类权利保留只有以机器可读形式作出才有效。
  • 自2025年8月2日起,通用人工智能模型提供商已被要求识别并遵守这些权利保留。委员会对其处以罚款的权力自2026年8月2日起适用。
  • 新的偏好信号已经出现,从Cloudflare的Content Signals到IETF起草中的AI偏好词汇表,但目前都还不是成熟的标准。即便这些信号不具约束力,也应予以记录。
  • 使用代理网络并不改变一个网站所要求的内容。相关义务附着于你所采集的内容以及你如何使用它,而不是附着于你采集数据所用的IP地址。

robots.txt现在是一项标准

RFC 9309于2022年9月发布,将一项事实上的惯例变成了拟议标准(Proposed Standard)。其中几项规则会让那些只是肉眼读过robots.txt文件的人感到意外:

  • 最具体的规则胜出。“必须使用找到的最具体匹配项”,以匹配规则的长度来衡量,当一条allow规则与一条disallow规则等效时,优先采用allow。文件中的顺序并不重要。
  • 代理匹配不区分大小写,如果爬虫没有匹配到的分组,则会回退到*分组。
  • **错误的含义各不相同。**如果robots.txt不可用,返回4xx响应,爬虫可以访问任何内容。如果由于服务器或网络错误而无法访问,爬虫”必须假定完全禁止访问”。
  • **缓存有时限。**爬虫”不应将缓存版本使用超过24小时,除非robots.txt文件无法访问”。

而其中最重要的限制是:“这些规则并非一种访问授权形式。“robots.txt并不能使内容变为私密,忽略它也不等同于闯入系统。在某些情境下赋予它分量的,是法律,而非协议本身。

为什么它在欧盟具有法律意义

欧盟的版权规则允许对合法可访问的内容进行文本与数据挖掘,但设有两种不同的例外情形。一种适用于从事科学研究的研究机构和文化遗产机构,没有选择退出机制。另一种适用于其他所有人,包括商业性挖掘,但仅在使用行为”尚未被权利人以适当方式明确保留,例如就公开在线提供的内容而言以机器可读手段保留”的情况下适用。

《人工智能法案》随后将这一规则适用于人工智能。通用人工智能模型的提供商必须”建立一项政策,以遵守欧盟关于版权及相关权利的法律,尤其是要识别并遵守”根据版权规则作出的”权利保留,包括通过最先进的技术手段”。这些义务自2025年8月2日起已经适用。委员会对通用人工智能提供商处以最高全球营业额3%罚款的权力,自2026年8月2日起适用,而在2025年8月之前投放市场的模型则有时间至2027年8月2日进行合规。

2025年7月发布的自愿性《通用人工智能行为准则》(General-Purpose AI Code of Practice)将这一点具体化。签署方承诺”使用能够读取并遵循按照《机器人排除协议》(robots.txt)所表达指令的网络爬虫”,该协议依据RFC 9309规定,并识别和遵守其他适当的机器可读协议。该准则中有两点值得注意的但书。遵守该准则”并不构成对欧盟版权及相关权利法律的合规”。而且该承诺不影响版权如何适用于”由第三方从互联网上抓取或爬取”并由签署方使用的内容。购买一个数据集并不能洗清适用于其数据来源的权利保留。

法院的相关裁决

判例法仍在形成之中,以下两项裁决展示了发展方向。

在德国,一名摄影师起诉非营利组织LAION,指控其在人工智能训练数据集中使用了他的图片。汉堡的法院驳回了该诉讼请求。在上诉中,高级地区法院(按照联邦最高法院总结的措辞)认为,对在线作品的权利保留只有”以机器可读形式”(in maschinenlesbarer Form)作出才有效,而原告未能证明其以自然语言写在使用条款中的权利保留,在相关时间点是机器可读的。联邦最高法院于2026年9月3日审理了进一步上诉,并已将裁决日期定于2026年12月17日。

在荷兰,阿姆斯特丹一家法院于2024年10月30日就报纸出版商与一家新闻聚合平台之间的纠纷作出裁决。该聚合平台辩称(而出版商方面对此并无异议),其robots.txt仅排除了特定的人工智能机器人,例如GPTBot、ChatGPT-User和CCBot。这不足以证明针对该聚合平台的使用行为,权利已以适当的机器可读方式被保留,因此该例外情形得以适用。

两项裁决都指向同一个方向:起决定性作用的是机器可读的信号,而针对特定机器人的信号可能并不构成对其他所有人的权利保留。两者都不是最终定论,并且都取决于具体事实。具体问题应咨询律师。

你会遇到的信号

信号位置状态表达的内容
robots.txt的Allow和Disallow/robots.txtIETF标准,RFC 9309指定的爬虫是否可以访问某个路径
Content Signalsrobots.txt中的行,例如Content-Signal: search=yes, ai-train=noCloudflare政策,2025年9月发布对搜索、AI输入和AI训练的偏好
AI偏好(Content-Usage)robots.txt行或HTTP头,例如Content-Usage: train-ai=nIETF工作组草案,尚未成为标准对AI训练、AI使用和搜索的偏好
TDMRep/.well-known/tdmrep.json、tdm-reservation HTTP头或HTML meta标签W3C社区组报告,并非W3C标准文本与数据挖掘权利是否被保留
服务条款网站的法律页面合同性质,在欧盟若为机器可读则可能构成权利保留网站条款所规定的一切内容

有两个细节值得注意。Cloudflare的Content Signals定义了search、ai-input(用于检索、依据事实作答以及生成答案)和ai-train,该政策声明”内容信号表达的是偏好;它们并非针对抓取的技术性反制措施”。它还声明,通过这些信号表达的限制,构成欧盟版权规则下明示的权利保留。与此同时,IETF草案确实尚未完成:当前的词汇表草案带有一条说明,称其内容”并未反映工作组的共识(DO NOT REFLECT CONSENSUS of the Working Group)“。预计相关标签还会发生变化。

主要人工智能爬虫如何处理这些信号

各运营方发布了各自的规则,而且这些规则有所不同,尤其是在代表用户发起抓取的情形下。

运营方代理按运营方说法,阻止它会产生什么效果
OpenAIGPTBot表明内容”不应被用于训练生成式人工智能基础模型”
OpenAIOAI-SearchBot该网站不会出现在ChatGPT搜索答案中,但仍可能作为导航链接出现
OpenAIChatGPT-User由用户发起;“robots.txt规则可能不适用”
GoogleGoogle-Extended一个robots.txt令牌,没有独立的用户代理;控制其用于训练和为Gemini模型提供依据事实作答的支持,并且”不会影响网站在Google搜索中的收录情况”
Google用户触发的抓取器”通常会忽略robots.txt规则”
AnthropicClaudeBot、Claude-User、Claude-SearchBot阻止ClaudeBot会将未来内容排除在训练之外;阻止Claude-User会阻止针对用户查询的检索;这些机器人遵守robots.txt和crawl-delay

对数据团队而言,这里的教训是:“阻止AI”并非一个单一开关。一个网站可以允许搜索引擎索引,同时拒绝用于训练;也可以拒绝用于训练,但在用户询问相关内容时仍被实时抓取。请针对你实际的使用方式来阅读相应信号。

有多少网站选择退出

选择退出的比例增长很快。Data Provenance Initiative发布于2024年7月的”Consent in Crisis”研究,对14,000个网络域名进行了审计,发现在短短一年内,robots.txt的限制使得”C4中所有token的约5%以上,或C4中维护最积极、最关键来源的28%以上,被完全限制”,并且”就服务条款方面的爬取限制而言,C4中现有整整45%受到限制”。不过,在网络头部,覆盖率并不均衡:Cloudflare在2025年7月报告称,“在排名前10,000的域名中,目前只有约37%拥有robots.txt文件”,而在这些文件中,GPTBot在7.8%的文件中被禁止访问。

负责任的数据采集者应该做什么

无论你是否训练模型,一项明确的政策都能保护你以及你所依赖的网站。

  1. **正确抓取并遵守robots.txt。**缓存时间不超过24小时,将服务器错误视为”禁止一切”,并按照RFC 9309的方式匹配规则。
  2. **明确你的目的。**索引、用于实时回答的检索以及模型训练是不同的用途,较新的信号对这些用途的处理方式也不同。确定你的采集服务于哪种用途,并针对该用途阅读相应信号。
  3. **将信号与数据一并记录。**将采集时适用的robots.txt规则、内容信号和TDMRep头,与每条记录一起存储。如果某个数据集日后被用于人工智能,这份记录就是你证明已识别相关权利保留的依据。它应当属于与获取角度和采集时间相同的溯源记录的一部分。
  4. **请律师评估服务条款。**这些条款在任何地方都可能具有合同效力,而在欧盟,如果以机器可读方式表达,它们可能被视为一种权利保留。
  5. **控制你的采集节奏。**遵守爬取限制,并在负载过高时放缓速度,这也是同样的良好诚意的一部分,详见速率限制与请求节流。

关于工具的一点提醒:Python内置的urllib.robotparser是按照文件中的顺序而非最具体匹配来应用规则的。给定Disallow: /shop后接Allow: /shop/public,它会将/shop/public/item报告为禁止访问;如果调换这两行的顺序,它又会报告为允许。而RFC 9309规定无论顺序如何都应为允许。以下是一个遵循该RFC、并记录其所发现的AI偏好行的小型检查器:

import re
import urllib.error
import urllib.request


def _groups(text):
    """Parse robots.txt into (agents, rules, extras) groups, following RFC 9309 grouping."""
    groups, agents, rules, extras, last = [], [], [], [], None
    for raw in text.splitlines():
        line = raw.split("#", 1)[0].strip()
        if ":" not in line:
            continue
        key, value = (p.strip() for p in line.split(":", 1))
        key = key.lower()
        if key == "user-agent":
            if last != "user-agent" and agents:
                groups.append((agents, rules, extras))
                agents, rules, extras = [], [], []
            agents.append(value.lower())
        elif key in ("allow", "disallow") and agents:
            rules.append((key, value))
        elif key in ("content-signal", "content-usage") and agents:
            extras.append((key, value))
        last = key
    if agents:
        groups.append((agents, rules, extras))
    return groups


def _pattern(path):
    regex = re.escape(path).replace(r"\*", ".*")
    return re.compile(regex[:-2] + "$" if regex.endswith(r"\$") else regex)


def check(robots_txt, user_agent, path):
    """Allow/disallow per RFC 9309 (most specific match wins, allow on ties), plus AI signals."""
    token = user_agent.lower()
    groups = _groups(robots_txt)
    matched = [g for g in groups if token in g[0]] or [g for g in groups if "*" in g[0]]
    rules = [r for g in matched for r in g[1]]
    extras = [e for g in matched for e in g[2]]
    best = None
    for kind, value in rules:
        if value and _pattern(value).match(path):
            length = len(value)
            if best is None or length > best[1] or (length == best[1] and kind == "allow"):
                best = (kind, length)
    return {"allowed": best is None or best[0] == "allow", "signals": extras}


def fetch_robots(origin, opener=None):
    """Fetch robots.txt. Per RFC 9309: 4xx means no rules; 5xx or network failure means disallow all."""
    opener = opener or urllib.request.build_opener()
    try:
        with opener.open(origin.rstrip("/") + "/robots.txt", timeout=30) as r:
            return r.read(512 * 1024).decode("utf-8", "replace")
    except urllib.error.HTTPError as e:
        return "" if 400 <= e.code < 500 else "User-agent: *\nDisallow: /"
    except OSError:
        return "User-agent: *\nDisallow: /"

它刻意保持精简。生产环境中的爬虫在训练用途相关时,还应检查TDMRep头以及/.well-known/tdmrep.json文件,并对其所依据的每一份robots.txt都保留一份带日期的副本。

代理在其中的作用

住宅代理改变的是请求看起来来自何处。它们并不改变一个网站对你的要求,也不改变你在版权法或某个网站服务条款下所负的义务。欧盟的规则附着于内容的使用行为,而《行为准则》明确将第三方采集行为纳入其适用范围。使用代理网络是为了以特定市场真实用户所见的方式查看网络、礼貌地分散负载、并进行诚实的测量,同时应用与你从自己的服务器发起请求时相同的robots.txt与权利保留检查。更全面的论述见用于人工智能数据采集的合乎道德的住宅代理。

结论

robots.txt已经成熟了。它是一项拥有精确规则的标准,而在欧盟,建立在其基础之上以及与之并存的机器可读权利保留,现在决定着文本与数据挖掘是否被允许,人工智能提供商负有直接的法律义务去遵守这些保留,并且自2026年8月起可对其处以罚款。针对搜索、AI输入和训练的新信号正在迅速扩散,尽管其背后的标准尚未完成。

对数据团队而言,无论这些细节最终如何落定,可行的政策都是一样的:正确解析robots.txt,明确你的采集服务于哪种用途,记录采集那一刻所适用的每一个信号,并将那些你并非严格受其约束的偏好视为值得保留的信息,而非可以丢弃的噪音。现在就这样做的团队,日后无需再费力重建这些记录。

来源与参考文献

本文为一般性信息,并非法律建议。关于你在各司法辖区的义务,请咨询律师。

准备好开始了吗?

试用 Shifter 住宅代理,205M+ 个 IP,195+ 个国家,低至 $0.10/GB。

立即开始