meta refresh, Locationヘッダを使用した場合のHTTP_REFERERについて

<meta http-equiv="Refresh" content="0; URL=http://www.miyagino.net/" />

や、

print <<_EOF;
Location: http://www.miyagino.net/

_EOF

のようなことをしていると、飛び先(http://www.miyagino.net/)ではHTTP_REFERERが設定されないようだ。これはどうもブラウザの仕様みたいでなんともしがたい。

このため、

  • 設定側でクリック数をカウントしたい(バナー広告などのために)。
  • 飛び先側でもバナーの有効性を調査するために参照元をカウントしている。

という場合、飛び先側では、参照元をカウントするときにHTTP_REFERERを元にしている場合は"0"になってしまう可能性があるようだ。

回避策

  • 普通にリンクさせ、設定側ではonclick属性を使用。
  • そこに、ajaxでカウントツールを呼び出す。

以下では、jqueryを使ってます。また、IEではURLが毎回変わらないとクリックを拾えないようで、時刻を埋め込んでます。呼び出すための引数(name,now)はダミーです。

<script src="jquery.js" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[

var BASE_URL = "count.cgi";

function count_up(id) {
        var now = new Date();
        $.ajax({
                type : "GET",
                url : BASE_URL,
                data : "name=" + id + "&now=" + now.getTime()
        });
}

//]]>
</script>

....

<ul>
  <li><a href="http://www.miyagino.net/"
      onclick="javascript:count_up('test');">バナー</a></li>
</ul>

....