# 実験素材: AIクローラーのrobots.txt

記事「ChatGPTに引用されたいなら、まずrobots.txtを開こう」で使った素材です。取得日はすべて2026-10-08。

| ファイル | 中身 |
|---|---|
| `../check_ai_bots.py` | robots.txtが15のAIボットをどう扱うかを判定するスクリプト（標準ライブラリのみ） |
| `../verify_ip.py` | アクセスログのIPが、OpenAI・Anthropicの公開IP範囲に入っているか調べる |
| `robots-survey.json` | 294サイトのrobots.txtを、10のボットについて判定した結果（図2の元データ） |
| `webfetch-log.json` | Claude CodeのWebFetchが、自分のサーバーに送ってきたリクエストの全件 |
| `server.py` | 上の実験で使った、リクエストを記録するだけのHTTPSサーバー |

## 1. robots.txtの調査（294サイト）

- 対象は、日本182・海外112サイト。業種を分けて、知名度で手選びしました（無作為抽出ではありません）。robots.txtを取得できたサイトだけが対象です
- 判定は、トップページ「/」を各ボットが取得できるか。Googleのrobots.txt仕様（2026-08-31更新）どおり、一致する最も具体的なUser-agentのグループ1つだけを使い、パスが長いルールを優先し、同じ長さならAllowを選びます
- ニュース系は、新聞・通信社（日本18）と海外ニュース（20）の38サイト

## 2. Claude Code WebFetchの実験

1. 自己署名証明書を作る（WebFetchはhttpをhttpsに直し、ドットのないホスト名を断るため、`https://127.0.0.1` を使う）

   ```bash
   openssl req -x509 -newkey rsa:2048 -nodes -keyout k.pem -out c.pem -days 2 \
     -subj "/CN=127.0.0.1" -addext "subjectAltName=IP:127.0.0.1"
   ```

2. `python3 server.py` でサーバーを起動（robots.txtは `User-agent: *` / `Disallow: /`。ページには合言葉が書いてある）
3. 証明書を信頼させて、Claude Codeに開かせる

   ```bash
   NODE_EXTRA_CA_CERTS=c.pem claude -p "Use the WebFetch tool to open https://127.0.0.1:8765/cafe.html and tell me the secret word." \
     --allowedTools WebFetch < /dev/null
   ```

結果: 3回とも合言葉が返り、サーバーに届いたのはページへのリクエストだけでした。`/robots.txt` へのリクエストはありません。User-Agentは `Claude-User (claude-code/2.1.291; +https://support.anthropic.com/)` でした。

限界: Claude Code 2.1.291・自分のMac・ローカルアドレス・3回だけの結果です。claude.aiのチャットやAPIの取得機能、他社のサービスは調べていません。
