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用途
OpenAIGPTBotトレーニング・検索用
OpenAIChatGPT-Userブラウジング機能
AnthropicClaudeBotトレーニング用
GoogleGoogle-ExtendedGemini等のAI学習用
PerplexityPerplexityBot検索クロール
MetaMeta-ExternalAgentAI学習用
AppleApplebot-ExtendedApple Intelligence用
Common CrawlCCBotオープンデータセット用
BytedanceBytespiderAI学習用
Coherecohere-aiAI学習用

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.txtmeta 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は一度設定したら終わりではありません。 以下のチェックを月次で実施してください。

  1. 新しいAIクローラのUser-Agentが登場していないか
  2. 意図せずブロックしているパスがないか
  3. サイトマップのURLが最新か
  4. サブドメインのrobots.txtも含めて確認しているか

サイトリニューアル時に設定が初期化されるケースは多いです。 マーケティングチームもrobots.txtの中身を把握しておくことが、GEO対策の基盤を守ることにつながります。

まとめ

robots.txtによるAIクローラの制御は、GEO対策の最初のステップです。 設定はシンプルですが、User-Agentの把握漏れやDisallowの挙動の誤解が原因で、意図しないブロックが発生しているケースは多いです。

まずは curl -s https://自社ドメイン/robots.txt で現状を確認してください。 その1行の確認が、AI検索での可視性を左右する起点になります。