AdWords が「Google 広告」になりました。これまで AdWords としてご利用いただいていたサービスの名前が「Google 広告」に変わりました。検索ネットワーク、ディスプレイ ネットワーク、YouTube などを対象にあらゆる広告サービスを提供いたします。詳細

295 人が現在オンライン
295 人が現在オンライン
Google アナリティクスのアカウント設定、プロパティ、ビューやフィルタ設定などについて、ユーザー同士で意見交換ができます。解析を通して浮かんだ質問やアイディアを投げかけ合って、よりデータ分析の知識を高めていきましょう。
ガイドを表示
star_border
返信

GoogleAnalyticsへの通信可否確認方法

初級者 ✭

CtoCのWebサービスで、GAの導入を検討しております。

利用者によっては弊社ドメインのみアクセス許可しているところもあり、

そのようなユーザのために「最初にGAへのアクセス可否を判定し、falseであれば以降のGA通信は行わない」という設計を実現したいです。

 

ただ、当社システムログイン時にajaxでGAドメインへのアクセス可否を確認しようとすると、クロスドメインのセキュリティにひっかかり、

上手く動作しません。

 

何かほかにやり方がある、もしくは類似の実装をされている方がいらっしゃいましたらアドバイス頂けないでしょうか。

1 人のエキスパートが返信verified_user
1 件の受理された解決策

受理された解決策
ベストアンサーのマーク済み.
解決策
Ray (注目ユーザー)さんが付与
6月

Re: GoogleAnalyticsへの通信可否確認方法

トップコントリビューター
概ね、状況を理解しました。

いただいたコードの場合は確かに、クロスオリジンのエラーが発生します。これを回避するには、 www.googletagmanager.com から返されるレスポンスのヘッダーにCORSヘッダーを追加する必要があるため、一般ユーザー側からどうこうすることはできません。

タグマネージャーを利用しているようなので、やりたいことを実現しようとしたら、2種類の方法が思い浮かびました。

・エラーになるかもしれないが、いったんタグマネージャーを通常通り読み込んでしまう。タグマネージャー内で、カスタムHTMLタグを全ページ配信で配信し、その中身で、「window.isGTM = true;」などを実行する。
HTML側からGTMが読み込まれたと思われるタイミング(ページ読み込みから3秒経過したとき、など)で、「window.isGTM」の値をチェックし、これがtrueならGTMが読み込まれている。これがtrueでない(undefinedである)なら、GTMが読み込まれていないので、Cookieなどにその旨記録し、以降のGTM読み込みを行わない。

・外部ネットワークへの通信可否が可能かどうかの検証をGTMではなく、Googleアナリティクスサーバーで行う。下記サイトをもとに、jQueryで検証用のヒットを送信してみて、レスポンスが返ってくるかをチェックする方法です。検証用のヒットの送信時のパラメーターは何でもいいと思います。送信先のエンドポイントを「/debug/collect」にすれば、検証のみが行えるので、今回のケースではちょうどいいかと思います。
参考サイト: https://developers.google.com/analytics/devguides/collection/protocol/v1/validating-hits

元の投稿で解決策を見る

Re: GoogleAnalyticsへの通信可否確認方法

トップコントリビューター

弊社ドメインのみアクセス許可している

これは、具体的にどういう状況を想定していますか?

(銀行のような)高いセキュリティ環境のネットワークを使っていて、予め決めたドメインのページしか見ることができないような環境、を指していますか?そういった環境下でCtoCのサービスを行っている、という状況が想像しにくいです(どんなサービスで、どうやってそのサービスを見つけ出し、どんなユーザー層が使うのだろうか。そんなネットワーク環境を使っていたら、Googleなどでそのサービスを見つけ出すこともできないだろうし。)。

 

 

ただ、当社システムログイン時にajaxでGAドメインへのアクセス可否を確認しようとすると、クロスドメインのセキュリティにひっかかり、

上手く動作しません。

