GTMを使ってGA4のsession_id、client_idを取得する
2022年11月9日
ライター:西村 彰悟
デジタルマーケティングエンジニア ジャイン・ヴィボル (JAIN Vibhor)のコラム「Obtain GA4 session_id, client_id via GTMをデジタルマーケティングエンジニア 西村 彰悟が和訳したものになります。

このコラムではGA4が持つ session_id, client_id のような情報を取得する方法をご共有いたします。GA4ライブラリにより自動生成されるこれらの情報はイベントやコンバージョンを特定のユーザーや流入元に紐づける上で重要な役割を果たします。

GA4でこれらのパラメータを取得する方法はこれまでの Universal Analytics (UA) とは少し異なり、やや難しいものになっています。GA4ではUAのようなcustomTaskメソッドやtrackerオブジェクトがなく、これらの値を取得するためのAPIが非同期で動作するためです。

本コラムの内容はGA4の実装がGTMのみで行われていることを前提として解説を進めます。

  1. この方法を活用できる状況の例
  2. STEP1 – 既に実装済みのGTMタグの編集
  3. STEP2 –  gtag(“get”,…) APIを使用したカスタムHTMLタグの作成
  4. STEP3 –  dataLayerへの値の送信
  5. 実装結果
  6. これらの情報をGA4のカスタムディメンションに送るべきか?

この方法を活用できる状況の例

session_id, client_id のような情報は何もしなくてもBigQueryエクスポートで出力されていますが、たとえばこれらの値をクライアント側で取得して他のシステムやCRM側に保存・活用したい状況で役に立つ状況があるでしょう。

1つの具体例としては、Measurement Protocolと一緒に活用する状況です。GA4のMeasurement Protocol は2022年10月下旬より session_id パラメータをサポートしており、Measerment Protocolイベントがセッションスコープのレポートに表示されるようになりました。たとえば顧客が広告クリックやGoogle検索などでオンラインストアに訪問した後実店舗で購入した場合に、このオフラインの購入イベントをユーザーを最初にオンラインストアに集客した実際の流入元に紐づけることができます。

同様に、リード獲得となる顧客のフォーム送信時にこれらの値をフォームの隠しフィールド <input type="hidden"> の値としてCRMに渡すことも可能です。

この実装方法を3ステップに分けてご説明いたします。

STEP1 –  既に実装済みのGTMタグの編集

まず、以下の黄色でハイライトしたコードをサイト内に実装したGTMタグの上に追加してください。

<script>
window.dataLayer = window.dataLayer || [];
function ga4(){dataLayer.push(arguments);}
</script>
<!-- Google Tag Manager -->
// your GTM tag here
// . . .
// . . .
<!-- End Google Tag Manager -->

このコードはgtag APIコマンドにアクセスするためのカスタムコマンド ga4() を初期化するためのものです。

こちらのサンプルでは ga4() を使いましたが、 gtag() のようにGoogleのタグで既に予約されている名前でなければその他の任意の名前を使用することも可能です。

STEP2 –  gtag(“get”,…) APIを使用したカスタムHTMLタグの作成

次に、GTMでカスタムコマンド ga4() (先ほどのSTEP1で用意したもの)を利用して必要なGA4パラメータの値を取得するカスタムHTMLタグを新規作成します。

<script>
  ga4("get", "YOUR-GA4-MEASUREMENT-ID", "session_id", function(field){ 
    // console.log(field)
    window.dataLayer.push({ event: "session_id_ready", session_id: field });
  })
  ga4("get", "YOUR-GA4-MEASUREMENT-ID", "client_id", function(field){ 
    // console.log(field)
    window.dataLayer.push({ event: "client_id_ready", client_id: field });
  })
</script>  

コード内の YOUR-GA4-MEASUREMENT-ID のテキストはあなたが実際に使用する “G-“から始まる GA4 Measurement IDのものに置き換えてください。

STEP3 – dataLayerへの値の送信

最後のステップでは上記のSTEP2で新規作成したカスタムHTMLタグをGA4設定タグの直後にクリーンアップタグとして発火するように設定します。

最後のポイントはとても重要です。GA4ライブラリの動作仕様から、先ほど作成したカスタムHTMLタグはページ上で最初にGA4イベントが発生した後に発火するように設定して下さい。(一般的な設定であれば最初のGA4イベント送信はGA4設定タグの発火時に自動送信されるpage_viewイベントにより発生します)

いくつかのGTM設定ではGA4の設定タグとpage_viewイベントタグを別のタグに分けている場合があります。(GA4設定タグの「この設定が読み込まれるときにページビューイベントを送信する」が無効にされている場合)このときは先ほど作成したカスタムHTMLタグを(GA4設定タグではなく、)page_viewイベントタグの発火直後に発火するように設定してください。

実装結果

ここまでの実装を完了してGTM設定を公開すれば、ページが読み込まれたときに以下の内容を確認できるようになります。

ブラウザのデベロッパーツール —> Console :  session_id と client_id の値がdataLayerで使用可能になっている

GTM プレビュー画面 : session_idclient_id の値がdataLayerに出力されていること

ご覧の通り現在これらの値はdataLayerで利用可能になったため、今後は必要に応じてGTM内のタグやトリガーから自由にsession_idclient_id の値を利用することができます。(CRMに送信する、他のタグ設定内で利用するなど)

これらの情報をGA4のカスタムディメンションに送るべきか?

最後に、本コラムの内容からより粒度の高いレポーティングをGA4の画面上で行う(ユーザー単位やセッション単位のレポート作成など)目的でsession_idclient_idの値をGA4のカスタムディメンションに送信することができると考えた方もいらっしゃると思います。このような活用方法はUniversal Analyticsでも多く見られますが、GA4への送信は以下の理由により推奨しかねます。

  • より粒度の高いレポーティングを行いたい場合、これらの値は既にBigQueryエクスポートされた情報に含まれています
  • session_id, client_idの値は基本的に乱数であり、これら単体でPIIとはならない可能性がありますが、これらのデータの使用方法と他のユーザーデータと組み合わせによってはPIIに分類され、GDPR、CCPAに基づく法的リスク、プライバシー侵害のリスクをもたらす可能性があります。
  • 最後に、ユーザーのトラフィック量によってこれらの情報はウェブストリームの高基数ディメンション(値のバリエーションが多数存在しているディメンション)となる可能性があり、GA4の標準レポートに影響を与える可能性があります。GA4では、ユニーク値のバリエーションが一日の最大しきい値(現在のところディメンションあたり500種類)を超えるディメンションがある場合、GA画面上の標準レポートでは「(other)」行に結果が集約されます。また、高基数ディメンションを含まないレポートであっても他のすべての標準レポートが同様に (other) に集約されてしまいます。このため、多くのバリエーションが発生するカスタムディメンション設定を行う場合は注意が必要です。