アフィリエイトやってますが、自分の検索順位ってサーチコンソールから見れますよね
でも、毎日のキーワード毎の順位を記録して流れを把握したいなーと思うじゃないですか。
GRCとかAHREFSとか色々ツールも出回ってますけど、GRCは昔会社で使ってたんですけど、誤差の範囲と言えるレベルのズレじゃなかったんですよね。それで使用するのを辞めた経緯があります。
AHREFについては良いツールだと思うのですが、『高い』ですから手が出ましぇん。
そんな訳でちょっと自分で作ってみたらどうかな?と思ったわけです。
はい、ペチパーなので、もちろんPHPで!
Google Custom Search APIを使ってみる
GoogleカスタムサーチAPIは昔ちょろっと触った事もあるのですが、めんどくさいんです。
そして、1アカウント当たり1日100回しか検索させて貰えません
一応そう言う制限があるんですけども、Googleのアカウントって死ぬほど作っても怒られませんから、アカウント10個も持ってれば何とかなるのかな?とも思うわけです。
まぁ今回はどちらにしても技術的資料と言う事でサクサクと作ってしまいましょう。
GoogleのAPIを使うには
GoogleAPIを使う際にはAPIキーと言う認証情報が必要になります。
APIを少しでも触った事がある人なら当然の事ですよね。
しかし、今回のGoogleカスタムサーチAPIはちょっとやっかいです。
APIキーの他に『検索エンジンID』と言うのが追加で必要になります。
それぞれの取得の仕方をggったんですが画面が古くなってて、思うように取れなくてイライラしちゃいましたから、今回わたくしめが新しい画面をスクショしときますので、お役に立てればと思います。
GoogleAPIキーの取得方法
まずはAPIキーを取得します。
APIキーは上記から取得します。
上記の画像の通りに『認証情報』をクリックします。

APIキー制作
更に出てきた画面から、①をクリックして②のAPIキーをクリックすれば、バン!と制作されたキーが表示されますので、どこかにメモしていて下さい。
検索エンジンIDの取得
さてAPIキーが取得出来たら、今度は『検索エンジンID』と言うのを取得します。
これが無いと検索させて貰えないと言うGoogleの意地悪セキュリティです。
上記にアクセスして、左上メニューの『新しい検索エンジン』をクリックします。

検索エンジンIDの制作
はい、私はここですごーーーく困りました。
上から順番に説明します。
検索するサイト:は?何これ?Web全体を検索したいんぢゃーーい!って思いますよね。
でも、ここは、さっくりと yahoo.co.jp とか適当に入れといて下さい。
言語は『日本語』で、もちろん英語の検索結果が欲しい場合は適宜選択して下さい。
そして、検索エンジンの名前はこれも適当に『テスト』としても良いです。
んで、制作ボタンを押して完了です。
作った検索エンジンの設定

検索エンジンの設定
これで、作った検索エンジンが一覧に表示されました。
作った検索エンジンをクリックしましょう。私の場合は『おろろ』と言う名前で作りました。

