極めて規模が大きいサイトでは、インデックス化率(ページ総数に対するGoogleインデックス登録率)が課題として挙がります。
ページを作成・生成してもGoogleのインデックスに登録されなければ、当然Googleの検索結果に表示される事はありません。SEOを行なう上で、大規模サイトほどインデックスに関する課題や問題点は多く、一筋縄にはいかないケースもあります。
インデックス化がされない要因を調査する方法は複数存在しますが、そのひとつにクローラーの回遊状況の調査があります。
インデックスに登録する為には、まずGoogleのクローラーにページを見てもらう必要があります。その上でページのコンテンツ(品質)をGoogleが評価しインデックスDBに登録します。
もし、インデックスに登録されないのであれば、Googleがインデックスするまでのフロー上に問題があると考えられます
※ドメインに対するペナルティを除く
(1)の「GoogleによるURL認識」はXMLサイトマップでGoogleに通知済であれば、次の(2)の「クローラーが対象URLにアクセスしているか」を調査する必要があり、今回のブログ記事ではそのクローラーログ解析に関して説明したいと思います。
クローラーログ解析ツール
海外のツールには、検索エンジンクローラーのアクセスを解析する専用ツールまであります。
多くのクローラーログ解析ツールは、ApacheなどのWebサーバーログをそのままインポートする事で、GoogleBotやBigbot、Slurp毎にステータスコードやURLを区分として可視化してくれる便利なツールです。
↑SEO Log File Analyserによる解析画面
ツール例としてSEO Log File AnalyserやSpiderlog等が挙げられます。
これら専用ツールは大変便利なのですが、サーバーログの容量がGバイト級になってしまう大規模サイトの場合は、あまりにもログの量が多い為、ツールでは処理しきれずフリーズしてしまうケースがあります。
Excelでも最大行数を超えてしまう為、解析する事ができません。
MySQLでログを解析
専用ツールやExcelでも解析できない場合は、大量データを解析するに適したソフトとしてRDBを利用する流れに成ると思います。
以前、当ブログでもGoogleBigQueryを利用したログ解析方法を紹介しましたが、基本的には有料で利用するサービスな為、どうしても解析の段階でコストが発生してしまいます。
特に膨大なログ解析の場合Cloud Storageにデータをアップロードし、そこからBigQueryで読み込む為、時間も要する上コストもさらにかかります。
無料で、尚且つ自分のPC内で済ますには、無料で利用可能なMySQLを使う事にしました。
ステップ1:MySQLにロードするログを1つにまとめる
サーバーログは日別単位で生成保存されているケースが大半かとおもいます。
MySQLにロードする歳、各ログファイルを1つ1つ手動で読み込んでいると時間と手間がかかりますので、1つのファイルに全てのログをまとめてしまいましょう。
Windowsのコマンドプロンプトを立ち上げ、ログファイルが保存されているフォルダーに移動します。
移動後、「type *.txt > all.txt」と入力すると大量のログファイルを1つにまとめる事ができます。
ログのファイルサイズにもよりますが、数時間で作業は完了し、対象フォルダー内に「all.txt」という新しいファイルが保存されます。
ステップ2:MySQLにログをロード(読み込む)する
1つにまとめたログファイルをデータベースのMySQLに読み込ませます。
先ずログを読みこませるテーブル作成します。今回は飽くまでも分析するだけですので、10個のカラムを持つテーブルを作成します。
indexを貼ってしまうとロード時にインデックス生成の時間がかかる為、今回はindex無しとしました。
load data infile all,txt into tabel log; を実行し、all.txtをMySQLにロードします。
350万行の挿入で約3時間16分かかりました。
更にデータ量を増やすとデータの読み込みにも数時間かかり、ロード中はMySQLがメモリを消費するので、夜間中などPCを利用しない時間帯に行なうと良いでしょう。
ステップ3:集計してみよう
データのロードが完了した所で、早速集計してみましょう。
レコード1つが1アクセスの為、クローラーによるアクセス数を集計するにはCOUNT()を利用します。
本来は、各レコードに入るデータに合わせて型を適切にセットするのが望ましく、SQLによる集計もしやすくなりますが、今回はやや乱暴なやり方ではありますが、フレーズ一致でレコード数をカウントしてクローラーアクセス数を集計する事にしました。
日別のクローラーアクセス数
例えば7月1日のアクセス数であればアクセス時間が入っているカラム「3」に対し、like ‘%01/Jul/2016%’ を実行します。
更にGoogleBotのみのアクセス数を集計(カウント)したい場合は、UserAgentが入っているカラムに対し like ‘%Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)%’ を実行します。
結果として表示されたcount()値が、絞り込みした日付のGooglebotによるアクセス数になります。この値をExcelなどに入力し、集計データを作成します。
特定ディレクトリへのBotアクセス数
Googlebotが特定のディレクトリ配下へアクセスした回数を集計します。
実際の生成ページ数に対してインデックス数が少ないディレクトリはクローラーが回遊していない可能性もありますので、アクセス数が十分あるかチェックしてみましょう。
URLが入っているレコードに対してフレーズ一致で絞り込みます。
ディレクトリ内にあるページ数に対し、クローラーのアクセス数が極端に少ないか否かを確認します。
単純計算で60日間でディレクトリ配下の全ページを回遊できるクローラー数が割り当てられていれば問題ありませんが、半年以上もしくは1年以上かかってしまうほどクローラー回遊数が少ない場合は、ディレクトリへのクローラー回遊数の少なさがインデックス数の伸びに影響している可能性が考えられます。
対象ディレクトリ配下のクローラーアクセス数とページ単位のユニークアクセス数
特にクローラーは、更新頻度が高いページや自然検索経由のセッション数が多いページ程頻繁にアクセスし、他ページには殆どアクセスしない場合もあります。
先ず特定ディレクトに対するGooglebotの総アクセス数です。
次に DISTINCT() を用いて、同じURLへのアクセス数も全て1回とカウントします。
(全ページのクローラーアクセス数÷ユニークアクセス数)× 100 で同一ページに対する複数アクセス率を算出します。
この値が低い程、割り当てられたクローラー回遊数の内、特定のページによる消費割合が高いと判断できます。
■□
以上の様に、MySQLを使う事で無料で大量のGooglebotログを集計する事ができます。
あまりにも巨大なデータでない限りMySQLで解析できますので、count()やsum()などを用いて集計し、インデックス化率が低い要因がクローラー回遊に無いか調査してみると良いでしょう。