「GAM(Google Ad Manager)のkey-valueを使って、GTM側のタグ発火を制御したい」——広告配信とタグ管理を連携させようとするメディアサイトでよくある要件です。しかし、GPT(Google Publisher Tag)とGTMはそれぞれ非同期に動くため、素直に実装するとタイミング次第で制御が壊れるという落とし穴があります。この記事では、典型的な失敗パターンと対処法を解説します。
例えば「有料会員には特定のタグを発火させない」ために、ページ側でGPTに渡しているkey-value(例: custom_flag)をGTMのトリガー条件でも使いたい、というケースです。よくある実装がこれです。
<script>
googletag.cmd.push(function() {
// GPTからターゲティング値を取得してdataLayerへ渡す
var v = googletag.pubads().getTargeting('custom_flag');
window.dataLayer = window.dataLayer || [];
dataLayer.push({
'event': 'custom_flag_ready',
'custom_flag': v[0] || ''
});
});
</script>
なお、googletag.cmd のキューは登録順に実行されるため、このスニペットは setTargeting() をpushしている処理より後に配置する必要があります(先に置くと空の値が返ります)。
一見正しく見えますが、これがタイミング依存で壊れます。
googletag.cmd.push() の中身は、gpt.jsの読み込み完了後に実行されます(gpt.jsがすでにロード済みの場合はほぼ即時に実行されます)。gpt.jsはasyncで読み込まれるため、回線やページ構成によっては、GTMの「DOM Ready」や「ページビュー」トリガーが先に評価され、その時点で custom_flag はdataLayerに存在しません。結果、「一部のユーザーだけ制御が効かない」という再現困難な不具合になります。
GTMでは、dataLayer変数が未定義(undefined)のときの評価が演算子によって異なります。
| 演算子 | undefinedのときの評価 |
|---|---|
| 「等しい」「含む」 | false(発火しない) |
| 「等しくない」 | true(発火する) |
つまり「custom_flag が restricted と等しくない場合に発火」という条件は、値が間に合わなかった場合に発火してしまう。抑制したいユーザーにこそタグが動く、という最悪の壊れ方をします。逆にこの挙動を理解して条件を設計すれば、フェイルセーフとして使うこともできます。
根本対応は「GPTのgetTargeting()に依存しない」ことです。key-valueの元の値(会員ステータス等)はサーバー側が知っているはずなので、GTMスニペットより前に、同期スクリプトで直接dataLayerへ出力します。
<head>
<script>
// GTMスニペットより前に置く
// ※ 'restricted' の部分は、CMSやテンプレートエンジンで
// サーバー側の値を埋め込んで出力する(例: '<?= $user_flag ?>')
window.dataLayer = window.dataLayer || [];
dataLayer.push({ 'custom_flag': 'restricted' });
</script>
<!-- この後にGTMスニペット -->
</head>
これならGTMコンテナ読み込み時点で値が確定しており、ページビュー系トリガーでも安全に参照できます。GPT側の setTargeting() は従来どおり広告配信用に維持し、「広告配信の制御」と「タグ発火の制御」でデータの受け渡し経路を分けるのが設計の要点です。
ページビュー系トリガーを諦めて custom_flag_ready のようなカスタムイベントトリガーに寄せることです。値のpushとイベント発火が同時なので、タイミング問題は起きません。ただし全タグのトリガーを見直す必要があり、影響範囲は大きくなります。
GPTとGTMの連携不具合は「たまに起きる」「特定環境でだけ起きる」形で現れるため、原因特定に時間を溶かしがちです。CMSの制約でheadを触れない、外部ベンダー管理のタグが混在している、といった実サイト特有の事情が絡むと、設計の選択肢はさらに限られます。同様の構成で悩んでいる場合は、タグ構成全体の棚卸しから始めることをおすすめします。
広告配信基盤(GAM/GPT)とタグ管理(GTM)の連携設計は、Publidiaのコンサルティングでもご支援しています。
相談してみる