検索エンジン設定
上の画面で大事なのが赤枠で囲った2点です。
まずは検索エンジンIDを回収しておきましょう。
ボタンをクリックすると、バーン!と検索エンジンIDが表示されますので、コピーして保存しておきます。
そして、ID制作の時に必須入力させられたyahoo.co.jpの項目のチェックマークを入れて上のボタンの削除ボタンから削除します。
これでやっと、Yahoo.co.jpの中だけでなく、Web全体からの検索結果を得られる事になります。
何がイライラしたかと言うと、このID制作の所で、ドメイン名を入力しなければ次に進めなかった事です。でも、ドメインを入力しちゃうと、そのドメイン内でしか検索出来ないので、普通にWPに設置するサイト内サーチみたいな、意味の無い検索エンジンになってしまいますから、本来の意図とは違うじゃねーか!となっていたのです。(笑
検索スクリプトを書く
もうここからは超楽勝です。
今までに作ったAPIキーとIDを利用してGoogleにクエリを投げるだけで検索結果を取得する事が出来ます。
しかも、このブログを見ているみなさんはコピペするだけで動かせちゃうと言う特典付きでございまーす!
$search_query = "検索キーワード 複数ある場合はスペースで区切る"; $api_key = "取得したAPIキー"; $cx = "検索エンジンID"; // ベースURL $base_url = "https://www.googleapis.com/customsearch/v1?"; // 検索パラメーター $params = [ 'q' => $search_query, 'key' => $api_key, 'cx' => $cx, 'alt' => 'json', 'start' => '1', ]; // リクエストパラメータ作成 $req_param = http_build_query($params); // リクエスト本体作成 $request = $base_url.$req_param; // jsonデータ取得 $json = file_get_contents($request, true); $json_d = json_decode($json, true);
はい これを実行すれば、Googleの検索結果10件取得出来るようになります。
Google検索のデータレスポンス
上記がプログラムを実行して得られるデータの頭の部分になります。
例えば HIT件数を表示したい場合は
echo $json_d['queries']['request']['0']['totalResults']
とすれば、HIT総数を表示する事が出来ます。
続いて上記の画像が欲しかった1つ目のデータになります。
正直、HITするサイトによってパラメータがあったり無かったりします。
タイトルとかリンクとかは絶対にありますからURLを取得して、自分のサイトかどうかを照合するだけなら、余裕で出来ますから安心して下さい。
でも、これSEOと何か関係がありそうだな・・・Googleはこう言うデータを取得出来るのか(ボソッ
それではやってみましょうタイトルとURLを取得するには以下のようにします。
echo $json_d['items']['0']['title'].' - '.$json_d['items']['0']['link'];
はい これで取得出来ましたね。
HITは1回の検索につき10件ずつデータを取り出せますから、Foreachで一気に取得したいですよね。
foreach($json_d['items'] as $key => $value){ $data .= $value['title'].' - '.$value['link']."\n"; } echo $data;
上記で一気に全部取り出しする事が出来ます。
今回は自分のサイトの順位を調べたいわけなので、ここからURLの照合確認をしたいと思います。
GoogleAPIで自分のサイトの順位を調べる
$my_site = 'yahoo.co.jp'; $cnt = 1; // カウンター foreach ($json_d['items'] as $key => $value) { // HITしたURL $url = parse_url($value['link']); if(strpos($url['host'],$my_site) !== false){ //サイトURLが含まれている場合 echo $cnt.'位にありました!'; break; } // カウンターをカウントアップ $cnt++; }
上記の場合は検索の1位~10位までの間でHITすればループがストップしてO位にありました!と表示されて処理が終了します。
そして、最後まで読んでくれた方の為に、コピペだけで使えるサンプルソースコードをプレゼントしちゃいましょう。
今までの流れのソースを繋げたものが以下のソースになります。
<?php $my_site = 'yahoo.co.jp'; // ドメイン名のみ記入 $cnt = 1; // カウンター $search_query = "検索キーワード 複数ある場合はスペースで区切る"; $api_key = "取得したAPIキー"; $cx = "検索エンジンID"; // ベースURL $base_url = "https://www.googleapis.com/customsearch/v1?"; // 検索パラメーター $params = [ 'q' => $search_query, 'key' => $api_key, 'cx' => $cx, 'alt' => 'json', 'start' => '1', ]; // リクエストパラメータ作成 $req_param = http_build_query($params); // リクエスト本体作成 $request = $base_url.$req_param; // jsonデータ取得 $json = file_get_contents($request, true); $json_d = json_decode($json, true); foreach ($json_d['items'] as $key => $value) { // HITしたURL $url = parse_url($value['link']); if(strpos($url['host'],$my_site) !== false){ //サイトURLが含まれている場合 echo $cnt.'位にありました!'; break; } // カウンターをカウントアップ $cnt++; }
と言う風になります。
10位以上も調べたいぜ!と言う方はForeachの前に、Foreachすると良いですよ
しかし、100回検索の制限があるので、検索でエラーが出たらAPIキーとエンジンIDを次々に切り替えて行く処理をすれば使えそうですね。
分からない事とかありましたら、お気軽にコメント下さい。
コメント