Creazy!

WEBエンジニア・ヤガーのテック・ガジェットブログ

技術情報

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ではなくイベントログの解析が重要になってくる。とはいえ、全部のイベントを拾うのはアプリケーションのボトルネックにもなりかねないし、パフォーマンスもふまえたログ解析をしなくちゃいけないんですな。

-技術情報

執筆者:


  1. Qやん より:

    一応、本職なんで(笑
    えっと、最初に紹介していた記事ですが、、、今更何を言ってるのでしょう?
    って感じでした(笑
    AjaxやFlashなど、ブラウザのリロードが無い(もしくは少ない)サイトの場合でもユーザがどのようにサイト内のコンテンツを見ているのかを知る事は重要ですね。
    アクセスログ型やパケットキャプチャ型のアクセス解析の場合は、Webサーバへのアクセスが全て集計されてしまうので、解析結果をどのようにフィルタリングするかを考えれば良いとは思います。
    ビーコン型の場合は、説明しているとおり、サイトコンテンツ側で計測したいポイントを絞って、計測ポイントに入った場合だけビーコンを飛ばすようにしてもらう必要があります。
    ちなみに、Google Analyticsだけでなく、大体の商用アクセス解析サービスだと同じようなJavaScriptのFunctionは用意されていますね。
    最後に、アクセスログ解析の目的なのですが、商用のサービスを利用している場合は、単純なアクセス数を追いたいって方は皆無だと思います。やはり、
     ・広告出稿した効果
       →色々な種類の広告を出したが、何が一番効率的なのか?
     ・ユーザのサイト内での行動の導線を視覚的に見る
       →ユーザを目的のコンテンツに導けているのか?
    などが目的になっていますね。
    と、適当な薀蓄でした~

  2. 猿山猿吉 より:

    アクション解析!
    昔々の話し。
    クラサバ系のシステム全盛期の頃。クライアントアプリ側でユーザが操作したログを全て保存する仕組み
    を入れた事がありました。当然、デバッグモードでの事ですが。
    目的は、アプリケーションの障害が出た時に、ユーザがどういった操作をしたかを知る為です。
    どういった操作をしたのか?ってユーザに聞いても正確な情報って得られないでしょ(笑)
    まさにアクション解析?!
    ふと思い出しました(笑)

  3. yager より:

    専門家を差し置いてヘンテコなエントリー書いてスミマセン。
    >Qやんさん
    MarkeZine はマーケティング担当がターゲットっぽいので技術寄りの内容は排除したのかもしれませんね。
    (と、なぜかフォローしてみる。)
    ちなみにワタシの感想もQやんさんと一緒ですが ;-P
    > 大体の商用アクセス解析サービスだと同じようなJavaScriptのFunctionは用意されていますね。
    おお、そうなんですね。他の商用とか見た事ないので比較ができませんでした。
    とりあえず必要な情報が取得できる事は大前提で、あとでフィルタリングして解析すると。
    でも、フィルタリングのために引数考えたり、あとで全PVから引き算したりって面倒ですね。
    PVとイベントログを別々に記録できて、かつ管理画面で見やすい機能を作れば流行りそうな気がしますが。(意味深)
    > ・広告出稿した効果
    > ・ユーザのサイト内での行動の導線を視覚的に見る
    ですねー。結局もうかるための手段ですからね(当たり前ですが)。
    >猿山猿吉さん
    「アクション解析」!
    適当に名付けたんですがちゃんと存在するワードなんですかね?
    デバッグ目的だと、それこそ全てのユーザ操作(イベント)を拾いたいですね。
    効果計測の場合とはチェックポイントが異なるんでしょうけど。
    > ってユーザに聞いても正確な情報って得られないでしょ(笑)
    本当にそうですね。まず、連絡すらとれないでしょうし。
    システム側でログ取ってれば間違いなく再現できそうですね。
    ただ、やっぱり問題になりそうなのがページ内イベントをどこまで拾うかですかね。
    参照記事の中では盛んに「パフォーマンス」が悪くなると書いてますが、
    つべこべいわずに全部のイベントを記録して、ちゃんと整理してくれて、
    パフォーマンス抜群!なツールないですかね?(意味深)

comment

メールアドレスが公開されることはありません。

関連記事

選択した文字列を7種類もの形式に変換してくれるブックマークレット「SelectConvert.js」

いままで、ちょっと便利になるブックマークレットを色々作ってきたんだけどブラウザのブックマークツールバーがゴチャゴチャしてきちゃったので、まとめたいなぁと思っていました。 そこで、WEBページ上で選択し …

YouTubeがようやくオレのアイデアをパクりだした

タイトルは釣りです。調子こいてスミマセン>< 今、YouTubeみてたら微妙な変化に気付きまして。 トップとか検索結果画面の一覧で、HD画質に対応している動画のタイトル横に白い「HD」アイコンが追加さ …

no image

ボクのMacBookができるまで:(1.システム環境設定編)

さて、新しい MacBook くんですが、実は OS が Tiger から Leopard へのバージョンアップした事もあって、使い勝手が色々改善するかもしれないなぁなんて思っています。 滅多にないリ …

no image

Google:GmailからPOPで外部のメールを取得する「Mail Fetcher」

Gmail にまたまた便利な機能が追加されてた(いつのまにか)。 Gmail では、Gmail 以外の他のアカウントからメールを取得できます。 最大で 5 つのアカウントからのメールを 1 か所で表示 …

麺ブラが100杯達成

本日投稿された渋谷大勝軒1961のあつもりを持って、menblr. (麺ブラ)への麺画像投稿数が100杯に到達しました!(パチパチパチ・・・) 29人のタンブリスタがフォローしてくれています。 麺ブラ …

スポンサードリンク

スポンサードリンク