ChatGPT AgentはGA4に来る—でも識別できない。実測でわかったステルス挙動
ChatGPT AgentモードでAI観測ラボを訪問させた瞬間、GA4にai_agent_visitが4回届きました。
GTMで仕込んだ判定は、訪問者をhumanと出すように設定。
ChatGPT AgentはJavaScriptを実行してGA4にイベントを送ります。User-AgentはChrome、IPはCloudflare東京。でも誰かは識別できません。
この記事でわかること|📖:約7分
- ChatGPT AgentがGA4にイベントを届けるしくみ
- GTM+GA4でUser-Agent判定を実装する手順
- サーバーログとGA4で見えた実測データの中身
- なぜUAでもIPでも識別できないのか、その構造
ChatGPT Agentとは何か
ChatGPT Agentは、OpenAIが2025年7月にリリースしたブラウザ操作型のAIエージェントです。ユーザーが指示を出すと、ChatGPTが専用のリモートブラウザを起動してウェブを閲覧し、調査・分析・資料作成などの作業を自律的にこなします。
重要なのは「リモートブラウザ」という点です。ChatGPTがURLをサーバーサイドでフェッチするのではなく、実際のChromiumブラウザを起動してページを開きます。JavaScriptを実行し、CSSを読み込み、画像を取得する。人間がChromeでページを開くのとほぼ同じ挙動をします。違うのは、アクセス元IPがCloudflare経由になる点だけです。
AIのアクセス方式は大きく2種類に分かれます。
| 方式 | 代表例 | JS実行 | GA4に来るか | UAで識別 |
|---|---|---|---|---|
| サーバーサイドフェッチ型 | ChatGPT-User・Claude-User | ❌ | ❌ | ✅ 可能 |
| ブラウザ操作型 | ChatGPT Agent | ✅ | ✅ | ❌ 不可 |
ChatGPT-UserはUAに識別子を持つがJSを実行しない。ChatGPT AgentはJSを実行するがUAに識別子がない。
「UAで識別できる」ChatGPT-Userと、「GA4に来る」ChatGPT Agent。両者はまったく別の仕組みで動いています。前者については誰かがChatGPTにURLを貼った—サーバーログで見えた正体【AI実験室 #11】で実測データをまとめています。
実験内容:GTM+GA4でUser-Agent判定を実装した
ChatGPT AgentがGA4に来るかどうかを確かめるために、GTM(Google タグマネージャー)でUser-Agentを取得してGA4にカスタムイベントとして送る仕組みを実装しました。
実装の流れ
GTMでやることは3つです。まずUser-Agentを取得してラベルに変換するカスタムJavaScript変数を作ります。次にGA4イベントタグを作ってその変数を乗せます。最後に全ページで発火するトリガーを設定して公開します。
カスタムJavaScript変数のコードはこうです。
var ua = navigator.userAgent;
if (/ChatGPT-User/i.test(ua)) return ‘chatgpt_user’;
if (/Claude-User/i.test(ua)) return ‘claude_user’;
if (/Google-Agent/i.test(ua)) return ‘google_agent’;
if (/GPTBot/i.test(ua)) return ‘gptbot’;
if (/ClaudeBot/i.test(ua)) return ‘claudebot’;
if (/PerplexityBot/i.test(ua)) return ‘perplexitybot’;
if (/Googlebot/i.test(ua)) return ‘googlebot’;
return ‘human’;
}
UAに既知のAIクローラー名が含まれていれば対応するラベルを返し、どれにも一致しなければhumanを返します。GA4イベントタグの設定。
| GTM設定項目 | 値 |
|---|---|
| タグタイプ | Googleアナリティクス: GA4イベント |
| イベント名 | ai_agent_visit |
| パラメータ名 | visitor_type |
| パラメータの値 | {{UA判定}}(カスタムJS変数) |
| トリガー | All Pages(全ページビュー) |
実験の手順
実装が完了したあと、ChatGPT(有料プラン)のAgentモードに対して下記の通り指示しました。
GA4のリアルタイムレポートを別タブで開いた状態で送信し、何のイベントが届くかをリアルタイムで確認しました。実験と並行してサーバーログもSSH経由で照合しています。
実測結果:GA4にイベントが届いた
ChatGPT Agentに指示を出してから約8秒後、GA4のリアルタイム画面が動き始めました。
GA4のリアルタイム画面に4回届いた
イベント一覧にai_agent_visitが4回、scrollが2回記録されました。4回の訪問のうち、2ページでスクロールが発生しています。


