2014-10-06

ユニバーサルアナリティクスによるマルチトラッキング

関連記事



Google Analyticsのトラッキングコードの標準は今やユニバーサルアナリティクス型となり、トラッキングコードを新規に払い出すと、自動的に次のようなjavascriptコードが取得できます。



Google Analyticsが払い出す標準的なトラッキングコード


<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-55064898-1', 'auto');
  ga('send', 'pageview');

</script>


一般的なブログのような個人サイトではこれをそのまま</head>タグの直前あたりに貼り付ければよいのですが、商用の大規模サイトではこれをそのまま貼り付けると計測値が誤動作する可能性があります。(あくまで可能性の問題)


誤動作が起こるケースとは具体的にトラッキングコードが2種類以上設置しているケースです。


GAタグが1つだけ設置されている例

上記のように1つだけ設置されている場合は何の問題もありません。
問題は2つ以上設置されているケースかつ、それをGoogle Analyticsから払い出された標準的なトラッキングコードをそのまま並べて貼り付けている場合です。

標準トラッキングコードを2つ並べると何が問題か


<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-55064898-1', 'auto');
  ga('send', 'pageview');

</script>
<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-55064898-2', 'auto');
  ga('send', 'pageview');

</script>

まずいケースとは例えば上記のようなケースです。
トラッキングID(UA-XXXで始まるID)が異なるので一見問題なさそうですが、
最初のトラッカーオブジェクト生成の命令、

ga('create', 'UA-55064898-1', 'auto');

これで作られたオブジェクト名を明示していないので2つ目のオブジェクト生成の命令が実はすでにオブジェクトがあるとみなし空振りしてしまうようです。
結果、

同じオブジェクトに対し、

  ga('send', 'pageview');

ページビュー計測命令が2回実行されるのと同じこととなってしまうようです。

ユニバーサルアナリティクスのマルチトラッキング方法


誤動作しないようにするためには暗黙的に生成されるオブジェクト名を明示すればよいです。この手法は公式ヘルプに書かれているとおりで、従来型のトラッキングコード時代からも形は違えどコンセプトは一緒の手法で回避可能です。

では上記例の具体的な改善方法を示します。


<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  /* 1つ目GAのトラッキング処理 */
  ga('create', 'UA-55064898-1', {
    'cookieDomain': 'auto',
    'name': 'firstTrack'
  });
  ga('firstTrack.send', 'pageview');

  /* 2つ目GAのトラッキング処理 */
  ga('create', 'UA-55064898-2', {
    'cookieDomain': 'auto',
    'name': 'secondTrack'
  });
  ga('secondTrack.send', 'pageview');

</script>

※firstTrack、secondTrackの名前は被らなければ何でもよいです。



(参考)
公式ヘルプ