は、生成AIが学習や回答生成のためにWebページを収集するプログラムです。従来の検索用クローラーとは目的も名前も異なります。
この回は、来てもらうか、止めるかの判断を扱います。結論を先に言うと、一律に決める必要はありません。
1. 用途ごとに別のクローラーが来る
重要な前提として、同じ事業者でも用途ごとに別の名前で来ることがあります。だから用途ごとに判断できます。
| 用途 | 何のために来るか | 止めると |
|---|---|---|
| 学習 | モデルの訓練データとして収集 | 将来のモデルに含まれなくなる |
| 回答時の参照 | 利用者の質問に答えるため、その場で取得 | 引用されなくなる |
| 検索インデックス | 検索結果に載せるため | 検索から消える |
2行目が にとって決定的です。回答時の参照を止めると、引用されなくなります。学習には使われたくないが引用はされたい、という場合は用途を分けて判断することになります。この2つは目的がまったく違うため、同じ「AIに使われる」という言葉で一括りにすると判断を誤ります。
「AI に使われたくない」という理由ですべてのAIクローラーを一律に拒否すると、回答時の参照も止まります。結果として、競合だけが引用されるという状況になりえます。判断は用途ごとに行ってください。
2. 記述の仕方
に、クローラーごとの許可・拒否を書きます。書き方の基本は従来と同じです。
# 一般の検索エンジン(従来どおり許可)User-agent: *Allow: /Disallow: /admin/Disallow: /api/
# 例: 学習目的のクローラーは拒否し、回答時の参照は許可する# ※ 実際の User-agent 名は各事業者の公開情報を確認することUser-agent: ExampleAI-TrainerDisallow: /
User-agent: ExampleAI-AnsweringAllow: /
# サイトマップの位置は必ず示すSitemap: https://example.com/sitemap.xmlUser-agent の名前は事業者ごとに異なり、変更されることもあります。ここに具体名を書いても古くなるため、各事業者が公開している情報を確認してください。定期的な見直しが要る領域です。
あわせて も検討対象になります(EP.02 で扱いました)。こちらは拒否のためではなく、サイトの内容を要約して伝えるためのものなので、目的が違います。名前が似ているため混同されがちですが、片方は断るため、もう片方は伝えるためのものです。両方を用意しても矛盾しません。
3. 記述には強制力がない
重要な限界です。robots.txt は「お願い」であって、強制力はありません。尊重する事業者もいれば、しない場合もあります。
- 尊重されない可能性がある — 記述はあくまで意思表示
- 既に取得された内容は戻らない — 過去の分は対象外
- 第三者経由の参照は止められない — 引用された先から辿られる
- 公開している以上、読まれる前提 — 技術的に完全には防げない
本当に読ませたくない情報は、公開しないか、認証の後ろに置くしかありません。 での拒否は、「読まないでほしい」という意思表示として機能するに留まります。ここを誤解して「拒否しているから大丈夫」と考えると、実態と認識がずれます。技術的な保護と、意思表示は別のものです。
強制力がなくても、尊重する事業者に対しては有効です。また、意思を表明した記録としての意味もあります。書かないという選択は「どちらでもよい」と受け取られます。
4. アクセス負荷への対処
実務的な問題として、AIクローラーのアクセスが負荷になることがあります。従来の検索クローラーより頻繁に来る場合があります。
#!/usr/bin/env bash# アクセスログから、ボットらしき User-agent を集計する
LOG="${1:-/var/log/nginx/access.log}"
echo "=== ボット別のアクセス数(上位20)==="awk -F'"' '{print $6}' "$LOG" \ | grep -iE 'bot|crawler|spider|gpt|claude|perplexity|ai' \ | sort | uniq -c | sort -rn | head -20
echoecho "=== 全体に占めるボットの割合 ==="total=$(wc -l < "$LOG")bots=$(awk -F'"' '{print $6}' "$LOG" \ | grep -icE 'bot|crawler|spider|gpt|claude|perplexity|ai')echo "全 $total 件中 $bots 件"awk -v t="$total" -v b="$bots" 'BEGIN { printf " 割合: %.1f%%\n", b / t * 100 }'まず実態を測ってください。「多い気がする」で遮断すると、引用の機会を失います。全体に占める割合と、それが実際に負荷になっているかを確認してから判断します。この順序は パフォーマンスチューニング実践 で扱った「推測でチューニングしない」と同じで、測ってから手を付けるという原則がここでも当てはまります。
| 状況 | 対処 | 失うもの |
|---|---|---|
| 負荷になっていない | 何もしない | — |
| やや多い | 頻度の制限を試みる | ほぼなし |
| 過大で、サービスに影響 | 特定のクローラーを遮断 | そのAIからの引用 |
| 明らかに異常な挙動 | 遮断 | ほぼなし(元々有益でない) |
5. 見せる範囲を分ける
全部か全く無しか、ではなく、見せる範囲を分けるという選択もあります。
- 公開記事は許可 — 引用されたいので来てもらう
- 会員向けコンテンツは認証の後ろ — そもそも到達しない
- 管理画面や内部向けは拒否 — 従来と同じ
- 個人情報を含むページは拒否+そもそも公開しない — 二重に守る
4番目は当然のようですが、robots.txt に書くこと自体がヒントになるという点に注意してください。「`/private-customer-data/` を Disallow」と書くと、そのパスの存在を教えることになります。本当に隠したいものは、記述せず認証で守るのが正解です。
6. 判断の整理
この回の内容を、判断の順に整理します。
- 1引用されたいかを決める — されたいなら、回答時の参照は許可する
- 2学習の扱いを別に決める — 用途が違うので分けて判断できる
- 3実際のアクセスを測る — 負荷の議論は実態から始める
- 4負荷があれば、まず頻度制限 — 遮断は最後
- 5隠したいものは認証で守る — 記述に頼らない
- 6定期的に見直す — クローラーの名前も仕様も変わる
6番目を忘れないでください。この領域は変化が速く、書いた設定は放置すると意味を失います。半年に一度でも見直す機会を作っておくと、実態と乖離しません。新しいクローラーが登場しても、設定を書いていなければ既定の扱いになります。拒否したいものが増えているなら、追記が要ります。
用途ごとに別のクローラーが来るので、一律に決めなくてよい。回答時の参照を止めると引用されなくなる点に注意。記述に強制力はないが、意思表示として意味はある。負荷は測ってから判断し、遮断は最後の手段。隠したいものは認証で守る(記述はヒントになる)。そして定期的に見直す必要があります。
この記事の感想を教えてください
あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。