【GA】GoogleアナリティクスでFlashを解析するときにはgaforflashは使わないほうがいい

Adobeが開発している(していた?)Googleアナリティクス用Flashライブラリのgaforflash

Google公式ヘルプにも「これ使ってね」と書かれているので使ってみているのですが、どうもデータが正常に取得できていないみたいです。

あるサイトで、gaforflashを使ってFlashムービー内にイベントを仕込んでいたのですが、GA管理画面を見てみると、ランディングページが(not set)になっている謎の訪問が結構な数でカウントされていました。しかも訪問別ページビューは0ページ、平均サイト滞在時間も0秒。アドバンスドセグメントでランディングページnot setをフィルタリングして見ましたところ、ページビューも参照元も何もかも記録されていない本当に謎の訪問でした。

これは何かおかしいぞ、ということでFiddler使ってGATCリクエストを追ってみたところ、原因らしきものが分かりました。

まず予備知識として、このサイトはHTML内に最新の(非同期の)トラッキングコードを記述しています。ですので、HTMLが読み込まれたときには、http://www.google-analytics.com/ga.jsが実行されてGATCリクエストが行われます。つまりは最新のga.jsによってGATCリクエストが処理されているわけです。

一方でFlashムービー内のイベントは最新のga.jsを使わず、gaforflashを使ってGATCリクエストを処理しています。gaforflashはライブラリ内部にga.jsと同じ働きをするActionScript(?)を持っていて、このライブラリ内部のga.jsもどきが古いのです。

このサイトでHTMLの読み込みとFlash内イベントを繰り返してみたところ、下記のようになりました。

まず、__utmwv。これはGAの記述のバージョン表記のようなのですが、

  • 最新のga.js: 5.2.5
  • gaforflash: 4.3as

明らかにgaforflashが古いことを明示していますね。

で、問題なのが__utmaの内容です。HTML→Flashイベント→HTML→Flashイベントとリクエストをしてみたところ、

リクエスト __utmaの内容
HTML 123456789.1141210827.1332121270.1332121270.1332121270.1
Flash 123456789.2665786856792290000.1324019656.1332121182.1332121270.15
HTML 123456789.1141210827.1332121270.1332121270.1332121270.1
Flash 123456789.2665786856792290000.1324019656.1332121270.1332121824.16

となっていました。__utmaの内容は

ドメインのHash.ユーザ(ブラウザ)識別値.初回訪問日時.前回訪問日時.今回訪問日時.訪問回数

です。これはバージョンに関わらず同じ形式のようです。

まず問題点はユーザ(ブラウザ)識別値。HTML(最新のga.js)は”1141210827″で、イベント(gaforlash)は”2665786856792290000″と数値が異なります。ということはおそらく別のユーザとして認識されているはずですので、HTMLとイベントはそれぞれ別のユーザ(=別の訪問)と見なされていると思われます。

さらに2つのイベントの前回訪問日時と今回訪問日時と訪問回数を見て下さい。1回目のFlashイベントでは今回訪問日時が”1332121270″で訪問回数が”15″となっていますが、2回目のFlashイベントでは前回訪問日時が”1332121270″で訪問回数が”16″となっています。つまりはイベント1つ1つが別の訪問としてカウントされているのです。

これはランディングページが(not set)になっている謎の訪問の謎が解けた気がします。とても残念な結果なのですが・・・。ランディングページnot setの正体はFlash内のイベントが1つ1つ別の訪問としてカウントされていたもので、イベントしか実行されていない訪問なので、ページビューも参照元も記録されておらず、訪問ではあるものの中身に何のデータもない手品みたいな訪問だったということです。

ということでFlash内のイベントを計測するときは、gaforflashは使わず、最新のga.js内に記述されている_trackEventや_trackPageviewをExternalInterface.call的な方法でcallするようにしましょう。これ絶対。

【GA】Androidブラウザでは画面解像度=Webページのサイズになる

