Ajaxページのアクセス解析の考え方と Google Analytics での実践

今日 MarkeZine にAjaxページでのアクセス解析の考え方的な記事がのっていて、自分もこのネタ書こうと思っていた事をようやく思い出した。なんか後追いで悔しいけどまとめます。

ページビューは、アクセスログやそのページに埋め込まれた JavaScriptや画像などを使ってカウントされます。しかし、サイト設計によっては、一般的なサイトと同様にページビューを計算してしまうと、正しくそのサイトの価値を評価できないケースもあります。具体的にはどのようなケースなのか、見ていきましょう。

MarkeZine:◎Ajaxとアクセス解析の関係を読む

残念ながらこの記事は、「長い割には具体例がない」という結構読むのが辛い内容だったので、かなり乱暴に要約しちゃいます。ちなみに「Ajax」とか「アクセス解析」とか基本的な部分は理解している前提で書きます。
 1)Ajaxページではページ遷移しないで動作させる事ができる。
 2)サーバのアクセスログには記録される。
 3)でも、ページ遷移(PV)とXMLHttpRequestを一緒にカウントしていいの?
 4)タグ貼付けだとページが変わらないからログ取れなくね?
 5)JavaScript型たとえば Google Analytics ならできるよ?
 6)でも、ページ遷移(PV)とXMLHttpRequestを一緒にカウントしていいの?(再び)
 7)結局、ログ解析もちゃんと設計しないとダメだね。
って事が書いてあります。

ここまでだと、今までも聞いたような内容だなぁ。

Google Analytics でページ遷移しないイベントを拾う方法

すでに、Analyticsならできると書きましたが、具体的にどうするかを説明します。
下記はなじみ深いGoogleAnalyticsの解析用コードです。

<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>
<script type="text/javascript">
_uacct = "UA-748843-1";
urchinTracker();
</script>

実際このブログに張っているものなんだけど、注目してしてほしいのは urchinTracker() という関数。
この関数がロギングを実行しているのですが、実はこの関数は引数を受け付けます。

<script type="text/javascript">
urchinTracker("/hogehoge");
</script>
上の場合、/hogehoge というページにアクセスしたという記録が残ります。

さらには、同じページで何度でも呼べます。

<script type="text/javascript">
urchinTracker(); // デフォルト
urchinTracker("/hogehoge");
urchinTracker("/hogehoge/hege");
</script>

関数を呼び出すだけなので、イベントから呼び出せばユーザのアクションを拾う事ができます。

<a href="http://creazy.net/" onclick="urchinTracker("/move/to/site");">
creazy photograph
</a>

onXXXXイベントであれば何でも取れるという事です。


だったら、何でもかんでもトラッキングしましょうという考え方

By calling Analytics’ urchinTracker function, however, you can assign a page filename to any AJAX event. Typically, this is done as part of the onreadystatechange function, after the data has been returned and all updates to the page have been made.

Ajaxian » Tracking Ajax Requests in Analytics

つまり、AjaxRequestのコールバック関数に urchinTracker() を仕込めば裏の通信も残せるじゃん、と言っているわけ。ああ、なるほど。でも、これって危険じゃね?という事を指摘している人もいる(以下)。

Google Analyticsからの回答が、onreadystatechangeからのレスポンスに対してurchinTracker関数を置くように指示していることから、共通の関数内でトラッキングするようにしたらオーバーヘッドがかかるし、統計がちゃんと取れないし、困ったことになりますよ…ということでしょうね。

Google AnalyticsでAjaxページをアクセス解析する際に注意すべきこと : アークウェブ ビジネスブログ

オーバーヘッド・・・エラい事になるでしょうね。


で、設計どうしましょう?

今回参照した記事ではどちらもどんな設計をしたら良いかという事には言及していません。っていうか、サイトによってページ遷移するかとかどのイベントでどのくらい画面の表示が変わるのかってのはまちまちだから一概に言えないんです。

ただ、いくつか基本的なポイントはおさえておくべきだと思う。
 1)初回表示はもちろんPVとしてカウント
 2)画面が大きく変わるようなイベントはカウント
 3)setTimeoutで定期的に回しているような処理は除外
とかね。


PVとイベントログをごっちゃにしない

Analyticsでイベントログを取る事ができるとしても、何でもかんでもログってたらわけわからなくなる。

あまりに多くのページビューを発生させることによって、我々が本当に興味があるデータを覆い隠します。 (何らかの小さいウィジェットの小さいアップデートにおいて数千の更新があったときに、どうやって一回分のロードを見分けるのか?)

Google AnalyticsでAjaxページをアクセス解析する際に注意すべきこと : アークウェブ ビジネスブログ

だからといって、ログを取らないっていうのは違う。
ちゃんと整理できればいい

例えば、イベントを拾う時に情報の階層構造を作ってみる。

urchinTracker("/Analytics/onclick/globalnavi");

(もちろん、実在しないURIを指定するべきだが)
引数のURLが /Analytics から始まるものはイベント解析用と決めておけば、あとで Google Analytics 上で見つけやすくなる。もちろん Analytics ではフィルタリングの機能があるから、

全体のPVーイベント数=純粋なPV

という導きだし方もできる。


アクセス解析じゃなくてアクション解析!?

ページ遷移(PV)の解析をアクセス解析というのであれば、今回解説した解析手法はアクション解析と呼んでも良いかもしれない。Ajaxによって各機能が「ページ遷移」で区切られているとは限らなくなった。だからこそ、PVではなくイベントログの解析が重要になってくる。とはいえ、全部のイベントを拾うのはアプリケーションのボトルネックにもなりかねないし、パフォーマンスもふまえたログ解析をしなくちゃいけないんですな。

同じカテゴリーの記事

このページの一番上に戻る
  • Facebook
  • Twitter
  • Tumblr
  • Instagram
  • miil