Googleタグマネージャー「データレイヤー」完全攻略ガイド:SPA(シングルページアプリケーション)時代の最適な設置と高度な活用法

Googleタグマネージャー「データレイヤー」完全攻略ガイド:SPA(シングルページアプリケーション)時代の最適な設置と高度な活用法を解説しております。

目次

はじめに

この記事は、Webサイトの計測設計を担当されている方や、Googleタグマネージャー(GTM)の運用をさらに一歩進めたいと考えているエンジニア・マーケターの方を対象としています。

この記事を理解するための知識

  • GTMの基本的な操作(タグ、トリガー、変数の作成)ができる。
  • HTML/JavaScriptの基礎知識があり、<script>タグの役割を理解している。
  • Googleアナリティクス4(GA4)などの計測ツールで、カスタムイベントやパラメータの必要性を感じている。

この記事を読んでわかること

  • データレイヤー(dataLayer)の根本的な仕組みと、GTMへの情報伝達プロセス。
  • 「イベントあり」と「イベントなし」の記述が、計測タイミングに与える決定的な違い。
  • GA4の初期化設定に間に合わせるための、理想的なコードの設置場所。
  • SPA(シングルページアプリケーション)における仮想ページビューの具体的な実装手順。

データレイヤー(dataLayer)の正体とは

Googleタグマネージャーを使いこなす上で、「データレイヤー」の理解は避けて通れません。技術的には、データレイヤーとは「JavaScriptの配列(Array)」に過ぎません。しかし、GTMにとっては、Webサイトから情報を吸い上げるための「専用のポスト」や「共通の言語」としての役割を果たします。

なぜデータレイヤーが必要なのか

通常、Webサイト上の「商品名」や「ユーザーID」をGTMで取得しようとする場合、HTML要素を直接指定する(DOM指定)方法があります。しかし、サイトのデザイン変更でHTML構造が変わると、計測が止まってしまうリスクがあります。

データレイヤーを使えば、サイトの見た目とは独立した「データ専用の層」を作ることができるため、堅牢で正確な計測が可能になります。

データレイヤーの基本構造:変数とイベント

データレイヤーへ情報を送る(プッシュする)際の基本形は、以下のJavaScriptコードです。

JavaScript
window.dataLayer = window.dataLayer || [];
dataLayer.push({
  'user_type': 'premium',
  'purchase_value': 5000
});Code language: JavaScript (javascript)

ここで重要なのは、データレイヤーには「変数(データそのもの)」と「イベント(タイミングの合図)」の2種類が含まれるという点です。

データの「キー」と「値」

上記の例では、user_type が「キー」、premium が「値」です。GTM側で「データレイヤー変数」として user_type を登録すれば、GTM内でその値(premium)を自由に使用できるようになります。

特別なキー「event」

データレイヤーには、一つだけ特別な意味を持つキーがあります。それが event です。

JavaScript
dataLayer.push({
  'event': 'custom_button_click',
  'button_name': 'contact_us'
});
Code language: JavaScript (javascript)

event キーを含めると、GTMに対して「今、特定のイベントが発生したぞ!」という通知を送ります。GTMはこの通知を合図(トリガー)として、タグを配信することができます。

GTMが自動で発生させるイベントの正体

GTMのコンテナスニペット(設置コード)が読み込まれると、実は背後で自動的に5つのイベントがデータレイヤーにプッシュされています。これらは、ページが読み込まれるまでの「健康診断」のようなものです。

  1. gtm.init_consent(同意の初期化): 同意管理モードの設定。
  2. gtm.init(初期化): GTMが動き出す最初の瞬間。
  3. gtm.js(コンテナ読み込み): GTMのメインプログラムが読み込まれたタイミング。
  4. gtm.dom(DOM Ready): HTML構造の読み込みが完了したタイミング。
  5. gtm.load(Window Load): 画像や関連ファイルも含め、すべてが読み終わったタイミング。

多くの初心者が陥る罠は、「自分で書いたカスタムイベントは、ページの一番上に書けば一番最初に実行される」と思い込んでしまうことです。実際には、GTMの仕様上、カスタムイベントは必ず gtm.init などのシステムイベントよりも後に処理される優先順位になっています。

「イベントなし」のデータレイヤーが最強の武器になる理由

ここで、本記事の核心に触れます。データレイヤーに event キーを含めない書き方の重要性です。

計測の「手遅れ」を防ぐ

例えば、GA4で「ログイン状態」という情報をすべてのイベントに付与したいとします。GA4のタグは通常 gtm.init や gtm.js のタイミングで動きます。

