GTMでdataLayerのイベントをGA4に送る方法【2026年版】GoogleタグとGA4イベントの違いでハマった記録

公開日: 2026/7/31

自分のサイトで「どのボタンが押されているか」を測ろうとして、Googleタグマネージャー(GTM)に初めて触りました。

サイト側の実装は終わっていて、あとは「GTMで受け皿を作るだけ」のはずでした。ところが、これが思ったより迷いました。理由は単純で、検索して出てくる解説記事と、いまの管理画面が違うからです。

結論から言うと、やることは3ステップだけで、慣れれば10〜15分で終わります。ただし初見だと「Googleタグ」と「GA4イベント」の違いだけで30分溶かします。自分がまさにそうでした。同じところで止まる人が減るように、つまずいた箇所ごと記録しておきます。

この記事の前提:サイト側で dataLayer.push() によるイベント送信がすでに実装済みで、GTMのコンテナも設置済みという状態から始めます。画面表示は2026年7月時点のものです。GTMのUIは変わることがあるため、名称が違う場合は読み替えてください。

前提:サイト側から飛んでくるデータ

今回は、アフィリエイトリンクがクリックされたときに、次のようなデータが飛んでくる想定です。

dataLayer.push({
  event: "click_affiliate",
  position: "hoge",
  link_id: "hogehoge",
  link_domain: "example.com",
  link_text: "登録する"
});

この position / link_id / link_domain / link_text の4つを、GA4側で見られるようにするのがゴールです。

ここで大事なのは、サイト側が送っているだけでは何も起きないという点です。GTMに「このイベントを受け取ったら、GA4に転送する」という設定を作って初めて、データがGA4に届きます。自分は最初、実装した時点で満足していて、しばらくデータがゼロのまま気づきませんでした。

ステップ1:データレイヤー変数を4つ作る

まず、飛んできた値をGTMが掴めるようにします。

GTMの左メニューから「変数」→ ユーザー定義変数の「新規」と進み、変数タイプで「データレイヤーの変数」を選びます。

タイプの一覧が長くて見つけにくい場合は、右上の検索窓に「データレイヤー」と入力すると絞り込めます。自分はここで最初スクロールし続けて時間を使いました。

作るのは次の4つです。「データレイヤーの変数名」は、サイト側が送っているキー名とそのまま一致させます。

変数名(GTM上の呼び名)データレイヤーの変数名
positionposition
link_idlink_id
link_domainlink_domain
link_textlink_text

変数名は自由に決められますが、キー名と同じにしておくほうが後で混乱しません

ステップ2:カスタムイベントトリガーを作る

次に、「このイベントが飛んできたら動く」という条件を作ります。

「トリガー」→「新規」→ トリガーのタイプで「カスタムイベント」を選び、イベント名にサイト側が送っている名前(この例では click_affiliate)をそのまま入力します。

発生場所は「すべてのカスタムイベント」のままでOKです。トリガーの名前は「アフィリンククリック」など、自分が分かるもので構いません。

ステップ3:GA4イベントタグを作る(ここが最大のハマりどころ)

「タグ」→「新規」→ タグの設定と進みます。

ここで「Google アナリティクス」を選ぶと、さらに2種類が表示されます

  • Google タグ … 測定IDを読み込んで、GA4との接続そのものを作るタグ
  • Google アナリティクス: GA4 イベント … イベントを送るタグ

今回選ぶのは「Google アナリティクス: GA4 イベント」です。自分は最初「Googleタグ」を選んでしまい、設定項目が想像と違うことに気づかないまま進めて、うまく動かずに戻ってきました。

すでにGoogleタグを設置済みなら、「Googleタグが見つかりました」といった表示が出ます。この場合、測定IDを入力し直す必要はありません。ここも「IDを入れる欄がないけど大丈夫か」と一瞬不安になったポイントでした。

イベント名には、サイト側と同じ click_affiliate を入れます。そのうえで「イベントパラメータ」を開いて、ステップ1で作った変数を割り当てます。

パラメータ名
position{{position}}
link_id{{link_id}}
link_domain{{link_domain}}
link_text{{link_text}}

最後に、トリガーにステップ2で作った「アフィリンククリック」を指定して保存します。

自分が実際にハマった3つのポイント

