Skip to content
GA4 で BtoB サイトのリード計測 — イベント設計から設定まで 2 時間

GA4 で BtoB サイトのリード計測 — イベント設計から設定まで 2 時間

最終更新日: / 公開日:

最終更新日: / 公開日:

本記事のポイント

  • GA4 の BtoB リード計測は、1 プロパティ + 1 データストリームに GTM 経由でタグを一本化し、フォーム送信を generate_lead イベントとしてキーイベント化する構成が基本形です。CMS のネイティブ連携と GTM を併用すると page_view が二重計上されるため、配信経路は必ず 1 本に絞ります
  • humbulls が自社サイト(HubSpot CMS + サブドメインの 2 サイト構成)で実装した実測では、アカウント作成から動作確認まで約 2 時間。費用は GA4 / GTM とも無料です
  • HubSpot フォームは iframe 構造のため、GTM 標準の「フォーム送信」トリガーでは発火しません。この記事では、実装で踏んだ落とし穴と回避コードをそのまま公開します。巻末のキットで、自社の計測要件からイベント設計表と設定手順を一括生成できます

「GA4 は入れてある。でも見ているのはページビューだけで、リードがどこから来たのか答えられない」。humbulls が BtoB マーケティングの支援に入るとき、計測まわりで最初によく聞く状態です。

原因はツールの機能不足ではなく、イベント設計を飛ばして「入れただけ」で止まっていることにあります。本記事では、GA4 と GTM をゼロから設定し、フォーム送信をリードとして数えられる状態までを 6 つの STEP で解説します。humbulls 自社サイトの実装(2026 年 6 月・Google / HubSpot 公式ドキュメントで裏取り済み)が下敷きなので、手順どおりに進めれば再現できます。特別なスキルは不要です。

完成形を最初に — 何ができあがるか

先に全体像です。作るのは次の構成で、所要時間は約 2 時間、費用は無料です。

GA4 リード計測のアーキテクチャ。1 つの GA4 プロパティと 1 つの GTM コンテナに、サイト側からタグを一本化する

要素 作るもの 役割
GA4 プロパティ 1 個 + ウェブデータストリーム 1 本 データの受け皿。測定 ID(G-XXXXXXXXXX)を発行
GTM コンテナ 1 個 タグ配信の元締め。GA4 への送信はすべてここ経由
Google タグ GTM 内に 1 個 全ページの page_view を送る
フォーム計測タグ GTM 内に 2 個(リスナー + 送信) フォーム送信を generate_lead として送る
キーイベント GA4 側で 1 個 generate_lead をコンバージョンとして扱う

前提条件

  • サイトの <head> を編集できること(CMS のテンプレート編集権限)
  • Google アカウントがあること
  • フォームは HubSpot フォームを例に解説します(他のフォームツールでも考え方は同じです)

計測が動き始めたあとの可視化は、HubSpot × Looker Studio のダッシュボード構築が接続先になります。

STEP 1: GA4 プロパティとデータストリームを作る — 15 分

「サブドメインごとにストリームを分けるべきですか」。複数サイトを持つ会社から必ず出る質問です。

データストリームは、サブドメインが何個あっても 1 本にします。

  1. analytics.google.com → 管理 → プロパティを作成(タイムゾーン: 日本、通貨: JPY)
  2. データストリーム → ウェブを 1 つだけ作成。URL は代表ドメイン、ストリーム名は「{社名} (all subdomains)」のように付ける
  3. 発行された測定 ID G-XXXXXXXXXX を控える
  4. データストリーム → タグ設定を構成 → 拡張計測機能を ON にする。scroll / 離脱クリック / サイト内検索 / ファイルダウンロードがコード不要で自動取得されます

つまずきポイント

  • サブドメイン用に別ストリームを作ると、Cookie 共有の前提が崩れてユーザーが分断されます。サブドメイン別の分析は、レポート側でホスト名ディメンションを使って行います
  • 同一ルートドメイン配下のサブドメインなら、クロスドメイン設定(「ドメインの構成」)は不要です。humbulls の検証では、設定してしまうと URL に _gl パラメータが付く副作用だけが残りました。_ga Cookie はルートドメインに共有されるため、何もしなくてもユーザー ID は引き継がれます

