robots.txtはその30年に及ぶ歴史の大部分において、礼儀作法でしかなかった。クローラーに対して特定のパスへの立ち入りを控えるよう求める、ただのプレーンテキストファイルであり、その背後にあるのは良識だけだった。だが状況は変わった。2022年にrobots.txtは正式なインターネット標準となった。EUでは、機械可読なオプトアウトが、テキストおよびデータマイニングが合法かどうかを左右するようになっており、AIモデルの提供者にはそれらを見つけて尊重する法的義務がある。同時に、サイトがAIシステムによるコンテンツの利用について何を許可しているかを示すと称する新しいシグナルが次々と登場している。
公開されているウェブデータを収集する立場の人、とりわけそのデータがAIモデルの学習や入力に使われることになる人にとって、実務上の問いはシンプルだ。これらのシグナルのうちどれを読まなければならないのか、それぞれが何を意味するのか、そしてそれに対して何をすべきなのか。本ガイドでは、2026年9月時点の現状を整理する。
要点
- robots.txtはIETF標準であり、RFC 9309として定められている。厳密なマッチングルールを定義しているが、そのルールは「アクセス許可の一形態ではない」と明記されている。
- EUでは、商業目的のテキストおよびデータマイニングの例外は、権利者がオンラインコンテンツについて「機械可読な手段など、適切な方法で」権利を留保していない場合にのみ適用される。ドイツの裁判所は、そうした留保が機械可読な形式である場合にのみ有効であるとの判断を示している。
- 汎用AIモデルの提供者は、2025年8月2日以降、そうした留保を特定し遵守することが義務づけられている。欧州委員会がそれらに罰金を科す権限は2026年8月2日から発効する。
- CloudflareのContent SignalsからIETFのAI preferencesの草案語彙まで、新しいプリファレンスシグナルが存在するが、いずれもまだ完成した標準ではない。拘束力がない場合でも記録しておくべきである。
- プロキシネットワークを使用しても、サイトが求めている内容自体は変わらない。義務は、データを取得したIPアドレスにではなく、何を収集し、それをどう利用するかに紐づく。
robots.txtは今や標準である
2022年9月に公開されたRFC 9309は、事実上の慣習をProposed Standardへと変えた。robots.txtファイルを目視で読んだだけの人にとって驚くようなルールがいくつかある。
- 最も具体的なルールが優先される。 「見つかった最も具体的な一致を使用しなければならない(MUST)」とされ、これは一致するルールの長さで測られ、allowルールとdisallowルールが同等の場合はallowが優先される。ファイル内の順序は関係ない。
- エージェントのマッチングは大文字小文字を区別しない。一致するグループがないクローラーは
*グループにフォールバックする。 - エラーの意味は状況によって異なる。 robots.txtが4xxレスポンスで利用できない場合、クローラーは何にでもアクセスしてよい。サーバーエラーやネットワークエラーで到達できない場合、クローラーは「完全な禁止を前提としなければならない(MUST)」。
- キャッシュには上限がある。 クローラーは「robots.txtファイルに到達できない場合を除き、24時間を超えてキャッシュされたバージョンを使用すべきではない(SHOULD NOT)」。
そして最も重要な限界がこれだ。「これらのルールはアクセス許可の一形態ではない。」robots.txtはコンテンツを非公開にするものではなく、それを無視することはシステムへの不正侵入と同じではない。一部の文脈でrobots.txtに重みを与えているのは法律であって、プロトコルそのものではない。
EUにおいて法的に重要な理由
EUの著作権規則は、適法にアクセス可能なコンテンツに対するテキストおよびデータマイニングを認めており、2つの異なる例外がある。一つは、科学研究を行う研究機関および文化遺産機関を対象とし、オプトアウトは存在しない。もう一つは商業目的のマイニングを含むそれ以外すべてを対象とするが、これは「オンラインで公衆に利用可能とされたコンテンツの場合は機械可読な手段など、適切な方法で権利者によって明示的に留保されていない」場合にのみ適用される。
そしてAI Actはこのルールをさらに具体的にする。汎用AIモデルの提供者は、「著作権および関連する権利に関する連合法を遵守するための方針を整備し、特に、最先端の技術を含む手段によって、著作権規則に基づいて行われた権利の留保を特定し、遵守すること」が求められる。これらの義務は2025年8月2日以降適用されている。汎用AI提供者に対する欧州委員会の罰金権限(全世界売上高の最大3%)は2026年8月2日から適用され、2025年8月より前に市場投入されたモデルについては2027年8月2日までの遵守猶予がある。
2025年7月に公開された任意の遵守枠組みであるGeneral-Purpose AI Code of Practiceは、これを具体化している。署名者は「RFC 9309で規定されたRobot Exclusion Protocol(robots.txt)に沿って表現された指示を読み取り、それに従うウェブクローラーを使用する」ことを約束し、その他の適切な機械可読プロトコルについても特定し遵守することを約束する。このCode of Practiceには注目すべき2つの但し書きがある。遵守しても「著作権および関連する権利に関する連合法の遵守を構成するものではない」こと。そして、この約束は「サードパーティによってインターネットからスクレイピングまたはクロールされた」コンテンツを署名者が利用する場合に、著作権がどのように適用されるかには影響しないこと。データセットを購入したからといって、その情報源に適用されていた権利留保が無効になるわけではない。
裁判所の判断
判例はまだ形成途上だが、2つの判決がその方向性を示している。
ドイツでは、ある写真家が非営利団体LAIONを、AI学習データセットにおける自身の画像の利用を理由に提訴した。ハンブルクの裁判所はこの請求を棄却した。控訴審において高等地方裁判所は、連邦通常裁判所の要約の言葉を借りれば、オンライン作品に対する権利留保は「maschinenlesbarer Form」、すなわち機械可読な形式である場合にのみ有効であると判断し、原告が利用規約に自然言語で記載した留保が、当該時点において機械可読であったことを立証していないとした。連邦通常裁判所は2026年9月3日に上告審の審理を行い、判決を2026年12月17日に予定している。
オランダでは、アムステルダムの裁判所が2024年10月30日、新聞発行者とニュースアグリゲーターとの間の紛争について判決を下した。アグリゲーター側は、両者間で争いのない事実として、発行者のrobots.txtがGPTBot、ChatGPT-User、CCBotなど特定のAIボットのみを除外していたと主張した。これは、アグリゲーターの利用に対して適切な機械可読な方法で権利が留保されていたことを立証するには不十分であり、そのため例外規定が適用された。
いずれも同じ方向を示している。重視されるのは機械可読なシグナルであり、特定のボットのみを対象としたシグナルは、それ以外のすべての者に対する権利留保として機能しない可能性があるということだ。どちらも最終的な指針ではなく、いずれも事実関係に依存する。個別の疑問については弁護士に相談してほしい。
遭遇するシグナルの一覧
| シグナル | 存在場所 | ステータス | 表現する内容 |
|---|---|---|---|
| robots.txtのAllowとDisallow | /robots.txt | IETF標準、RFC 9309 | 指定されたクローラーが特定のパスにアクセスしてよいか |
| Content Signals | robots.txt内の行、例:Content-Signal: search=yes, ai-train=no | Cloudflareのポリシー、2025年9月公開 | 検索、AI入力、AI学習に関するプリファレンス |
| AI preferences(Content-Usage) | robots.txtの行またはHTTPヘッダー、例:Content-Usage: train-ai=n | IETFワーキンググループの草案、まだ標準ではない | AI学習、AI利用、検索に関するプリファレンス |
| TDMRep | /.well-known/tdmrep.json、tdm-reservation HTTPヘッダーまたはHTMLメタタグ | W3C Community Groupのレポート、W3C標準ではない | テキストおよびデータマイニング権が留保されているかどうか |
| 利用規約 | サイトの法的ページ | 契約であり、EUでは機械可読であれば留保として扱われる可能性がある | サイトの規約が定める内容次第 |
2点重要な点がある。CloudflareのContent Signalsはsearch、ai-input(検索拡張生成における取得、根拠付け、生成回答向け)、ai-trainを定義しており、そのポリシーは「content signalsはプリファレンスを表現するものであり、スクレイピングに対する技術的な対抗措置ではない」と述べている。またこのポリシーは、シグナルを通じて表現された制限が、EUの著作権規則の下での明示的な権利留保に相当することを宣言している。一方でIETFの草案は文字通り未完成であり、現行の語彙草案には「本内容はワーキンググループの合意を反映していない(DO NOT REFLECT CONSENSUS of the Working Group)」との注記が付されている。ラベルは今後変わることを見込んでおくべきだ。
主要なAIクローラーがこれらをどう扱っているか
各運営者は独自のルールを公開しており、それらは互いに異なる。とりわけ、ユーザーの代理として行われる取得に関しては差が大きい。
| 運営者 | エージェント | ブロックした場合の効果(運営者による説明) |
|---|---|---|
| OpenAI | GPTBot | コンテンツが「生成AI基盤モデルの学習に使用されるべきではない」ことを示す |
| OpenAI | OAI-SearchBot | サイトはChatGPT検索の回答には表示されなくなるが、ナビゲーション用リンクとしては引き続き表示され得る |
| OpenAI | ChatGPT-User | ユーザー起点のもの。「robots.txtのルールが適用されない場合がある」 |
| Google-Extended | 個別のユーザーエージェントを持たないrobots.txtトークン。モデルの学習およびGeminiモデルのグラウンディングへの利用を制御し、「サイトのGoogle検索への掲載には影響しない」 | |
| ユーザー起点のフェッチャー | 「一般にrobots.txtのルールを無視する」 | |
| Anthropic | ClaudeBot、Claude-User、Claude-SearchBot | ClaudeBotをブロックすると今後のコンテンツが学習から除外される。Claude-Userをブロックするとユーザーの問い合わせに対する取得が防止される。これらのボットはrobots.txtとcrawl-delayを尊重する |
データチームにとっての教訓は、「AIをブロックする」ことが単一のスイッチではないということだ。あるサイトは検索インデックスは許可しつつ学習は拒否することもできるし、学習を拒否しつつユーザーの質問に応じてライブで取得されることを許容することもできる。自分たちが実際に行う利用に対応するシグナルを読み取る必要がある。
オプトアウトしているサイトの数
オプトアウトは急速に増加している。2024年7月に公開されたData Provenance Initiativeの「Consent in Crisis」調査は、14,000のウェブドメインを監査したもので、1年間でrobots.txtによる制限が「C4内の全トークンの5%以上、あるいはC4において最も活発に維持されている重要なソースの28%以上を完全に制限した」こと、そして「利用規約によるクロール制限については、C4の実に45%が現在制限されている」ことを明らかにした。ただし、ウェブの上位層におけるカバレッジは均一ではない。Cloudflareは2025年7月、「上位10,000ドメインのうちrobots.txtファイルを持つのは約37%に過ぎない」こと、そしてそのうち7.8%でGPTBotが禁止されていたことを報告している。
責任あるデータ収集者が取るべき対応
モデルを学習するかどうかにかかわらず、明確な方針を持つことは、自分自身と、依拠しているサイトの双方を守る。
- robots.txtを適切に取得し遵守する。 キャッシュは24時間以内とし、サーバーエラーは「すべて禁止」として扱い、RFC 9309の方式でルールをマッチングする。
- 自分の目的を把握する。 インデックス作成、ライブ回答のための取得、モデル学習はそれぞれ異なる利用形態であり、新しいシグナルはそれらを区別して扱う。自分の収集がどの利用に当たるかを判断し、その利用に対応するシグナルを読む。
- シグナルをデータとともに記録する。 収集時点で適用されていたrobots.txtのルール、content signals、TDMRepヘッダーを各レコードとともに保存する。データセットが後にAI用途に使われる場合、この記録が権利留保を特定していたことを示す根拠になる。これは取得視点と取得時刻と同じ来歴記録の一部を成すべきものだ。
- 利用規約は弁護士とともに評価する。 利用規約は契約としてどこでも意味を持ちうるし、EUでは機械可読な形で表現されていれば留保とみなされる可能性がある。
- 収集速度を調整する。 クロール制限を尊重し、負荷がかかった場合に取得を控えることは、レート制限とリクエストスロットリングで扱った通り、同じ良識の一部である。
ツールに関する注意点も一つ挙げておく。Pythonの組み込みurllib.robotparserは、最も具体的な一致ではなくファイル内の順序でルールを適用する。Disallow: /shopの後にAllow: /shop/publicが続く場合、/shop/public/itemは禁止されていると報告される。2行の順序を入れ替えると許可されていると報告される。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について日付付きの控えを保管しておくべきだ。
プロキシの位置づけ
レジデンシャルプロキシは、リクエストがどこから来ているように見えるかを変える。だが、サイトが求めていることそのものを変えるわけではなく、著作権法やサイトの利用規約の下での義務を変えることもない。EUの規則はコンテンツの利用に紐づくものであり、Code of Practiceはサードパーティによる収集も明示的に対象範囲に含めている。プロキシネットワークは、特定の市場における実際のユーザーがウェブをどう見ているかを確認するため、負荷を礼儀正しく分散させるため、そして正直に測定するために使い、自分自身のサーバーから行う場合と同じrobots.txtおよび権利留保のチェックを適用すべきである。より広い議論はAIデータ収集における倫理的なレジデンシャルプロキシで扱っている。
結論
robots.txtは成熟した。今や厳密なルールを備えた標準であり、EUでは、それに基づき、あるいはそれと並行して構築された機械可読な権利留保が、テキストおよびデータマイニングが許可されるかどうかを左右している。AI提供者にはそれらを尊重する直接的な法的義務があり、2026年8月からは罰金も科され得る。検索、AI入力、学習に関する新しいシグナルは急速に広がりつつあるが、その背後にある標準はまだ未完成である。
データチームにとって実行可能な方針は、細部がどう決着するかにかかわらず変わらない。robots.txtを正しく解析すること、自分の収集がどの利用に該当するかを把握すること、収集の瞬間に適用されていたあらゆるシグナルを記録すること、そして厳密には拘束されないプリファレンスであっても、捨ててよい雑音ではなく保存する価値のある情報として扱うことだ。これを今のうちに行っておくチームは、後になって再構築する必要がなくなる。
出典と参考文献
- IETF、RFC 9309: Robots Exclusion Protocol、2022年9月。
- Directive (EU) 2019/790、デジタル単一市場における著作権および関連する権利に関する指令。テキストおよびデータマイニングの例外規定。
- Regulation (EU) 2024/1689、AI Act。汎用AIモデル提供者の義務および適用日。
- 欧州委員会、General-Purpose AI Code of Practice、2025年7月10日公開、著作権に関する章。
- Bundesgerichtshof、press release 085/2026 on I ZR 281/25、およびhearing and decision dates。
- Rechtbank Amsterdam、2024年10月30日判決、ECLI:NL:RBAMS:2024:6563。
- IETF AI Preferencesワーキンググループ、draft-ietf-aipref-vocabおよびdraft-ietf-aipref-attach。
- W3C Community Group、TDM Reservation Protocol、2024年5月10日。
- Cloudflareブログ、Content Signals Policy、2025年9月24日、およびReid Tatoris、on controlling content use for AI training、2025年7月1日。
- OpenAI、Overview of OpenAI crawlers。Google、common crawlersおよびuser-triggered fetchers。Anthropic、crawler help article。
- Longpre et al.、Consent in Crisis: The Rapid Decline of the AI Data Commons、2024年7月。
本記事は一般的な情報提供を目的としたものであり、法的助言ではありません。各法域における自らの義務については弁護士に相談してください。