どこからたどり着いたかを知る(referer)

ここでは、apache(アパッチ)のアクセスログからリファラー(referer)を解析する方法を説明したいと思います。 refererは、どこを経由してホームページにたどり着いたかを示しています。 refererを解析することにより、ホームページを閲覧するユーザの流れを把握しやすくなり、どのような情報が必要とされているか、どのような情報が不足しているかなどの予測を立てやすくなります。 また、リンクを張っているページの発見もできます。

ユーザエージェントに関する情報を取得する

refererを取得するには、アクセスログの8個目の項目を抜き出します。 (apacheのcombined logを前提にしています。必要に応じてサンプルを変えてください。)

抜き出したrefererを単純に羅列しただけでは膨大な量のデータになってしまうので、ここでは、各referer URLの登場回数を数えてみたいと思います。 referer URLの登場回数を計算するために、perlの連想配列を利用します。 最終的には、連想配列に覚えこませたreferer URLの登場回数を表示してサンプルスクリプトは終了します。

以下に、perlスクリプトのサンプルを示します。


#!/usr/bin/perl

# (注意)/usr/bin/perlの部分は必要に応じて変更してください。

# (注意)"access_log.txt"は解析するアクセスログのファイル名に
#  変更してください。
open(LOGFILE, "access_log.txt") || die $! . "\n";

# 一行ずつアクセスログファイルを読みます。
while (<LOGFILE>) {

  # perlのパターンマッチを行っています。
  # $1,$2,...$9にマッチした結果が入ります。
  /^(.*) (.*) (.*) \[(.*)\] "(.*)" (.*) (.*) "(.*)" "(.*)"/;

  # パターンマッチの結果を変数に代入しています。
  $refer = $8;

  # 取得したreferer URLをキーにした連想配列の値を増やします
  $refercount{$refer}++;
}
close(LOGFILE);

# 連想配列に覚えさせたreferer数を表示します
# $keyには、refererが入っています
# $valueには、各回数が入っています

while (($key, $value) = each(%refercount)) {
  print "$value\t$key\n";
}

exit;

ここでは、とりあえず最も単純なreferer取得方法を説明しました。

(注意)この方法で得られるリファラーは、クライアント(ブラウザ)による申告制です。 そのため、閲覧を行っているブラウザが嘘をついている場合には、アクセスログに記述された情報が正しくない内容になっている場合があります。


プロフェッショナルIPv6解説動画シリーズ再生リスト

動画で学ぶ「プロフェッショナルIPv6」を作っています。 もしよろしければご覧ください。お楽しみいただければ幸いです!