ai_agent_visitが4回、scrollが2回届いているscrollイベントが発生しているのは重要なポイントです。単純にURLを取得しただけではスクロールは発生しません。ChatGPT Agentが実際にページをスクロールしながら読んでいることを示しています。
またsession_startやuser_engagementも4回記録されています。GA4が「新しいユーザーがセッションを開始した」と判断したということです。ChatGPT Agentの訪問は、GA4から見ると完全に人間の訪問と同じに見えます。
visitor_typeはhumanだった
ai_agent_visitイベントをクリックすると、送信されたパラメータの一覧が表示されます。

ai_agent_visitイベントの詳細。GTM経由で8つのパラメータが送信されている
visitor_typeの値はhuman。GTMのUA判定がChatGPT Agentを人間と判定したvisitor_typeの値はhumanでした。GTMのUA判定ロジックは、既知のAIクローラー名がUser-Agentに含まれていない場合にhumanを返します。つまりChatGPT AgentのUser-Agentには、AIだと識別できる文字列がまったく含まれていなかったということです。
サーバーログで見えたIPとUA
SSHでサーバーログを確認すると、実験時間帯に同じIPから39回のアクセスが記録されていました。HTMLだけでなくCSS・画像・JSも含むため、リクエスト数が多くなっています。
104.28.243.110 - - [09/Apr/2026:12:37:17 +0900] "GET / HTTP/2.0" 200 17838 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36" "-"
104.28.243.110 - - [09/Apr/2026:12:38:08 +0900] "GET / HTTP/2.0" 200 17838 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36" "-"
104.28.243.110 - - [09/Apr/2026:12:38:19 +0900] "GET /articles/ HTTP/2.0" 200 22746 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36" "-"UAはMozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/144.0.0.0です。MacのChromeそのものです。ChatGPTやAgentといった文字列はどこにも含まれていません。
IPアドレスを調べると、所属組織はCloudflare(東京)でした。OpenAIのサーバーからではなく、CloudflareのプロキシIPを経由してアクセスしています。
実測データまとめ
| 項目 | 実測値 |
|---|---|
| GA4イベント名 | ai_agent_visit |
| イベント回数 | 4回 |
visitor_typeの値 |
human(UAでは識別不可) |
| サーバーログのIP | 104.28.243.110(Cloudflare東京) |
| User-Agent | Chrome/144.0.0.0 (Macintosh) |
| 取得したリソース | HTML・CSS・画像・JS(全取得) |
| scrollイベント | 2回発生(4訪問中2ページ) |
なぜUAでもIPでも識別できないのか
ChatGPT AgentはJavaScriptを実行してGA4にイベントを届けました。でも識別できませんでした。なぜそうなるのか、仕組みを整理します。
User-Agentに識別子がない
GPTBotやClaudeBotといった学習用クローラーは、User-Agentに自分の名前を明記します。サーバーログを見れば一目でわかります。
Mozilla/5.0 (compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
ChatGPT AgentのUser-Agentはこうです。
MacのChromeと完全に同じです。ChatGPTやAgentといった文字列はどこにも含まれていません。GTMのUA判定がどれだけ精緻でも、識別できる文字列がなければ判定のしようがありません。
IPもCloudflare経由で追えない
UAで識別できないなら、IPで判定しようとするのが次の発想です。ただIPアドレスを調べると、所属組織はCloudflare(東京)でした。OpenAIのIPアドレスではありません。
Cloudflareは世界中にサーバーを持つCDNです。ChatGPT AgentはCloudflareのプロキシを経由してアクセスするため、サーバーログに残るIPはCloudflareのものになります。CloudflareのIPは世界中の一般サイトも利用しているため、AgentだけをIPで除外することは現実的に不可能です。
少なくともUAとIPでは識別できない。ChatGPT Agentのステルス構造はこの2点によって成立しています。
ChatGPT-Userとの決定的な違い
同じOpenAIのサービスでも、ChatGPT-UserはUser-Agentに識別子を持っています。
ChatGPT-UserはユーザーがChatGPTにURLを貼ったときにサーバーサイドでフェッチするクローラーです。JavaScriptを実行しないのでGA4には来ません。でもUAに名前を持っているのでサーバーログで識別できます。
ChatGPT AgentはJavaScriptを実行してGA4に来ます。でもUAに名前を持っていないので識別できません。同じOpenAIのサービスで、識別できるものとできないものが逆転しています。
| 比較項目 | ChatGPT-User | ChatGPT Agent |
|---|---|---|
| UAに識別子 | ✅ あり | ❌ なし |
| JS実行 | ❌ しない | ✅ する |
| GA4に来るか | ❌ 来ない | ✅ 来る |
| サーバーログで識別 | ✅ できる | ❌ できない |
| IPの所属 | Azure(OpenAI公式レンジ) | Cloudflare |
サイト運営者として今できること
ChatGPT AgentをUAでもIPでも識別できないとわかりました。では何もできないのかというと、そうではありません。現時点でできることを整理します。
GA4のボットフィルタを外す
GA4にはボットトラフィックを自動で除外する設定があります。デフォルトでオンになっているため、ChatGPT AgentのアクセスがGA4から除外されている可能性があります。
確認場所は「管理 → データストリーム → 該当ストリーム → Googleタグの設定を行う → すべてのイベント → ボットとスパイダーのフィルタリング」です。今回の実験では4回イベントが届いたので完全にはフィルタされていませんでしたが、設定によっては除外されるケースもあります。AIエージェントの挙動を正確に計測したい場合はオフにすることを検討してください。ただし既知の悪性Botも計測に混入するリスクがあるため、影響を理解した上で判断が必要です。
Signature-Agentヘッダーに注目する
UAとIPでは識別できませんが、HTTPヘッダーに唯一の手がかりが残っています。海外の技術者Simon Willisonの調査によると、ChatGPT AgentはHTTPリクエストにSignature-Agentというヘッダーを含めています。
ただし今回使用したサーバーのログにはSignature-Agentヘッダーは記録されませんでした。Nginxのデフォルト設定ではカスタムヘッダーがログに残らないためです。記録するにはNginxの設定変更が必要で、共有ホスティング環境では対応が難しいのが現実です。
VPSや専用サーバーを使っている場合は、Nginxのlog_formatを変更してカスタムヘッダーを記録する設定を追加することで識別できる可能性があります。例えば以下のように追記します。
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_signature_agent”‘;
サーバーログの定点観測を続ける
現時点でできる最も現実的な対応は、サーバーログの定点観測です。ChatGPT AgentのIPはCloudflareですが、アクセスパターン(短時間に複数ページを連続取得・CSS/画像/JSを全取得)は人間の回遊とは異なります。
完全な識別はできませんが、「Cloudflareのプロキシから短時間で複数ページをブラウザ挙動で取得している」パターンを1つのまとまりとして観測し続けることで、AIエージェントの訪問傾向を把握することは可能です。
| 対応策 | 難易度 | 効果 |
|---|---|---|
| GA4のボットフィルタをオフ | 低 | Agentのイベントを取りこぼさない。PV・UUが正確になる |
| Signature-Agentヘッダーをログに記録 | 高(VPS・専用サーバーのみ) | サーバーログで識別・除外/分析できる可能性 |
| Cloudflare IPのアクセスパターン監視 | 中 | 傾向把握。レポートからAgent影響を推定できる |
まとめ
ChatGPT AgentをGTM+GA4で計測した実験結果をまとめます。
| 問い | 実測結果 |
|---|---|
| ChatGPT AgentはJSを実行するか | ✅ 実行する |
| GA4にイベントが届くか | ✅ 届く(4回確認) |
| UAで識別できるか | ❌ できない(Chrome/144と同一) |
| IPで識別できるか | ❌ できない(Cloudflare東京) |
| scrollイベントは発生するか | ✅ 発生する(4訪問中2ページ) |
ChatGPT AgentはGA4に来ます。でも誰が来たかはわかりません。
学習用クローラー(GPTBot・ClaudeBot)はUAに名前を明記するのでサーバーログで識別できます。フェッチ型クローラー(ChatGPT-User)もUAに識別子を持っています。ところがブラウザ操作型のChatGPT AgentはUAもIPも人間と区別できない形で動きます。
AIエージェントが普及するにつれて、GA4の数字の中に「人間ではないが識別できないトラフィック」が混入していきます。GA4のPVやセッション数を見るとき、ChatGPT Agentのような存在が含まれている可能性を頭に置いておく必要があります。
唯一の手がかりはSignature-Agentヘッダーです。ただし共有ホスティングではログに記録されません。VPS・専用サーバー環境でNginxの設定を変更できる場合は、カスタムヘッダーのログ記録を検討する価値があります。
AIエージェントの識別可否についてはAIエージェント、もう来てる。識別できるのは4つだけでも整理しています。
AIエージェントが普及するにつれて、GA4の数字の中に「人間ではないが識別できないトラフィック」が混入していきます。GA4のPVやセッション数を見る時は、ChatGPT Agentのような存在が含まれている可能性を前提に、サーバーログの定点観測を始めてください。
あなたのサイトは、
AIに見えていますか?
URLを入力するだけで30秒。8項目を自動診断し、優先度別の改善プランを提示します。完全無料・登録不要。