あるとき、スマホからのアクセスが多い割にスマホ対応していないサイトがありまして、「ユーザはこんな小さい解像度でサイトを閲覧しているんですよ!」というために、GAの画面解像度レポートをスマホ(Android・iPhone)で絞り込んでみたところ、

  • 1000×1533
  • 1000×1400
  • 1000×1588

と、横幅が1000pxで高さがマチマチの解像度が500項目以上出てきて、頭が一瞬真っ白になりました。

セカンダリディメンションでOSを出してみたところ、このおかしな解像度はすべてAndroidのものでしたが、特定のデバイスではなく全てのデバイスで発生していました。

Androidと言えば解像度はほとんど480×854のはず。なんだこれは、としばらく考えていたところ、横幅が全て1000pxなのが気になってWebページの横幅(body要素の横幅)を調べてみたら、1000pxだったので、ピン!ときました。

つまりは、

Androidブラウザでは、Webページの大きさが画面解像度になる

ということです。高さが色々あるのは、Webページのコンテンツ量によって高さが違うためです。なお、Webページの大きさがデバイスの画面解像度(480×854とか)に収まっている場合は、デバイスの画面解像度がGAのレポートに表示される解像度になります。

これはGAの問題ではなくAndroidブラウザの問題ですよね…。

しかし、最近のGATCリクエストの内容を見ていると画面解像度だけでなく、実際のブラウザ表示サイズも取得しているみたいなので、GA側が頑張れば何とかなるかも知れませんね。あれ、というか既にブラウザ表示サイズが画面解像度レポートに表示されている??(もうちょっと調べます)

 

以上ですので、Androidの画面解像度を知りたい場合は、デバイス名(携帯端末の情報)から1個1個のデバイスの解像度を調べるしかなさそうです。合掌。

【GA】Firefoxでブラウザバックした時にGoogleアナリティクスのGIFリクエストが飛ばない

GoogleアナリティクスはGIFリクエストごとにユニークなIDを振って、ブラウザバックしたときにもGIFリクエストを飛ばすというのは多くの方がご存知かと思いますが、どうもFiddlerでGIFリクエストを追っていると、FirefoxだけブラウザバックしてもGIFリクエストが飛ばないときがあるんですよ。

InternetExplorerやChromeはブラウザバックで必ずGIFリクエストが飛びますが、Firefoxはかなり高い確率で飛ばないです。

GIFリクエストが飛ぶ・飛ばないの条件は明確ではないのですが、ページを移動してから少し時間を置いて(15秒ぐらい?)ブラウザバックすると飛ぶのですが、ページを移動してすぐに戻るとほぼ飛ばないです。

挙動的にはブラウザバックしたときにJavaScript自体が実行されていない印象です。これはFirefoxの仕様なのでしょうか。知っている方がいたら教えて欲しいです・・・。

————————————————–

4月9日追記

コメント欄にて情報をいただきました。マロマゴさま、ありがとうございました。

やはりFirefoxの仕様だったようです。

https://developer.mozilla.org/En/Using_Firefox_1.5_caching

表示速度向上のため、JavaScriptのステータスもキャッシュされると書かれていますので、既に実行済みの処理はブラウザの戻る/進むでは再度実行されないようになっているようです。

対応方法はいくつか記載されていますが、

the page uses an unload or beforeunload handler

という記載の通り、unloadイベントを使用する方法が一番簡単で良い方法です。具体的にはonUnloadで空の(何の処理も書かれていない)関数を実行しておきます。記述を書く場所は</head>の直前でも</body>の直前でも外部JSファイルでもどこでも大丈夫だと思いますが、GAのトラッキングコード付近に書いておくのがスマートな気がします。

<script type="text/javascript">

var _gaq = _gaq || [];
 _gaq.push(['_setAccount', 'あなたのWebプロパティID']);
 _gaq.push(['_trackPageview']);

(function() {
 var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
 ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
 })();

window.onunload = function(){}; // FirefoxのJavaScriptキャッシュ対策

</script>

こんな形です。
これはGoogleアナリティクスで解析を行う場合、必ず対応しておいた方がよさそうです。