プライバシー意識の高まりとともに、GoogleタグマネージャーやGoogleアナリティクスをブロックするユーザーが出現しています。サイトの運営側としてはできるだけ正確な数値が欲しいのですが、そのためだけにオリジナルの分析ツールを導入するのは避けたいもの。そこで役立つのがブロックを貫通してGoogleアナリティクスにデータを収集させるツール「Google Tag Manager & Google Analytics Proxy」です。
GitHub – blaumedia/go-gtm-ga-proxy: Bypass any tracking-blocking browser plugins with this first-party-tracking-proxy for Google Tag Manager and Google Analytics.
https://github.com/blaumedia/go-gtm-ga-proxy
ブラウザのトラッキングをブロックする機能は、通信相手を確認してGoogleのドメインだった場合にブロックするという実装が行われています。そこで、サイトと同じドメインでプロキシサーバーを立て、Googleへのアクセスなのかサイト閲覧に必要なアクセスなのかを分からなくしてしまおうというのが今回のアプリの作戦というわけ。
詳しい図は下記の通り。まずタグマネージャーへのアクセスを同じドメイン内のプロキシ宛に書き換えます。するとプロキシが代わりにGoogleのサーバーにリクエストを飛ばし、返ってきたスクリプトのGoogle関連のドメイン部分を自分のアドレスに書き換えてブラウザに戻します。
タグマネージャーがアナリティクスのスクリプトをリクエストする場合も同様です。
アナリティクスへのデータ送信も同じドメイン内のプロキシサーバー宛になっているため、ブラウザ側からは何のアクセスなのか簡単には判断できません。また、プロキシサーバーからデータを送信する際に元のクライアントのIPアドレスを付与することでプロキシしていない時と同様にデータを収集することができるというわけです。
本当に動くのか実際に試してみました。まず検証用に、タグマネージャーのコードだけが入ったウェブページを用意します。
このページにアクセスしてみると、「タグマネージャー」→「アナリティクス」の順番でアクセスが行われているのが分かります。アクセス先はもちろん「googletagmanager.com」と「google-analytics.com」となっています。
Google Tag Manager & Google Analytics ProxyはDockerを利用して起動するため、下記のリンクから自分の環境に合った方法でDockerをインストールします。
Install Docker Engine | Docker Documentation
https://docs.docker.com/engine/install/
今回はCentOSを利用するため、下記のコマンドを入力しました。
sudo yum install -y yum-utils
sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl start docker
Dockerが起動できたらGithubのページのコマンドを入力してプロキシサーバーを立ち上げます。ENDPOINT_URIはプロキシサーバーにアクセスする際のアドレスに、GTM_IDSはタグマネージャーのIDに、COOKIE_DOMAINはサイトのドメイン名に書き換えればOK。
また、サーバーの設定でプロキシへのアクセス手段を用意する必要があります。今回は「/goproxy」パスにアクセスするとプロキシサーバーにアクセスするようにApacheの設定ファイルを書き換えました。
タグマネージャーのアドレスを「ドメイン/goproxy/js/gtm.js~」に書き換え、最後のタグマネージャーのIDから先頭の「GTM-」の部分を削除します。
これでアクセスしてみると、タグマネージャーのスクリプトはプロキシに成功しました。しかしアナリティクスの方はまだGoogleのサーバーにアクセスしてしまっています。
Google Tag Manager & Google Analytics Proxyは最終更新が2021年となっており、記事作成までの2年の間にタグマネージャーのスクリプトが代わってしまったせいなのか、下図の「Replace Google Domains in the Script」の部分がうまく働いていない模様です。
この記事のタイトルとURLをコピーする