Google の新しいタグに関するドキュメントをご確認いただきありがとうございます。このサイトは公開ベータ版です。(フィードバック

データレイヤー

データレイヤーは、Google タグ マネージャーと gtag.js でタグに情報を渡すために使用するオブジェクトです。イベントまたは変数を、データレイヤーを介して渡したり、変数の値に基づいたトリガーを設定したりすることができます。

たとえば、purchase_total の値が 100 ドルを上回った際、またはボタンのクリックなどの特定のイベントが発生した際にリマーケティング タグを配信する場合は、そのデータをタグで使用できるようにデータレイヤーを設定することができます。データレイヤー オブジェクトは JSON として構成されています。例:

{
  event: "checkout_button",
  gtm: {
    uniqueEventId: 2,
    start: 1639524976560,
    scrollThreshold: 90,
    scrollUnits: "percent",
    scrollDirection: "vertical",
    triggers: "1_27"
  },
  value: "120"
}

Google タグは、変数、トランザクション情報、ページカテゴリなどのページ全体に分散しているシグナルを分析するのではなく、データレイヤーに追加された情報を体系的かつ予測可能な方法で簡単に参照できるように設計されています。データレイヤーを実装して変数と関連する値を追加すると、タグで必要とされるときに、関連するデータを使用できるようになります。

インストール

タグ マネージャーをウェブページにインストールするには、データレイヤーを作成する必要があります。以下のハイライト表示されたコードは、タグ マネージャーが読み込まれる前にデータレイヤーが確立されている場所を示しています。

<script>
window.dataLayer = window.dataLayer || [];
</script>
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXX');</script>
<!-- End Google Tag Manager -->

タグをサービスからコピーしてウェブページに追加する gtag.js の標準実装では、データレイヤーを設定するためのコードが提供されます。グローバル サイトタグのカスタム実装では、データレイヤー コードを、以下のハイライト表示した例に示すようにスクリプトの最初に追加します。

<!-- Global site tag (gtag.js) - Google Ads: CONVERSION_ID -->
<script async src="https://www.googletagmanager.com/gtag/js?id=AW-YYYYYY"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments)};
  gtag('js', new Date());

  gtag('config', 'AW-YYYYYY');
</script>

データレイヤー情報の処理方法

コンテナが読み込まれると、タグ マネージャーでキューに追加されたデータレイヤーのすべてのプッシュ メッセージの処理が開始されます。タグ マネージャーでは、先入れ先出しでメッセージが処理されます。つまり、各メッセージは受信された順にひとつずつ処理されます。メッセージがイベントの場合は、次のメッセージに進む前に、トリガー条件が一致したタグが配信されます。

gtag() 呼び出しまたは dataLayer.push() 呼び出しがページ、カスタム テンプレート、またはカスタム HTML タグのコードによって行われた場合、他の保留中のメッセージが評価された後に、関連付けられたメッセージはキュー追加にされて処理されます。つまり、更新されたデータレイヤー値が次のイベントで使用できるとは限りません。こうしたケースに対応するには、メッセージがデータレイヤーにプッシュされたときにメッセージにイベント名を追加してから、カスタム イベント トリガーを使用して、そのイベント名をリッスンします。

イベント ハンドラでデータレイヤーを使用する

dataLayer オブジェクトでは、event キーを使用してイベントの送信を開始します。

グローバル サイトタグとタグ マネージャーでは、event という特殊なデータレイヤー変数を使用します。ユーザーがウェブサイト要素を操作すると、JavaScript イベント リスナーでこのデータレイヤー変数に基づいてタグが配信されます。たとえば、ユーザーが購入確認ボタンをクリックしたときにコンバージョン トラッキング タグを配信することができます。イベントは、ユーザーがウェブサイト要素(リンク、ボタン、スクロールなど)を操作したときに呼び出すことができます。

この機能を実現するには、イベントの発生時に dataLayer.push() を呼び出します。dataLayer.push() でイベントを送信するための構文は次のとおりです。

dataLayer.push({'event': 'event_name'});

ここで、event_name には、'login'purchasesearch などのイベントを示す文字列を指定します。

測定するアクションが発生したときにイベントデータを送信するには、dataLayer.push() を使用します。たとえば、ユーザーがボタンをクリックしたときにイベントを送信するには、dataLayer.push() を呼び出すようにボタンの onclick ハンドラを変更します。

<button onclick="dataLayer.push({'event': 'login'});">Button 1</button>

データレイヤー変数をデータレイヤーに動的にプッシュすると、フォーム内で入力または選択された値、訪問者が再生している動画に関連付けられたメタデータ、訪問者がカスタマイズした商品(車など)の色、クリックされたリンクのリンク先 URL などの情報を取得できます。

この機能を利用するには、イベントの場合と同様に、push() API を呼び出してデータレイヤーにデータレイヤー変数を追加するか置き換えます。動的データレイヤー変数を設定するための基本的な構文は次のとおりです。

dataLayer.push({'variable_name': 'variable_value'});

この場合、'variable_name' には、設定するデータレイヤー変数の名前を示す文字列を指定し、'variable_value' には、設定または置き換えるデータレイヤー変数の値を示す文字列を指定します。

たとえば、訪問者が商品のカスタマイズ ツールを操作しているときに色の設定を含むデータレイヤー変数を設定するには、次の動的データレイヤー変数をプッシュします。

dataLayer.push({'color': 'red'});

複数の変数を一度にプッシュする

複数の変数とイベントをまとめてプッシュすることができます。

dataLayer.push({
  'color': 'red',
  'conversionValue': 50,
  'event': 'customize'
});

データレイヤー変数を保持する