① 「Googleタグ」を選んでしまった

いちばん時間を使ったのがこれです。名前が似ているうえ、検索して出てくる古い記事では画面構成が違うため、どちらを選ぶべきか分かりませんでした。

Googleタグは「GA4との接続を作る」タグ、GA4イベントは「イベントを送る」タグと覚えると、迷わなくなります。すでに計測が動いているサイトなら、接続はもう存在しているので、作るのはイベント側だけです。

② トリガーが Initialization になっていた

気づかないうちに、配信トリガーが「Initialization - All Pages」になっていました。これは「ページを開いたときに毎回動く」という意味なので、クリックしていないのにイベントが飛ぶ状態になります。

正しくは、自分で作ったカスタムイベントトリガーだけを指定します。

③ 「例外」の欄に設定してしまった

GTMのトリガー設定には「配信トリガー」と「例外」の2つの欄があります。例外は「この条件のときは動かさない」という意味です。

ここに入れてしまうと、当然ながらイベントは飛びません。入れるのは配信トリガー、例外は空欄で問題ありません。

忘れがち:GA4側でカスタムディメンションを登録する

ここまでで、GTMからGA4へイベントは届くようになります。ただしこのままではパラメータの中身がGA4のレポートに出てきません

GA4の「管理」→ データの表示 →「カスタム定義」→「カスタムディメンションを作成」から、送っているパラメータを登録する必要があります。

ディメンション名(任意)範囲イベントパラメータ
CTA位置イベントposition
広告IDイベントlink_id
送客先イベントlink_domain

登録してもすぐには反映されず、データが見えるようになるまで24〜48時間ほどかかります。設定した直後に「値が空になっている」と焦る必要はありません。

動作確認のやり方

保存したら、GTMの右上にある「プレビュー」を押します。自分のサイトが別ウィンドウで開くので、実際に対象のリンクをクリックしてみてください。

GTMのプレビュー画面の左側に click_affiliate が表示され、作ったタグが「Fired(配信済み)」になっていれば成功です。タグをクリックすると、送信されたパラメータの中身も確認できます。

さらにGA4側では、「管理」→「DebugView」または「リアルタイム」でイベントが届いているかを確認できます。ここまで見えたら、GTMの画面右上の「公開」を押して反映させます。

プレビューで動いていても、公開しないと本番には反映されません。これも見落としやすいポイントです。

まとめ:やることは3ステップだけ

整理すると、次の3つだけです。

  1. データレイヤー変数を作る(送られてくるキーの数だけ)
  2. カスタムイベントトリガーを作る(イベント名を一致させる)
  3. GA4イベントタグを作る(Googleタグではなく「GA4 イベント」

+ GA4側でカスタムディメンションを登録する(これをしないと値が見えない)

混乱の原因は、古い解説記事・新しい管理画面・似た名前のタグの3つが混ざっていたことでした。仕組みが分かってしまえば単純です。

計測ができるようになると、「どのボタンが押されているか」が数字で見えるようになります。推測でCTAをいじるのをやめて、データで判断できるようになるのがいちばんの収穫でした。

よくある質問

Q1. GA4のタグを2つ作る必要はありますか?

すでにGA4での計測が動いているなら、追加で作るのはGA4イベントタグだけです。Googleタグ(接続用)は既存のものがそのまま使われます。

Q2. イベントは届いているのに、パラメータの中身が見えません

GA4側でカスタムディメンションを登録していない可能性が高いです。登録後、反映まで24〜48時間ほどかかります。DebugViewであれば登録前でも中身を確認できます。

Q3. プレビューでは動くのに本番で動きません

GTMの「公開」を押し忘れているケースがほとんどです。プレビューは自分の環境だけで動く仮の状態なので、公開して初めて本番に反映されます。

Q4. イベント名は自由に決めていいですか?

自由ですが、サイト側が送っている名前と完全に一致させる必要があります。大文字小文字やアンダースコアの違いでも一致しなくなります。

Q5. GTMを使わず、サイトに直接GA4のコードを書く方法ではだめですか?

それでも動きます。ただし計測の変更のたびにサイトのコードを触ることになります。GTMを挟んでおくと、以降の変更は管理画面だけで完結するので、長く運用するなら分けておくほうが楽です。

関連記事