サーバーサイドタグでユーザーの地理的位置情報が空白になる問題の解決
2025-03-07
#はじめに
今更ながらサーバーサイドタグを導入したところ、ユーザーの地理的位置情報が空白になってしまったので、その対応方法をまとめてみました。
#背景
サーバーサイドタグを導入してGA4にデータを送信する設定をしましたが、Google Analyticsのダッシュボードを確認しても地理情報が空白になってしまいました。
いろいろと調べながら設定をやり直したりデバッグをしていましたが、期待した結果が得られませんでした。
改めて、サーバーサイドタグ導入前のGA4がどのようにユーザーの地理情報を取得していたのかを調査したところ、ブラウザから送信されるIPアドレスを基に位置情報を推定していることがわかりました。
サーバーサイドタグだと、IPアドレスは送信されていましたが、私の場合はKubernetesクラスタ内にサーバーサイドタグのコンテナを動作させているため、前段のリバースプロキシのプライベートIPアドレス(10.42.xxx.xxx)が送信されていました。
#GTMの変換機能でIPアドレスを上書きし、正しい地理情報をGA4へ送信
GTMでは、イベントデータを変換する機能があります。これを使って、IPアドレスを上書きしてGA4に送信することができます。
#ユーザーのIPアドレスが設定されているリクエストヘッダを変数に設定する
リクエストヘッダにユーザーのIPアドレスが設定されているかは、利用されている環境のロードバランサやリバースプロキシに依るので、それぞれの環境に合わせて設定します。
当社の場合、Cloudflareを利用しているので、CloudflareによってCf-Connecting-IpヘッダにユーザーのIPアドレスが設定されていました。
GTMに変数の設定をします。

- 変数のタイプを
リクエストヘッダに設定 - 名前を
Cf-Connecting-Ipに設定
#イベントデータを変換する
どのイベントデータのフィールドをユーザーのIPアドレスで上書きするかを設定します。
ip_overrideフィールドに設定すればよいことがわかります。
GTMに変換の設定をします。

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

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

最後に、リクエストタブのサーバーからの HTTP 送信リクエストで、変数に設定したIPアドレスが送信されているか確認します。
_uipというクエリーパラメタにIPアドレスが設定されていました。このパラメタについてはリファレンスを探しても見つからなかったです。
最終的にGAのダッシュボードで国、地域、市区町村などの情報が設定されていれば完了です。
#参考リンク
#まとめ
今回は、サーバーサイドタグを導入して、ユーザーの地理的位置情報が空白になってしまった問題への対応方法をまとめました。
GTMの変数と変換の設定を使って、ユーザーのIPアドレスを上書きしてGA4に送信することができました。
