ユーザがページに滞在した時間をサーバに記録するJavaScript

Ajaxの普及に伴い、ページ当たりのユーザの滞在時間が注目されるようになっている。従来、サービスがユーザに与えるインプレッションの指標としてページ・ビューが広く用いられている。しかし、Ajaxを利用するとページの移動があまり発生しないため、ページ・ビューが低くなってしまう。そこで、インプレッションの指標として、滞在時間を使おうという動きがある。

今回、JavaScriptでユーザの滞在期間が記録できるかどうか調べてみた。取り組む前は難しいかなと思ったが、実際にはとても簡単であった。コードは下記。

(function(){
  var start = new Date;
  window.onunload = function(){
      var time = (new Date - start );
      var image = new Image;
      image.src = "/dummy?t=" + time + "&url=" + document.location;
  }
})();

このように記述すると、Webサーバに次のようなログが残る。

127.0.0.1 - - [18/Mar/2006:19:52:09 +0900] "GET /dummy?t=3295&url=http://localhost/test.html HTTP/1.1" 404 277

このログを後で解析すれば、ページの滞在時間を求めることが出来る。IE6, Firefox1.5での動作を確認した。

なお、上記スクリプトはwindow.onunloadを上書きしている点に注意。prototype.jsを使うならば、次のようにEvent.observeを使った方が良いだろう。

(function(){
  var start = new Date;
  Event.observe(window, "unload", function(){
      var time = (new Date - start );
      var image = new Image;
      image.src = "/dummy?t=" + time + "&url=" + document.location;
  });
})();

Ajaxを駆使したサービスでのログ解析の一助になればと思う。この程度のコードだと著作権は適用されないと思うので、利用はご自由に。