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上の呼び名) | データレイヤーの変数名 |
|---|---|
| position | position |
| link_id | link_id |
| link_domain | link_domain |
| link_text | link_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つだけです。
- データレイヤー変数を作る(送られてくるキーの数だけ)
- カスタムイベントトリガーを作る(イベント名を一致させる)
- GA4イベントタグを作る(Googleタグではなく「GA4 イベント」)
+ GA4側でカスタムディメンションを登録する(これをしないと値が見えない)
混乱の原因は、古い解説記事・新しい管理画面・似た名前のタグの3つが混ざっていたことでした。仕組みが分かってしまえば単純です。
計測ができるようになると、「どのボタンが押されているか」が数字で見えるようになります。推測でCTAをいじるのをやめて、データで判断できるようになるのがいちばんの収穫でした。
よくある質問
Q1. GA4のタグを2つ作る必要はありますか?
すでにGA4での計測が動いているなら、追加で作るのはGA4イベントタグだけです。Googleタグ(接続用)は既存のものがそのまま使われます。
Q2. イベントは届いているのに、パラメータの中身が見えません
GA4側でカスタムディメンションを登録していない可能性が高いです。登録後、反映まで24〜48時間ほどかかります。DebugViewであれば登録前でも中身を確認できます。
Q3. プレビューでは動くのに本番で動きません
GTMの「公開」を押し忘れているケースがほとんどです。プレビューは自分の環境だけで動く仮の状態なので、公開して初めて本番に反映されます。
Q4. イベント名は自由に決めていいですか?
自由ですが、サイト側が送っている名前と完全に一致させる必要があります。大文字小文字やアンダースコアの違いでも一致しなくなります。
Q5. GTMを使わず、サイトに直接GA4のコードを書く方法ではだめですか?
それでも動きます。ただし計測の変更のたびにサイトのコードを触ることになります。GTMを挟んでおくと、以降の変更は管理画面だけで完結するので、長く運用するなら分けておくほうが楽です。
関連記事
- AIアフィリエイトの始め方【2026年版】 — 計測を含めた、サイト運営の全体像
- 「クロール済み – インデックス未登録」と1年戦った話
- 小さな比較サイトをAstroで作る