方針はこれで問題ないと思います。実装したコードを見れば、どこが間違っているのかアドバイスすることはできるかと思います。

 

 

 

 

Re: GoogleAnalyticsへの通信可否確認方法

初級者 ✭
ご返信が遅れ、申し訳ありません。ご回答ありがとうございます。

・想定ネットワーク環境について
企業向けのサービスを弊社が提供しているのですが、お客様(会社様)にご契約いただいた際に弊社のWebシステムを直接ご案内しております。GoogleAnalyticsでは、その会社様向けサービスがどれくらい利用されているか知りたいと考えています。
会社様によっては社内ネットワークからインターネットに出られないよう制御しているところもございまして、そういったお客様には個別に専用線を敷設したり、会社様のインターネットプロキシのホワイトリストに定義追加したりしています(後者が最初に私がご質問したものです)。

・実装コードについて
下記のとおりです。

--------
 <script>
  isGA = false;
  top.$.ajax({
   url: "https://www.googletagmanager.com/gtm.js",
   type: "GET",
   dataType: "text",
   async: true,
   timeout: 1000
  }).done(function(data, status, xhr){
   top.isGA = true;
   alert("利用可能");
  }).fail(function(xhr, textStatus, errorThrown){
   top.isGA = false;
   alert("利用不可:" + textStatus);
  }).always(function(){
   //NOP
  });
 </script>
-------

エラー内容 ※FirefoxのF12デバッガで確認した場合。(よく考えたら他のブラウザで試していないです・・・)
 >クロスオリジン要求をブロックしました:同一生成元ポリシーにより、https://www.googletagmanager.com/gts.jsにあるリモートソースの読込は拒否されます(理由:CORSヘッダー ’Access-Control-Allow-Origin...

 ちなみに、上記ヘッダを追加する場合は弊社Webサーバにも手を入れる必要があると思っており、大変恐縮ながら労力の面でそこまではしたくないと考えています。
 crossDomain:true のオプションも追加してみたのですが、ダメでした・・・。
ベストアンサーのマーク済み.
解決策
Ray (注目ユーザー)さんが付与
6月

Re: GoogleAnalyticsへの通信可否確認方法

トップコントリビューター
概ね、状況を理解しました。

いただいたコードの場合は確かに、クロスオリジンのエラーが発生します。これを回避するには、 www.googletagmanager.com から返されるレスポンスのヘッダーにCORSヘッダーを追加する必要があるため、一般ユーザー側からどうこうすることはできません。

タグマネージャーを利用しているようなので、やりたいことを実現しようとしたら、2種類の方法が思い浮かびました。

・エラーになるかもしれないが、いったんタグマネージャーを通常通り読み込んでしまう。タグマネージャー内で、カスタムHTMLタグを全ページ配信で配信し、その中身で、「window.isGTM = true;」などを実行する。
HTML側からGTMが読み込まれたと思われるタイミング(ページ読み込みから3秒経過したとき、など)で、「window.isGTM」の値をチェックし、これがtrueならGTMが読み込まれている。これがtrueでない(undefinedである)なら、GTMが読み込まれていないので、Cookieなどにその旨記録し、以降のGTM読み込みを行わない。

・外部ネットワークへの通信可否が可能かどうかの検証をGTMではなく、Googleアナリティクスサーバーで行う。下記サイトをもとに、jQueryで検証用のヒットを送信してみて、レスポンスが返ってくるかをチェックする方法です。検証用のヒットの送信時のパラメーターは何でもいいと思います。送信先のエンドポイントを「/debug/collect」にすれば、検証のみが行えるので、今回のケースではちょうどいいかと思います。
参考サイト: https://developers.google.com/analytics/devguides/collection/protocol/v1/validating-hits

Re: GoogleAnalyticsへの通信可否確認方法

初級者 ✭
解決策をご提示いただきありがとうございます。
双方とも検討したうえで、2点目を実施してみたところ、クロスオリジンのエラーにならずに通信可否を判定できました!

効果的なアドバイスをいただき、大変感謝しております。ありがとうございました。