ウェブページ間でデータレイヤー変数を保持するには、各ページの読み込みでデータレイヤーがインスタンス化された後に dataLayer.push() を呼び出して、データレイヤーに変数をプッシュします。コンテナの読み込み時にこれらのデータレイヤー変数をタグ マネージャーで使用できるようにするには、以下に示すように、タグ マネージャーのコンテナコードの前に dataLayer.push() の呼び出しを追加します。

<script>
window.dataLayer = window.dataLayer || [];

dataLayer.push({
 'event': 'Pageview',
 'pagePath': 'https://www.googleanalytics.dev/pancakes',
 'pageTitle': 'Pancake Event Signup',
 'visitorType': 'customer'
});
</script>
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXX');</script>
<!-- End Google Tag Manager -->

データレイヤー オブジェクト内で宣言された各変数は、ユーザーが現在のページに滞在している間に限り保持されます。複数のページに関連するデータレイヤー変数(visitorType など)は、ウェブサイトの各ページのデータレイヤーで宣言する必要があります。すべてのページのデータレイヤーに同じ変数セットを配置する必要はありませんが、一貫した命名規則を使用してください。たとえば、pageCategory という変数を使用して登録ページにページカテゴリを設定している場合は、商品ページと購入ページでも pageCategory 変数を使用する必要があります。

トラブルシューティング

データレイヤーに関するトラブルシューティングのヒントを、次にいくつかご紹介します。

window.dataLayer 変数を上書きしない: データレイヤーを直接使用すると(例: dataLayer = [{'item': 'value'}]))、dataLayer の既存の値が上書きされます。タグ マネージャーでは、ソースコードのできる限り最初の方の、コンテナ スニペットまたはオプティマイズのページ非表示スニペットの前で、window.dataLayer = window.dataLayer || []; を使用してデータレイヤーをインスタンス化する必要があります。dataLayer を宣言した後に値を追加するには、dataLayer.push({'item': 'value'}) を使用します。ページの読み込み時にタグ マネージャーでそれらの値を使用できるようにする必要がある場合は、dataLayer.push() の呼び出しも、タグ マネージャーのコンテナコードの前に配置する必要があります。

dataLayer オブジェクト名では大文字と小文字を区別する: 大文字と小文字を適切に区別せずに変数やイベントをプッシュしようとしても、プッシュは機能しません。

datalayer.push({'pageTitle': 'Home'});    // Bad (datalayer in lowercase)
dataLayer.push({'pageTitle': 'Home'});    // Good (dataLayer in camel case)

dataLayer.push は、有効な JavaScript オブジェクトを使用して呼び出す必要があります。データレイヤー変数名はすべて引用符で囲みます。

dataLayer.push({new-variable: 'value'});      // Bad - no quote marks
dataLayer.push({'new-variable': 'value'});    // Good - proper quote marks

異なるページで同じ変数名を使用する: 異なるページの同じコンセプトに異なる変数名を使用すると、必要なすべての場所で一貫性のあるタグを配信できなくなることがあります。

悪い例:

// Homepage:
dataLayer.push({'visitorType': 'low-value'});

// Checkout Page:
dataLayer.push({'visitor_type': 'high-value'});

良い例:

// Homepage:
dataLayer.push({'visitorType': 'low-value'});

// Checkout Page:
dataLayer.push({'visitorType': 'high-value'});

データレイヤーの名前を変更する

グローバル サイトタグまたはタグ マネージャーで開始されるデータレイヤー オブジェクトのデフォルトの名前は dataLayer です。データレイヤーで別の名前を使用する場合は、グローバル サイトタグまたはタグ マネージャーのコンテナ スニペットで、データレイヤー パラメータ値をご希望の名前に編集することができます。

gtag.js

URL に「l」という名前のクエリ パラメータを追加し、新しいデータレイヤー名(l=myNewName など)を設定します。グローバル サイトタグ スニペット内の dataLayer のすべてのインスタンスを新しい名前に更新します。

<!-- Global site tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-ZZZZZZ&l=myNewName"></script>
<script>
  window.myNewName = window.myNewName || [];
  function gtag(){myNewName.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-ZZZZZZ');
</script>

タグ マネージャー

コンテナ スニペットのデータレイヤー パラメータ値(下記のハイライト表示部分)をご希望の名前に置き換えます。

<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','myNewName','GTM-XXXXXX');</script>
<!-- End Google Tag Manager -->

名前を変更したら、データレイヤーへのすべての参照(スニペットの前にデータレイヤーを宣言する際や、.push() コマンドでデータレイヤーにイベントまたは動的データレイヤー変数をプッシュする際など)を、カスタム データレイヤー名を反映したものに変更する必要があります。

<script>
  myNewName = window.dataLayer || [];
  myNewName.push({'variable_name': 'variable_value'});
</script>

カスタム データレイヤー メソッド

データレイヤーに関数をプッシュすると、この関数が抽象データモデルに設定されて呼び出されます。この抽象データモデルでは、Key-Value ストアに値を設定および取得できるほか、データレイヤーをリセットする方法も提供されます。

set

抽象データモデルで set 関数を使用すると、get で取得する値を設定できます。

window.dataLayer.push(function() {
  this.set('time', new Date());
});

get

抽象データモデルで get 関数を使用すると、設定された値を取得できます。

window.dataLayer.push(function() {
  const existingTime = this.get('time');
  if (existingTime !== null) {
    // Change behavior based on whether or not this value exists...
  } else {
    // ...
  }
})

reset

抽象データモデルの reset 関数を使用することで、データレイヤーのデータをリセットできます。これは、オープン状態のままで、時間の経過とともにデータレイヤーのサイズが拡大し続けるページで最も役立ちます。データレイヤーをリセットするには、次のコードを使用します。

window.dataLayer.push(function() {
  this.reset();
})