もし、GTMスニペットよりもにイベント付きのデータレイヤーを書くと、GA4タグが動いた後に情報が届くため、最初のページビュー計測に「ログイン状態」が載りません。

解決策:スニペットより「上」に「イベントなし」で書く

以下のように、GTMの設置コードよりも前に、event を含めない形式で記述します。

HTML

<script>

  window.dataLayer = window.dataLayer || [];

  dataLayer.push({

    'user_id': 'ID_12345',

    'membership': 'gold'

  });

</script>

<script>(function(w,d,s,l,i){ ... })(window,document,'script','dataLayer','GTM-XXXX');</script>Code language: HTML, XML (xml)

このように記述すると、GTMが動き出す(gtm.init)瞬間に、すでにデータレイヤーの箱の中にデータが入っている状態になります。これにより、GA4の初期設定タグでも確実にその値を拾うことができるのです。

【応用編】SPA(シングルページアプリケーション)での活用術

最近主流のReactやVue.jsなどで構築されたSPAでは、従来の「ページ遷移」が発生しません。URLは変わってもブラウザの再読み込みが起きないため、GTMの「ページビュー」トリガーが一度しか反応しないという問題が発生します。

ここで活躍するのが、データレイヤーを使った「仮想ページビュー(Virtual Page View)」です。

SPAでの実装ステップ

  1. アプリ側でのプッシュ実装 ページ(コンポーネント)が切り替わるタイミングで、以下のようなコードを実行するようエンジニアに依頼します。
JavaScript

dataLayer.push({

  'event': 'virtual_pageview',

  'page_path': '/new-content-path',

  'page_title': '新しいコンテンツのタイトル'

});Code language: JavaScript (javascript)
  1. GTMで「カスタムイベント」トリガーを作成 イベント名を virtual_pageview としたトリガーを作成します。
  2. GA4設定の調整 GA4の設定タグ(または設定変数)で、page_location などのフィールドに、データレイヤー変数から取得した page_path を割り当てます。

この手法により、物理的なページ遷移がないSPAでも、ユーザーがどの画面をどれくらい見たかを正確に可視化できるようになります。

まとめ:正確なデータが正しい意思決定を生む

データレイヤーは、単なるコードの断片ではありません。Webサイトと計測ツールを正しくつなぐ「神経系」です。

  • タイミングが命: ページ読み込み時に必要なデータは、GTMより「上」に「イベントなし」で置く。
  • 動作のきっかけ: ユーザーのアクション(クリックやSPAの遷移)には「event」キーを使ってGTMに知らせる。
  • エンジニアとの連携: 計測の目的(何を、いつ、なぜ知りたいか)を共有し、適切な形式でデータレイヤーを実装してもらう。

この基本をマスターすることで、あなたのWeb解析は劇的に精度を増し、より深いユーザー理解へとつながるはずです。

【詳細解説】eコマースにおけるデータレイヤーのスキーマ

ECサイトの運営において、データレイヤーの真価が問われるのは「購入(purchase)」イベントです。GA4が推奨するスキーマ(構造)は非常に厳格です。

JavaScript

dataLayer.push({

  'event': 'purchase',

  'ecommerce': {

    'transaction_id': 'T_12345',

    'value': 12000,

    'currency': 'JPY',

    'items': [

      {

        'item_id': 'SKU_999',

        'item_name': '高機能ランニングシューズ',

        'price': 12000,

        'quantity': 1

      }

    ]

  }

});Code language: JavaScript (javascript)

この際、注意すべきは「階層構造」です。ecommerce という親キーの中に items という配列を入れる形式を崩すと、GA4の標準レポートにデータが反映されません。また、数値型であるべき value が文字列(”12000″)として送られていないか、エンジニアとのダブルチェックが不可欠です。

計測を支える「デバッグ」の極意

実装したデータレイヤーが正しく動いているか確認するには、GTMの「プレビューモード」を使い倒す必要があります。

  1. Summaryウィンドウを確認: 左側のイベントリストに、自分が設定した event 名が表示されているか。
  2. Data Layerタブをチェック: そのイベントを選択した状態で、右側の Data Layer タブを開き、期待した通りのJSON構造でデータが届いているか。
  3. Variablesタブで最終確認: GTM側で作成した変数が、データレイヤーの値を正しく抽出して「値」として保持できているか。

もし、Data Layerタブには値があるのに Variablesタブが undefined になっているなら、それはGTM側の「データレイヤー変数」の設定名(ドット記法など)が間違っている証拠です。

お問い合わせ

    この記事も読まれています
    記事一覧へ