サーバーサイドタグでユーザーの地理的位置情報が空白になる問題の解決

GTM
GA4

2025-03-07

#はじめに

今更ながらサーバーサイドタグを導入したところ、ユーザーの地理的位置情報が空白になってしまったので、その対応方法をまとめてみました。

#背景

サーバーサイドタグを導入してGA4にデータを送信する設定をしましたが、Google Analyticsのダッシュボードを確認しても地理情報が空白になってしまいました。
いろいろと調べながら設定をやり直したりデバッグをしていましたが、期待した結果が得られませんでした。
改めて、サーバーサイドタグ導入前のGA4がどのようにユーザーの地理情報を取得していたのかを調査したところ、ブラウザから送信されるIPアドレスを基に位置情報を推定していることがわかりました。

https://support.google.com/analytics/answer/6160484?hl=ja#zippy=%2C%E3%81%93%E3%81%AE%E8%A8%98%E4%BA%8B%E3%81%AE%E5%86%85%E5%AE%B9
https://support.google.com/analytics/answer/6160484?hl=ja#zippy=%2C%E3%81%93%E3%81%AE%E8%A8%98%E4%BA%8B%E3%81%AE%E5%86%85%E5%AE%B9 favicon support.google.com

サーバーサイドタグだと、IPアドレスは送信されていましたが、私の場合はKubernetesクラスタ内にサーバーサイドタグのコンテナを動作させているため、前段のリバースプロキシのプライベートIPアドレス(10.42.xxx.xxx)が送信されていました。

#GTMの変換機能でIPアドレスを上書きし、正しい地理情報をGA4へ送信

GTMでは、イベントデータを変換する機能があります。これを使って、IPアドレスを上書きしてGA4に送信することができます。

タグに提供するイベント パラメータを「変換」機能で制御する  |  Google Tag Manager - Server-side  |  Google for Developers
タグに提供するイベント パラメータを「変換」機能で制御する  |  Google Tag Manager - Server-side  |  Google for Developers favicon developers.google.com
タグに提供するイベント パラメータを「変換」機能で制御する  |  Google Tag Manager - Server-side  |  Google for Developers

#ユーザーのIPアドレスが設定されているリクエストヘッダを変数に設定する

リクエストヘッダにユーザーのIPアドレスが設定されているかは、利用されている環境のロードバランサやリバースプロキシに依るので、それぞれの環境に合わせて設定します。
当社の場合、Cloudflareを利用しているので、CloudflareによってCf-Connecting-IpヘッダにユーザーのIPアドレスが設定されていました。

GTMに変数の設定をします。

GTMの変数にユーザーIPアドレスのリクエストヘッダを設定する

  • 変数のタイプをリクエストヘッダに設定
  • 名前をCf-Connecting-Ipに設定

#イベントデータを変換する

どのイベントデータのフィールドをユーザーのIPアドレスで上書きするかを設定します。

一般的なイベントデータ  |  Google Tag Manager - Server-side  |  Google for Developers
一般的なイベントデータ  |  Google Tag Manager - Server-side  |  Google for Developers favicon developers.google.com
一般的なイベントデータ  |  Google Tag Manager - Server-side  |  Google for Developers

ip_overrideフィールドに設定すればよいことがわかります。

GTMに変換の設定をします。

GTMの変換の設定

  • 変換タイプをイベントを拡張に設定
  • 名前をip_overrideに設定
  • 前述で設定した変数を値に設定

#動作確認

GTMの設定ができたらプレビューモードを使って動作確認します。
イベントデータタブには、変換前の情報が表示されていました。ここでは、10.42.xxx.xxxが設定されていることがわかります。

GTMプレビューのイベントデータタブ

変数タブから、リクエストヘッダのCf-Connecting-Ipが設定されていることを確認します。ここでは、160.13.xxx.xxxが設定されていることがわかります。

GTMプレビューの変数タブ

最後に、リクエストタブのサーバーからの HTTP 送信リクエストで、変数に設定したIPアドレスが送信されているか確認します。
_uipというクエリーパラメタにIPアドレスが設定されていました。このパラメタについてはリファレンスを探しても見つからなかったです。

最終的にGAのダッシュボードで国、地域、市区町村などの情報が設定されていれば完了です。

#参考リンク

#GTMTips: Override Google Analytics 4 Fields In Server-Side GTM
You can use the GA4 tag in server-side Google Tag Manager to override some of the default fields set in the incoming data stream.
#GTMTips: Override Google Analytics 4 Fields In Server-Side GTM favicon www.simoahava.com
#GTMTips: Override Google Analytics 4 Fields In Server-Side GTM

#まとめ

今回は、サーバーサイドタグを導入して、ユーザーの地理的位置情報が空白になってしまった問題への対応方法をまとめました。
GTMの変数と変換の設定を使って、ユーザーのIPアドレスを上書きしてGA4に送信することができました。