工房では、開設当初から、アクセスログの解析機能を独自に作り込み、運用してきました。収集している情報の一部は、こちらで公開しています。
その中で、「キーワード解析」というものがあります。これは、訪問者が、Googleをはじめとする各種検索エンジンにて、どのようなキーワードを使って検索し、工房に辿り着いたかを示すものです。
苦労して作り込んだ割には、これまで放ったらかしにしていましたが、はたと、
「これは、もしかして非常に貴重な情報なのでは?」0xF9A0
と思い付き、SEO対策として活用することにしました。
蓄積したキーワード情報の生データです。(都合上、上位100位までを表示)
これらは、各種検索エンジンからのリファラーから抽出したものです。
(若干、文字化けしたものが含まれていますが)
よく見ると、検索エンジンで検索されたキーワード情報は、単体(1ワード)の場合もありますが、複数のキーワードから成っているものも、多くあります。
ここで、例えばつぎのようなキーワード情報があったとした場合、
"HID 取り付け" 500hit
"HID バラスト" 300hit
"バラスト 改造" 200hit
"バラスト ハイワッテージ" 100hit
キーワード単体での累積カウント数は、
"HID" 800hit
"バラスト" 600hit
"取り付け" 500hit
"改造" 200hit
"ハイワッテージ" 100hit
となり、リファラーからのキーワード情報の順位とは、必ずしも一致しないということになります。
(当たり前ですが)
よって、キーワード情報(以下、複数のキーワードを含むことから、「クエリ」と呼ぶことにします)に含まれるキーワード単体に注目し、その累積カウント数を調べることにより、高ヒット率のキーワードを抽出することができます。
(簡単にいうと、クエリを単体のキーワードに分割して、キーワード毎にカウントするということです)
#ついでに、半角やら全角やらがゴチャ混ぜになっているので、この際、キレイに整形します。
PHPスクリプトは、とても簡単です。(keyword.php)
まず、クエリを収めたデータファイル(keyword.dat)を読み出し、クエリとクエリのカウント数を、配列($LineArray)に格納します。
つぎに、クエリをキーワードに分割する前処理として、「全角英数字を半角に」「全角スペースを半角に」「半角カナを全角に」「アルファベットの小文字を大文字に」変換します。
つづいて、半角スペースを区切りとして、クエリをキーワードに分割し、連想配列($KeywordArray)に格納していきます。
(新しいキーワードが出てきた場合には、新たに連想配列を作成し、カウント数をセットします。過去に現れたキーワードであった場合には、カウント数を加算します)
最後に、連想配列を、累積カウント数でソートしてから、上位100位までを表示し、終了します。
#日本語処理(マルチバイト文字列の処理)に、ちょっとしたコツが必要となりますが、こちらを参考に。
実行結果です。
当初、約2.7万個のクエリがありましたが、最終的に、約5.5万個ものキーワードに分解、整理されました。
冒頭のキーワード情報の生データとは、順位が異なっていることにお気付きいただけるかと思います。
で、これを何に使うかだって?
それは、ヒ・ミ・ツ、ということで。0xF9F8
#クルマ関係のサイトとしては、非常に貴重な情報かと。
datファイルが正常に読み込めず、エラーが出てしまいます。
(43行目と48行目)
どのように回避すればよいでしょうか?
あの、通常あるような、「はじめまして」とか「こんにちは」とか、「○○と申します」とかは、無いのでしょうか。
Yahoo!知恵袋などならいざ知らず、個人のblogに挨拶も無く、いきなり本題とは・・・。
あなたがどのような世代の方かは存じませんが、人に教えを請(こ)うのであれば、答える気にさせるような(答える気を削(そ)がないような)最低限のマナー(ネチケット)は守るべきかと思います。
さらに言うならば、
・どのような形式のデータを読み込ませていて
・どのような内容のエラーが出ているのか
の情報が欠落しており、答えようにも答えられません。
大変失礼しました。
気分を害されたことをお詫びいたします。
今回、検索クエリの抽出方法をネットで何時間か掛けて探していたところ、貴殿の非常に有意義なブログを見つけた次第です。
ブログ記事内のPHPを使わせていただき、何度かトライしたのですが、下記の現象が発生してしまいました。
インラインで失礼します。
>・どのような形式のデータを読み込ませていて
エクセルファイルをCSVエディタでdatファイルに変換した、keyword.datファイルになります。(エンコードはShift-JIS)
>・どのような内容のエラーが出ているのか
以下のエラーが表示されます。(アドレス部分は*に変換しております)
Warning: arsort() expects parameter 1 to be array, null given in /home/users/0/*****.jp-********/web/keyword.php on line 43
Warning: Invalid argument supplied for foreach() in /home/users/0/*****.jp-********/web/keyword.php on line 48
差し支えなければ、お教え頂けないでしょうか?
よろしくお願いいたします。
エラーの内容からして、配列($LineArray)に要素が正しく読み込まれていないようです。
PHPスクリプトは、私の環境に合わせて記述してあります。意味を推測して、ご自身の環境に合わせて変更してください。
(1) CSVファイルの形式について
Excelにて保存したCSVファイルとのことですが、各要素の区切りは、「タブ区切り」である必要があります。
(通常の「カンマ区切り」では正しく動作しません)
13行目にあるとおり、CSVファイルから1行読み込み、タブ(または改行コード)を区切りとして、1行を複数の要素に分解しています。
カンマ区切りであれば、タブ区切りに変更してください。
(2) 要素の格納順について
CSVファイルの1行は、4要素目がキーワード(['word'])、2要素目がその個数(['count'])としています。
(その他の要素は、空要素です)
CSVファイルの内容に合わせて、要素の格納順(13, 14行目の$wordの[]内の添え字)を変更する必要があります。
CSVファイルから正しく要素が読み込まれていれば、読み込んだ行数が表示されるはずです。(22行目)
まずはそこまで確認してみてください。