STEP 2: GTM コンテナを作り「Google タグ」を設定する — 15 分

「解説記事どおりに GA4 設定タグを探したのに、選択肢に出てこない」。2026 年に GTM を触り始めた人が最初に混乱する場所です。

旧「GA4 設定タグ(Configuration Tag)」は廃止され、現在は「Google タグ」に統合されています。古い記事の手順は追わないでください。

  1. tagmanager.google.com → アカウントとコンテナを作成(ターゲット = Web)
  2. 変数 → ユーザー定義変数 → 定数を作成し、STEP 1 の測定 ID を入れる(名前例: CONST - GA4 Measurement ID
  3. タグ → 新規 → 「Google タグ」を選択 → タグ ID に 2 の定数変数を指定
  4. トリガーは Initialization - All Pages を設定

これで全ページの page_view 送信が組めました。Cookie 設定は既定のまま触りません(既定 auto がサブドメイン共有の正解です)。

STEP 3: サイトに GTM スニペットを設置する — 20 分

「CMS に GA4 連携の設定があるから、それを ON にすればいいのでは」。ここが、この構成でいちばん事故が起きる場所です。

GA4 の配信経路は GTM の 1 本に絞ります。CMS のネイティブ GA4 連携と GTM を両方有効にすると、同じ page_view が 2 回計上されます。

  1. GTM の管理画面からスニペット 2 つ(head 用 / noscript 用)をコピーする
  2. サイトの共通テンプレートに貼る。head スニペットは <head> のできるだけ上、noscript は <body> 直後
  3. CMS 側のネイティブ GA4 連携(HubSpot なら 設定 → コンテンツ → ページ → 連携タブの「Google アナリティクス 4 と連携」)は OFF にする

humbulls.com では、ベーステンプレート 1 ファイルへの設置で全ページ + システムページに配信されています。テンプレート継承のある CMS なら、設置箇所は 1 か所で済みます。

つまずきポイント

  • HubSpot の場合、GTM の入れ方は「テンプレート直書き」と「連携タブで GTM ID を登録」の 2 方式があります。両方やると GTM 自体が二重ロードされるので、どちらか一方に決めます。humbulls はコードを git 管理できる直書きを採用しました
  • HubSpot 標準トラッキングコード(__hstc Cookie を発行する hs-scripts.js)は GA4 とは別系統の CRM アトリビューション用です。GTM に移し替えず、そのまま並走させます。GTM 直書きにしても HubSpot のフォーム・CTA・ワークフロー等の機能は失われません(humbulls で検証済みです)

STEP 4: フォーム送信を generate_lead で拾う — 30 分

「フォーム送信トリガーを設定したのに、テストしても 1 件も発火しない」。HubSpot フォームの計測で、ほぼ全員が踏む落とし穴です。

原因は HubSpot フォームが iframe 構造であることにあります。GTM 標準の「フォーム送信」トリガーは親ページのフォームしか監視できないため、iframe 内のフォーム送信を検知できません。回避策は、HubSpot が発行するグローバルフォームイベントを listen することです。

HubSpot フォーム送信を GA4 の generate_lead に渡す計測フロー。標準のフォーム送信トリガーは iframe 内のフォームを検知できないため、グローバルフォームイベントを dataLayer に渡す

  1. GTM でカスタム HTML タグを作成し、次のリスナーを貼る。トリガーは Initialization - All Pages(フォームが読み込まれる前に必ずアタッチするため)
<script>
  // v4 フォーム(2026 現行)
  window.addEventListener('hs-form-event:on-submission:success', function (e) {
    window.dataLayer = window.dataLayer || [];
    window.dataLayer.push({ event: 'hubspot_form_success', form_id: (e.detail && e.detail.formId) || '' });
  });
  // v3 互換(旧埋め込み)
  window.addEventListener('message', function (e) {
    if (e.data && e.data.type === 'hsFormCallback' && e.data.eventName === 'onFormSubmitted') {
      window.dataLayer = window.dataLayer || [];
      window.dataLayer.push({ event: 'hubspot_form_success', form_id: e.data.id });
    }
  });
</script>
  1. カスタムイベントトリガー hubspot_form_success を作成する
  2. GA4 イベントタグを作成する。イベント名 generate_lead、パラメータに form_id、トリガーに 2 を指定

リスナーは約 20 行です。v3 と v4 でイベント名が違うため、上のコードは両対応にしています。

つまずきポイント

  • 氏名・メールアドレス・電話番号を GA4 のパラメータに送ってはいけません(Google の規約違反です)。送るのは form_id のような非個人情報だけにします
  • このリスナーは HubSpot のフォーム実装更新で壊れうる結合です。導入後しばらくは、送信テストのたびに発火を確認する運用をおすすめします

STEP 5: キーイベント化と補助イベントを足す — 15 分

フォーム送信が流れ始めたら、GA4 側でリードとして数える設定を入れます。

  1. GA4 管理 → イベント に generate_lead が現れたら、キーイベント(コンバージョン)としてマークする
  2. 補助イベントとして、電話・メールリンクのクリック計測を足す。GTM の Click - Just Links トリガーで URL に tel: / mailto: を含むクリックを拾い、GA4 イベント contact として送る。BtoB は電話問い合わせが一定割合を占めるため、キーイベント化を推奨します
  3. 主要 CTA ボタンのクリックを cta_click として送るのも任意で有効です

イベントは欲張らないのがコツです。BtoB サイトの計測は、page_view + 拡張計測 + generate_lead + contact の 4 系統で 8 割の意思決定に足ります

STEP 6: 動作確認 — 何が見えれば成功か — 25 分

設定の最後は検証です。次の 3 つが確認できれば完成です。

  1. GTM プレビュー(Tag Assistant)で、対象ページを開いて Google タグが発火していること。テストフォームを送信して hubspot_form_success → GA4 イベントタグの順に発火すること
  2. GA4 の DebugView で、page_viewgenerate_lead が届いていること
  3. リアルタイムレポートで page_view が 1 ページ表示につき 1 回だけ増えること(2 回増えるなら STEP 3 の二重配信が残っています)

トラブルシュート表

症状 原因の候補 対処
page_view が 2 回計上される CMS ネイティブ連携と GTM の併用 ネイティブ連携を OFF(STEP 3)
フォーム送信イベントが発火しない iframe 問題 / リスナーのトリガーが遅い リスナーのトリガーを Initialization にする(STEP 4)
サブドメイン間でセッションが切れる ストリーム分割 or 測定 ID 不一致 1 ストリームに統合し同一 ID を配信(STEP 1)
参照元に自社ドメインが出る self-referral データストリーム → タグ設定 → 「不要な参照のリスト」に自社ドメインを追加
検索データが GA4 に出ない Search Console 連携の反映ラグ 連携から約 48 時間待つ。ラグ中の「出ない」は正常

Search Console 連携やレポート反映には約 48 時間のラグがあります。設定直後に「出ない」と判断して設定をいじり直すのが、検証フェーズでいちばん多い手戻りです。

補足: Consent Mode v2 は今やるべきか

「同意バナーと Consent Mode も一緒に入れるべきですか」。2026 年時点の国内 BtoB での humbulls の判断はこうです。

配信先が国内のみで Google 広告も未連携なら、Consent Mode の実装は後回しで実害がありません。Consent Mode の同意拒否データを復元する行動モデリングには発火閾値があり(同意拒否 1,000 件/日 × 7 日など)、小規模 BtoB サイトはそもそも閾値に届かないためです。実効的に効くのは EEA / UK 向け配信がある場合です。

将来 Google 広告や欧州向け配信が始まったら、GTM 側の設定だけで basic から advanced まで引き上げられます。最初から GTM に一本化しておく利点は、この移行が GTM 内で完結することにもあります。

まとめ

GA4 の BtoB リード計測は、1 プロパティ + 1 ストリーム + GTM 一本化の器を作り、フォーム送信を generate_lead としてキーイベント化するところまでがワンセットです。所要は約 2 時間、費用は無料。つまずきどころは「二重計上」「iframe フォーム」「48 時間ラグ」の 3 つで、いずれも本文の STEP に回避策を書きました。

計測が回り始めたら、AI 検索時代の流入チェックリストで ChatGPT / Claude 経由の流入を確認し、月次レポートの AI 自動化へ進むと、数字が意思決定につながり始めます。自社での構築に不安がある場合は、お問い合わせから計測環境の構築相談も受け付けています。

🤖 AI 実行キット

本文の手順を、自社の条件に合わせて一括実行するためのキットです。プロンプトは Claude(ブラウザ版で可)にコピペすれば動きます。

キット① 自社の計測要件から GA4 イベント設計表と GTM 設定手順を作る — 20 分

種別
実装キット(イベント設計表 + 設定手順書が出る)
使うもの
Claude(ブラウザ版で可)。Claude Code があれば、出力された手順をそのまま実装まで進められます
事前に用意するもの
自社サイトの URL、使っている CMS とフォームツールの名前、リードとして数えたい行動のメモ(「資料 DL も数えたい」程度の粒度で構いません)

プロンプト

BtoB サイトの GA4 リード計測を設計してください。

【前提知識(必ずこの前提に従うこと)】
- GA4 プロパティは 1 個、ウェブデータストリームは 1 本だけ作る
  (サブドメインがあっても分けない。同一測定 ID を全サイトに配信する)
- GA4 の配信は GTM 経由に一本化する。CMS のネイティブ GA4 連携は OFF
  (併用すると page_view が二重計上されるため)
- 旧「GA4 設定タグ」は廃止済み。GTM では「Google タグ」を使う
- フォーム送信は generate_lead イベントとしてキーイベント化する
- iframe 型フォーム(HubSpot 等)は GTM 標準のフォーム送信トリガーでは
  発火しない。グローバルフォームイベントのリスナーで dataLayer に push する
- 氏名・メール・電話などの PII は GA4 パラメータに送らない
- tel: / mailto: クリックは contact イベントとして計測する

【自社の状況】
- サイト URL: [https://example.co.jp(記入例)]
- サブドメイン: [blog.example.co.jp がある / ない(記入例)]
- CMS: [HubSpot CMS Starter(記入例)]
- フォーム: [HubSpot フォーム(記入例)]
- リードとして数えたい行動: [問い合わせフォーム送信、資料 DL、電話タップ(記入例)]

【出力】
1. イベント設計表(Markdown の表)。列は
   「イベント名 / 取得方法(拡張計測・GTM タグ・リスナー) / キーイベント化の要否 / パラメータ」
2. GTM の設定手順を、作成する変数・タグ・トリガーごとに番号付きで
3. フォームが iframe 型の場合は、リスナーのコードを含めること
4. 動作確認チェックリスト(Tag Assistant / DebugView / 二重計上チェックの 3 点)

出力の確認ポイント

  • データストリームが 1 本になっているか。サブドメインごとに分ける設計が出てきたら、前提知識の 1 行目を再提示して修正させてください
  • キーイベントが 1〜3 個に絞れているか。10 個のイベント全部をキーイベント化する設計は、レポートでコンバージョンの意味が薄まります
  • リスナーコードに自社フォームツールのイベント名が使われているか。HubSpot 以外のツールの場合、そのツールの埋め込みイベント仕様を「◯◯のフォーム送信イベントの仕様を調べて反映して」と追加指示します

うまくいかないとき

  • 手順が自社 CMS と噛み合わない → CMS のテンプレート構成(共通ヘッダーのファイル名など)を貼り付けて再実行すると、設置手順が具体化します
  • 出力の設定を GTM に入れても発火しない → GTM プレビューのスクリーンショットを貼り、「どのタグがどのトリガーで止まっているか診断して」と依頼してください

参考文献

こんな記事も読まれています