GA4だけ見るとクローラは見えない|28日で119pvのサイトに、1日2,500リクエスト来ていた

🧭 この記事の前提
公開して2か月の個人サイト(記事78本)で、アクセス解析をGA4だけで見ていました。流入がまだ小さいので、数字を1つずつ確かめられる規模です。
困ったのは、GA4の数字を「読者」として読むと、判断が全部ずれること。サーバ側のログと突き合わせたら桁が2つ違いました。
持ち帰れるもの:立ち上げ期の個人サイトを運営している人向けに、ボットと実読者を分ける具体的な見分け方と、生成AIクローラの実測値を出します。すでに月数万PVある人には、割合が違うので当てはまりません。
結論:GA4は原理的にクローラを載せられない
📌 先に結論 ① GA4はJavaScriptの実行が前提なので、JSを実行しないクローラは載らない ② 立ち上げ期はGA4に載っている数字のほうがむしろ怪しい(ヘッドレスブラウザが混ざる) ③ 主指標はSearch Console、クロールの実態はサーバ側のログで見る
① 桁が2つ違った
同じサイトの、同じ時期の数字です。
| 見た場所 | 数字 |
|---|---|
| GA4 | 28日で 119 page_view |
| サーバ側のログ(ファイアウォールの24時間ぶん) | 約 2,500 リクエスト/日 |
内訳は Allowed 2.0k・Challenged 353・Denied 107。
GA4の28日ぶんより、サーバの1日ぶんのほうが20倍多いという状態でした。GA4だけを見ていると、この2,400リクエストは存在しないことになります。
理由は単純です。GA4はページ内のJavaScriptが実行されて初めて計測されます。 主要なクローラはJSを実行しないので、原理的に載りません。 「計測漏れ」ではなく仕様です。
② 名前付きボットの内訳(実測)
24時間ぶんを名前で分けたものです。
| ボット | リクエスト/日 |
|---|---|
| MJ12bot/v1.4.8(SEO調査系のクローラ) | 137 |
| ClaudeBot/1.0 | 24 |
| Googlebot/2.1 | 14 |
| Pinterestbot/1.0 | 12 |
| Googlebot-Image/1.0 | 2 |
| GPTBot | 0 |
読み取れたことを3つ書きます。
- Googlebot 14件/日は少ない。 記事78本+固定ページ=85URLに対して1日14件なら、サイトを1周するのに6日かかります。 インデックスが進まない理由がここに出ていました
- Pinterestbot 12件/日は、ピンを投稿し始めた直後から来ています。SNS投稿が「外部からの参照を作ってクロールを呼ぶ」という狙いどおりに動いた最初の証拠でした
- 生成AI系はClaudeBotが24件、GPTBotは0件。 この規模の個人サイトでも、片方は毎日読みに来て、片方は一度も来ていませんでした
⚠ 覚えておく一行 「AIに読まれているか」は、GA4では絶対に分かりません。 サーバ側のログを見るしかありません。
③ 残りの大半は攻撃とスキャンだった
名前付きボットを引いた残りが、実は最大の塊でした。
| 宛先 | 件数/日 |
|---|---|
/wp-admin/install.php | 82 |
/2f24dd17589df09e/view | 48 |
/wp-admin/admin-ajax.php | 44 |
このサイトはWordPressではないので全部404になりますが、それでもリクエストは受けています。 クロールに使える帯域を、この種のスキャンが食っていました。
送信元も偏っていました。
| 上位のネットワーク | リクエスト/日 |
|---|---|
| PacketHub | 385 |
| RouterHosting | 366 |
| GSL Networks | 297 |
| Google LLC | 212 |
| OVH | 208 |
上位5件のうち4件がVPN・ホスティング業者です。実際の読者の回線ではありません。対処として /wp- で始まるパスを拒否する設定を1本入れ、/wp-admin/install.php と /wp-login.php が403、トップと記事と robots.txt は200のままであることを実測で確認しました。
④ GA4に載っている100人も、読者ではなかった
ここが一番効いた話です。GA4に載っているほうが安全、ではありませんでした。
28日のGA4の中身です。
| 指標 | 値 |
|---|---|
| アクティブユーザー | 99〜100 |
| そのうち初回訪問(first_visit) | 99人 |
| 1人あたりのページ数 | 1.2 |
| スクロールした人 | 5人 |
| 国 | US 54/FR 9/UK 6/JP 6 |
| チャネル | Direct 92/Organic 8/Referral 1 |
日本語のサイトなのに過半数が米国からのDirectで、99人が初回訪問、1.2ページで離脱。同じ期間のSearch Consoleは表示24・クリック1です。桁が合いません。
これはJSを実行するタイプのアクセス、つまりヘッドレスブラウザとみられます(ブラウザ内訳はChrome 70/Safari 14/Edge 12/Firefox 6/YaBrowser 1で、UAをローテーションしている形跡があります)。
この100人を流入として扱うと、判断を全部間違えます。 「CTAが押されないから文言が悪い」ではなく、そもそも読む人がいない。
⑤ 実読者を1行で見分ける方法
後日、GA4のなかで実読者を分離できました。同じ「Organic」でも中身が正反対だったからです。
| 参照元 | セッション | エンゲージ率 | 平均エンゲージ時間 |
|---|---|---|---|
| google / organic | 6 | 83.33% | 3分27秒 |
| bing / organic | 6 | 0% | 0秒 |
| (direct) / (none) | 98 | 14.29% | 1秒 |
「Organic 12セッション」と1つの数字で見ていたら、半分がボットでした。分けたことで、実読者と呼べる6セッションが初めて特定できました。
実務で使っている見分け方はこの3つです。
- 平均エンゲージメント時間が1〜2秒のページはボット。 10秒以上だけが実読者の候補
- 市区町村がAshburn / Boardman / Council Bluffs / Glenviewならデータセンター。 いずれも0秒でした
- 参照元は必ず分ける。 「Organic」でまとめない
⑥ 主指標を変えた
以上を踏まえて、主指標そのものを差し替えました。
| 何を測るか | 使う道具 | |
|---|---|---|
| 主 | 検索での表示・クリック・インデックス状況 | Search Console |
| 補助 | 実読者の行動(滞在・回遊・CTA) | GA4(必ずボットを分離してから) |
| 週1 | クロールの実態 | サーバ側のログ |
立ち上げ期のGA4は、分母がボットで埋まっているので比率がすべて壊れます。 エンゲージメント率も、直帰率も、CTAのクリック率も、母数が実読者でなければ意味を持ちません。
ただし、主指標を移した先が無傷だったわけではありませんでした。Search Console の側は、運営者自身の site: 検索で汚染されていました。 28日平均で26.5位に見えていた数字が、汚染ゼロの1日だけを取り出すと62.2位でした。→ 自分の site: 検索が Search Console を汚染していた
同じ「1つのツールだけで結論を出した」失敗は、以前にも踏んでいます。1つのブラウザだけを見て「サイトのバグだ」と報告したものの、実際の原因は手元の拡張機能でした。桁が合わないときは、必ず別の層を見ます。
やりがちな失敗
| 失敗 | 何が起きるか | 直し方 |
|---|---|---|
| GA4だけでクロール状況を語る | JSを実行しないクローラは原理的に載らない | サーバ側のログを見る |
| 「Organic」を1つの数字で扱う | 実読者6とボット6が混ざる | 参照元ごとに滞在時間を見る |
| GA4のユーザー数を流入と読む | 99人が初回1.2ページのヘッドレスでも「100人来た」になる | first_visit比率とスクロール数を見る |
| 立ち上げ期にCTR・直帰率を評価する | 分母がボットなので比率が壊れる | 実読者が特定できるまで比率を出さない |
| スキャンを放置する | クロール帯域を食う(日126件) | /wp- 等を拒否する |
読まれていた記事に出口が無かった話は読まれているクラスタに収益リンクが1本も無かった、AIに毎朝この分析をさせる運用はAIエージェントの定時実行にまとめています。測定の経路そのものが落ちて出力が0になった件は自動化は静かに壊れる、キーワード選定の側の失敗はAIに74本書かせた結果です。
まとめ
- GA4はJS前提なので、クローラは原理的に載らない。 28日119pvと日2,500reqが同じサイト
- 生成AIクローラの実測は ClaudeBot 24 / GPTBot 0。 サーバログでしか分からない
- GA4に載っている数字のほうが怪しい場合がある。 99人が初回1.2ページ・スクロール5人
- 「Organic」は分ける。 同じ6セッションでも、3分27秒と0秒が混ざっていた