PHPであるページがGoogleにインデックスされているか調べる方法

Webページが検索結果に表示されるにはGoogleにインデックスされる必要があります。

このインデックスされているかどうかを直接調べる方法というのは実は存在しません。

でもどうしても調べたい場面があったので探してみたら次の2つの方法が見つかりました。

  • file_get_contentsを使う方法
  • curl_execを使う方法

ここでは自分の記憶の整理も兼ね、この2つのやり方とコード例についてまとめます。

1.file_get_contentsでインデックス状態を調べる方法

まず1つめは file_get_contents  関数を使って調べる方法

これはファイルの内容を文字列に読み込む関数で、外部URLを渡すことで外部ページのソースコードも取得可能です。これを上手く使えばインデックス状態が調べられます。

 

ただしこれ単体で調べるわけじゃありません。

Google検索ボックスで使える siteコマンド というものと一緒に利用します。

これはGoogle検索欄に site:調べたいURL  と入力することで特定URLがインデックスされているか調べることができるコマンドのこと

上の例のような感じで検索欄に入力して使います。

そして検索結果に見つかれば「約●●件」のような表示件数を表示し、見つからない場合はその表示件数は一切表示されません。

この表示件数を正規表現を使ってマッチすることでインデックスされてるか調べられます。

 

例えばあるURL(ページ)がインデックスされているか調べるPHPコードは次の通り

このコードはGoogleの検索結果ページをスクレイピングし、特定のパターン( /"resultStats"><\\/div>/  )が含まれているかで判別してます。

 

ちなみに上コードは関数化させた方が使いやすいです。例えば次がそのコード例

使い方は is_indexed_by_site_cmd( 'https://example.com/' );  という具合に調べたいURLを渡すだけです。

 

以上が file_get_conetnts を使ったインデックス状態の調べ方

簡単な方法なんですが、実は問題点もあります。それは次に挙げるようなこと

  • 検索結果ページを全て読み込みしてしまう
  • 検索結果ページが変わると通用しなくなる

スクレイピングで「約◯◯件」という表現があるか調べてるだけなので、検索結果ページの形式が変われば当然使えなくなります。

半永久的に使えるテクニックではないことに注意が必要ですね。

2.curl_exec関数でインデックス状態を調べる方法

お次は curl_exec  関数を使ってページのインデックス状態を調べる方法

こちらの場合はスクレイピングではなく、Googleキャッシュにページが登録されてるかどうかでインデックス状態を判定します。

 

例えばGoogleキャッシュに登録されているかは次のURLにアクセスすれば分かります。

登録済みなら元ページのWeb魚拓みたいな感じでキャッシュページが表示されたはず

そして登録済みの場合だけ 200 のHTTPステータスコードが返ってくるので、それをうまく利用すればインデックス状態を知れるという訳です。

 

では実際にどういう風に調べるかですが、次のような関数を作ればOKです。

この関数では curl_setopt  を使ってボディを含まないヘッダーのみ CURLOPT_NOBODY  )を読み込んでいます。なので無駄にページ全てを読み込むということもありません。

あとは次コードのようにインデックス状態を調べて処理できます。

単純に調べたいURLを渡せばいいだけです。

 

以上が curl_exec  を使ったインデックス状態の調べ方

こちらの方がムダな読み込みもないし、キャッシュの有無で確認できるので確実な方法かもしれません。ただし、キャッシュされるまでは時間がかかるので公開されたばかりのページでは未インデックス扱いになるのが少し不便なところですね。

とは言ってもインデックスされているか簡単に調べるならこの方法は結構役立つと思います。

ここまでのまとめ

もしインデックス状態を調べるAPIとかあれば良かったんですが、そんなものないのでスクレイピングとかキャッシュを調べたり少し工夫が必要です。

以上、URL(ページ)がインデックスされてるか調べる方法についてでした。

PHP

Commentsこの記事についたコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください