SEO -

[Index Now 使い方] 検索エンジン「Bong」にページ更新通知をするPHPサンプルコード

目次

  1. Index Now で検索エンジンにページ更新通知を行う
  2. IndexNowを使うサイトの準備
  3. IndexNow 検索エンジンBingにページ更新通知を行うPHP
  4. 本当に検索クローラーがすぐにやってくる?

Index Now で検索エンジンにページ更新通知を行う

[Index Now 使い方] Bing用ページ更新通知PHP

Index Nowとは、検索エンジンのMicrosoft Bing、Yandex、Seznam.cz、Naverなどが採用している、ウェブサイト上でコンテンツが作成、更新、削除されたときに、検索エンジンにリクエストを送信するモジュール(仕組み)。通常、検索エンジンはサイト上のサイトマップ(xml)を読み取ってサイト内をクロールして、その結果をインデックスするんですが、クロールの頻度にはばらつきがあって、せっかく新しい有意義なページを作っても検索エンジンのクロールが遅いとなかなか検索結果に反映されません。

でもこのIndex Nowを利用すれば、検索エンジンのクローラーの自動巡回を待たずにクロールをリクエストできるので、サイトマップを作って待つだけよりも非常に早くページのインデックス化が期待できます。

IndexNowの通知はWordPressなどではプラグインがあって簡単に導入できるのですが、私のようにWordPressを使ってない自作ウェブサイトでは、自分でプログラムを組んで検索エンジンに通知する、もしくは通知用URLにアクセスして通知させる必要があります。

そこで今回は、IndexNowのモジュールを使って、Microsoftの検索エンジン「Bing」にページの更新通知を行うPHPサンプルコードを紹介。IndexNowの通知を自分でやりたい人は参考にどうぞ。


IndexNowを使うサイトの準備

BingにIndexNowでページ更新通知を送る前準備として、BingのIndexNowページでAPIキーを作成し、txtファイルをダウンロードしてサイトのルートディレクトリにアップロードしておきます。

IndexNowは、ページ更新通知の際にサイトのルートディレクトリにあるAPIキー.txtを認証して通知を受け取る仕組みになっているので、まずはこの作業を行っておきます。


IndexNow 検索エンジンBingにページ更新通知を行うPHP

APIキーをサイトルートに置いたら、あとはPHPコードなどを使ってページの更新通知を行います。そのときに使える「IndexNowで検索エンジンBingにページ更新通知を行うPHPサンプルコード」は下記となります。

function bingnow($urls){
	if(is_string($urls)){
		$urls=[$urls];
	}

$post="https://www.bing.com/indexnow"; $seachengine="www.bing.com"; $key="yourAPIKey"; //APIキー $site="yoursite.com"; //サイトのトップURL
$param=[ 'host'=>$site, 'key'=>$key, 'keyLocation'=> "https://".$site."/".$key.".txt", 'urlList' => $urls ];
$header=['Content-Type: application/json; charset=utf-8','Host: '.$seachengine];
$opt=[ 'http' => [ 'method'=>'POST', 'header' => implode("\n",$header), 'content' => json_encode($param), 'ignore_errors' => true, 'protocol_version' => '1.1' ] ];
file_get_contents($post, false, stream_context_create($opt)); $statusCode = http_response_code();
return $statusCode; }

このPHPサンプルコードは一番簡単な file_get_contents 関数でRequest header を付けてBingのindexnowを読み込んで、ページ更新通知を送るものになっています。

$key にはサイトトップに置いたAPIキーを、$site には自分のサイトドメイン(www.example.comなど。https://部分は入れない)を設定してください。

関数の変数 $urls には更新通知をしたいページURlを入れれば単独ページを更新通知してくれますが、配列形式で複数のURLを入力すれば複数ページをまとめて更新通知を送ってくれ、更新通知が終わったら、最後に http レスポンスコードを返してくれます。

単純なプログラムになっているので、直感的にもわかりやすいと思うので、あとは自由に使いやすいようにカスタマイズしてください。


本当に検索クローラーがすぐにやってくる?

このBingのIndexNowを実践してみたときに、本当にBingのクローラーがすぐにやってくるのかというのが気になるところですが、実際にやってみたところ、既存のすでにBingにインデックスされているページのクロールは早いのですが、新しいページには数日経ってからやってくるぐらいでした。

本来であれば新しいページの通知を送信すれば、すぐにクローラーがやってきて即座にインデックス化してくれる…というのが理想なのですが、実際は新しいページには結構な時間が掛かって検索クローラーがやってくるのが実情のようです。

ただ、サイトマップを作ってクローラーがそれを読み込むのを待つよりは早いと思うので、SEO的にはやらないよりはやったほうがいいぐらいの感覚で、このIndexNow対応実装をすると良いと思います。