アクセスログからGoogleでの順位を知る
アクセスログを解析することにより、googleでの順位を予想することができます。 ここでは、Googleでの検索キーワードとそれによる順位を知る方法を説明したいと思います。
Referに含まれる順位情報
google検索がアクセスログに残すReferer情報には、検索に利用したキーワード、 検索により表示されたページの最初のindex番号、検索結果の表示個数、などの情報が含まれています。 この3つの情報を組み合わせると、解析を行うWebページの順位がわかります。
サンプルコード
では、実際にアクセスログから情報を抽出して順位を予想するサンプルプログラムを以下に示します。
#!/usr/bin/perl
# 日本語の文字コード変換をしてくれるperlモジュール(Jcode.pm)です
# jcode.plの場合は多少方法が変わってきますが、詳細はここでは扱いません
use Jcode;
open(FILE, "access_log.txt") || die $! . "\n";
while (<FILE>) {
/^(.*) (.*) (.*) \[(.*)\] "(.*)" (.*) (.*) "(.*)" "(.*)"/;
# refererの情報を取得します
$refer = $8;
# 「http://www.google」から始まるリファラー情報だけを表示します
# www.googleで留めているのはwww.google.co.jpと
# www.google.com両方に対応するためです
if ($refer =~ /^http:\/\/www\.google\.co(.*)\/search\?(.*)$/) {
# just for info (このprint文は説明のためだけです)
print $refer . "\r\n";
# 念のため毎回初期化します
$keyword = "";
$start = 0; # startという項目が無い場合は最初のページです
$num = 10; # numという項目が無い場合は10項目毎の表示です
# q=keywordなどから=の右側にある情報を取り出します
@column = split('&', $2);
foreach $val (@column) {
$val =~ /^(.*)=(.*)$/;
if ($1 eq "q") {
$keyword = $2;
} elsif ($1 eq "start") {
$start = $2;
} elsif ($1 eq "num") {
$num = $2;
}
}
# %??の??部分をasciiの16進表示からバイナリに変換しています
$keyword =~ s/\%([A-Fa-f0-9]{2})/pack('C', hex($1))/seg;
# 文字コードをsjisにしています。
# URLエスケープをデコードしただけの状態ではUTF-8です。
# windowsの場合はsjisが良いでしょう。
# unix系OSやlinuxの場合は、
# jcode($keyword)->euc; としてeucにした方が良い場合もあります
# jisにしたい場合は jcode($keyword)->jis;としてください
$keyword = jcode($keyword)->sjis;
# このサンプルではprintをしているだけですが、
# 必要に応じて変更してください
print "keyword : $keyword\r\n";
# 開始から表示個数分までの範囲に順位があります
$end = $start + $num;
print "rank order : $start - $end\r\n";
print "\r\n";
}
}
close(FILE);
exit;
ここでは、とりあえずはリファラー情報からサーチエンジンの検索キーワードと順位を抽出し、日本語部分をデコードするという処理しかしていません。 必要に応じてカスタマイズして下さい。
アクセスログから得られる情報は、例えば、あるキーワードでの順位が0から10番目以内である、という何となくの値になります。 正確な値が知りたい場合には、同様の条件で検索をしてみるしかありません。 ただ、多くの場合、実際には必要なのは正確な順位ではなく検索が行われたキーワードと大体の順位です。 そのため、アクセスログから得られる順位情報はあまり正確でなくてもかなり参考になります。
この情報をSEOなどに生かしていただければ幸いです。