AIクローラを許可するか、拒否するか。 この判断は、robots.txtのたった数行で決まります。
GEO(Generative Engine Optimization)の出発点は、AI検索サービスのクローラに自社コンテンツを読ませることです。 しかし、多くのサイトではrobots.txtの設定が古いまま放置されていたり、意図せずAIクローラをブロックしていたりします。 本記事では、主要なAIクローラのUser-Agent一覧と、実務で使えるrobots.txtの設定パターンを整理します。
robots.txtの基本的な仕組み
robots.txtは、Webサイトのルートディレクトリに置くテキストファイルです。
クローラがサイトにアクセスしたとき、最初に https://example.com/robots.txt を読みに行き、自分がどのページをクロールしてよいかを確認します。
基本的な構文は3要素だけです。
User-agent: GPTBot
Allow: /blog/
Disallow: /admin/
User-agent でクローラを指定し、Allow で許可するパス、Disallow で拒否するパスを指定します。
主要AIクローラのUser-Agent一覧
2024年時点で確認されている主要なAIクローラのUser-Agentです。 サービスによっては複数のUser-Agentを使い分けています。
| サービス | User-Agent | 用途 |
|---|---|---|
| OpenAI | GPTBot | トレーニング・検索用 |
| OpenAI | ChatGPT-User | ブラウジング機能 |
| Anthropic | ClaudeBot | トレーニング用 |
Google-Extended | Gemini等のAI学習用 | |
| Perplexity | PerplexityBot | 検索クロール |
| Meta | Meta-ExternalAgent | AI学習用 |
| Apple | Applebot-Extended | Apple Intelligence用 |
| Common Crawl | CCBot | オープンデータセット用 |
| Bytedance | Bytespider | AI学習用 |
| Cohere | cohere-ai | AI学習用 |
GPTBot をブロックしても ChatGPT-User は別のUser-Agentとして動作します。
両方を制御するには、それぞれ個別に記述してください。
目的別の設定パターン
パターン1:すべてのAIクローラを許可する
User-agent: *
Allow: /
GEO対策を最優先にするなら、この設定が出発点です。
パターン2:AIクローラを個別に許可する
User-agent: GPTBot
Allow: /blog/
Allow: /products/
Disallow: /internal/
User-agent: ChatGPT-User
Allow: /
User-agent: ClaudeBot
Allow: /blog/
Disallow: /internal/
User-agent: PerplexityBot
Allow: /
User-agent: *
Disallow: /admin/
パス指定は上から順に評価され、より具体的なパスが優先されます。
パターン3:学習は拒否し検索は許可する
# トレーニング用クロールを拒否
User-agent: GPTBot
Disallow: /
# ブラウジング(リアルタイム検索)は許可
User-agent: ChatGPT-User
Allow: /
# Google AI学習を拒否(Googlebotは別途許可)
User-agent: Google-Extended
Disallow: /
この区別はサービス提供者の善意に依存しており、技術的な強制力はありません。
Disallowの落とし穴
空のDisallowは「すべて許可」
# これは「すべて許可」と同じ
User-agent: GPTBot
Disallow:
# これは「すべて拒否」
User-agent: GPTBot
Disallow: /
この1文字の有無で、AIクローラがサイト全体を読めるかどうかが変わります。
ワイルドカードの使い方
User-agent: GPTBot
# パラメータ付きURLをブロック
Disallow: /*?
# PDFファイルをブロック
Disallow: /*.pdf$
ワイルドカードは仕様の拡張機能で、すべてのクローラが対応している保証はありません。
パスの大文字・小文字
Linuxサーバーでは /Blog/ と /blog/ は別のパスです。
Disallowの指定と実際のパスが一致しているか確認してください。
robots.txtとmeta robotsタグの違い
| 特性 | robots.txt | meta robotsタグ |
|---|---|---|
| 制御の粒度 | ディレクトリ単位 | ページ単位 |
| クロール抑制 | できる | できない |
| インデックス制御 | できない | できる(noindex) |
robots.txtで Disallow するとクローラはページ自体にアクセスしないため、meta robotsタグの指定も読まれません。
GEO対策では、robots.txtでクロールを許可した上で、特定ページだけmeta robotsで制御するのが一般的です。
設定の検証方法
# robots.txtの内容を取得
curl -s https://example.com/robots.txt
# HTTPステータスコードも確認
curl -sI https://example.com/robots.txt | head -1
robots.txtが存在しない(404)場合、クローラはサイト全体をクロール可能と判断します。
定期的にAIクローラの設定状況をチェックするスクリプトも有効です。
import requests
import hashlib
from datetime import datetime
def check_robots_txt(domain: str) -> dict:
url = f"https://{domain}/robots.txt"
try:
r = requests.get(url, timeout=10)
content = r.text
return {
"domain": domain,
"status_code": r.status_code,
"has_gptbot": "GPTBot" in content,
"has_claudebot": "ClaudeBot" in content,
"has_perplexitybot": "PerplexityBot" in content,
"checked_at": datetime.now().isoformat(),
}
except requests.RequestException as e:
return {"domain": domain, "error": str(e)}
サイトマップとの連携
robots.txtには Sitemap ディレクティブでサイトマップの場所を記述できます。
User-agent: *
Allow: /
Sitemap: https://example.com/sitemap.xml
Sitemap はUser-agentブロックの外に記述します。
AIクローラのサイトマップ活用度はサービスにより異なりますが、記述しておいて損はありません。
運用上の推奨事項
robots.txtは一度設定したら終わりではありません。 以下のチェックを月次で実施してください。
- 新しいAIクローラのUser-Agentが登場していないか
- 意図せずブロックしているパスがないか
- サイトマップのURLが最新か
- サブドメインのrobots.txtも含めて確認しているか
サイトリニューアル時に設定が初期化されるケースは多いです。 マーケティングチームもrobots.txtの中身を把握しておくことが、GEO対策の基盤を守ることにつながります。
まとめ
robots.txtによるAIクローラの制御は、GEO対策の最初のステップです。 設定はシンプルですが、User-Agentの把握漏れやDisallowの挙動の誤解が原因で、意図しないブロックが発生しているケースは多いです。
まずは curl -s https://自社ドメイン/robots.txt で現状を確認してください。
その1行の確認が、AI検索での可視性を左右する起点になります。