IndexNow の設定:キー、最初の送信、応答の読み方

IndexNow はキー、ホスト上のテキストファイル、公開ごとの一回のリクエストで設定できます。この章では三つの手順、応答コードの表、公開処理に差し込む送信スクリプトを扱います。

実装7分で読めます1718 回閲覧
IndexNow の設定:キー、最初の送信、応答の読み方

IndexNow は、URL が追加・変更・削除されたことを参加エンジンに伝える一行の ping です。設定には三つ必要です。キー文字列、そのキーを自分のホストにテキストファイルとして置くこと、公開ごとに一回の HTTP リクエスト。設定は無料です。所要時間は二十分ほどで、静的サイトでも CMS でも同じように動きます。

この章は、ページがすでに開けて sitemap にも入っている前提です。まだ確認していないなら、何かを送る前に確認してください。404 を返す URL への ping は無駄になります。三段階の公開手順はプロダクトのローンチチェックリストが扱っており、この章はその第三段階の詳しい版です。

実際に聞いているエンジン

IndexNow は共有プロトコルなので、一回のリクエストが全参加者に届きます。参加者の一覧は indexnow.org に公開されていて、数は多くありません。

エンジン一覧にあり
Microsoft Bingあり
Yandexあり
Naverあり
Seznam.czあり
Yepあり
Googleなし

他のエンジン分を支えているのは Bing です。Bing のインデックスは ChatGPT 検索と Copilot の取材元であり、早く Bing に入ることが AI 回答の引用候補プールへの最短ルートになります。Google には Google の道があるため、前の段階では両方をやります。

ステップ 1 — キーを作って置く

キーは、送信がホストを管理する人から来たことをエンジンに示すものです。自分で作る文字列で、ルールは狭めです。8〜128 文字、使えるのは a-z、A-Z、0-9、ハイフンだけ。波括弧を外した UUID なら条件を満たし、作り直しも簡単です。

KEY=$(uuidgen | tr 'A-Z' 'a-z' | tr -d '{}')
echo -n "$KEY" > public/$KEY.txt
echo "https://example.com/$KEY.txt"

ファイルは UTF-8 で、キーと同じ名前にし、中身はキーだけにします。デプロイしてから URL をブラウザで開いてください。キーがプレーンテキストで返らないなら、ここで止めます。以降の手順はすべて 403 で失敗し、その理由は表示されません。

ルート以外に置くこともできますが、その場合キーはそのフォルダ配下の URL だけを対象にします。/catalog/key.txt のキーは /catalog/anything を送れますが、/help/anything は送れません。ルートに置けばこの問題自体が消えます。

ここを逆に覚えている人が多いのですが、キーは API トークンのような秘密情報ではありません。誰でも読める URL に公開する必要があります。その公開ファイルが管理権の証明だからです。リポジトリに入れても問題ありません。大事なのは、ファイルと送信する値がずれないことです。

ステップ 2 — URL を一本だけ手で送る

自動化する前に、一回の GET で配線を確かめます。一回に一本の URL を送る、文書化された形です。

curl -s -o /dev/null -w '%{http_code}\n' \
  "https://api.indexnow.org/indexnow?url=https://example.com/your-page&key=$KEY"

200 はキーファイルが見つかって読まれたことを意味します。ページがインデックスされる意味ではありません。プロトコルの文書もはっきり書いています。200 はエンジンが URL を受け取ったことだけを示します。

ステップ 3 — バッチ用エンドポイントに切り替える

一回に一本の URL は手動テスト向きで、公開パイプラインには向きません。バッチ形式は一回の POST で最大 10,000 URL を受け付けます。ほとんどのサイトが一度に必要とする量より多い数です。

POST /indexnow HTTP/1.1
Host: api.indexnow.org
Content-Type: application/json; charset=utf-8

{
  "host": "example.com",
  "key": "your-key",
  "keyLocation": "https://example.com/your-key.txt",
  "urlList": [
    "https://example.com/page-a",
    "https://example.com/page-b"
  ]
}

host の値は、リスト内のすべての URL のホストと一致する必要があります。一つのペイロードに二つのホスト名を混ぜると、正しく見えるバッチが 422 で返る最も一般的な原因になります。

応答コードの読み方

エンドポイントが返すものは五つのコードで足ります。それぞれ別の誤りを指します。作りながらこの表を開いておいてください。

コード意味直すこと
200受信なし。受信であって登録ではない
400不正なリクエストJSON の破損、または URL エンコードの誤り
403キーが無効ファイルがない、またはファイル内のキーが違う
422処理不能URL がホストに属さない、またはキーが形式違反
429リクエスト過多送信を抑える。スパムとして読まれている

最初の試行はほぼ 403 に落ちます。原因は二つだけです。ファイルが指定した場所にない、またはファイルはあるが中のキーが送信値と違う。まず curl でキーファイルを取り、スクリプトの値と比べてから他のことを変えてください。単発では通ったバッチの 422 は、キーではなく host を疑います。

成果物:公開処理に差し込む送信スクリプト

このスクリプトを取り、二行を変えて、コンテンツを公開する処理の最後に実行します。sitemap を読み、まとめて送信し、コードを表示します。失敗が黙って消えず、見える形になります。

#!/usr/bin/env bash
set -euo pipefail
HOST="example.com"
KEY="your-key"

URLS=$(curl -s "https://$HOST/sitemap.xml" \
  | grep -o '<loc>[^<]*</loc>' \
  | sed 's/<[^>]*>//g' \
  | python3 -c 'import json,sys; print(json.dumps([l.strip() for l in sys.stdin if l.strip()]))')

curl -s -o /dev/null -w 'indexnow: %{http_code}\n' \
  -X POST "https://api.indexnow.org/indexnow" \
  -H 'Content-Type: application/json; charset=utf-8' \
  -d "{\"host\":\"$HOST\",\"key\":\"$KEY\",\"keyLocation\":\"https://$HOST/$KEY.txt\",\"urlList\":$URLS}"

長く運用するための習慣は二つです。何をいつ送ったか記録し、同じ送信は繰り返さず飛ばす。そしてカレンダーではなく変更時に送る。変わっていない sitemap を毎晩送るのが、429 を招く典型です。

設定が壊れる三つの形

どれも目に見えるコードを返すので、まず上の応答表を見ます。

  1. キーファイルが違う Content-Type で配信される、または余分な改行が入る。ブラウザでは正しく見えます。curl で取り、バイト単位で比べます。
  2. デプロイが終わる前に送信する。エンジンはホストがまだ公開していない URL に来て、ping は 404 に使われます。
  3. ビルドのたびに sitemap 全体を送る。最初は壊れず、そのうち 429 が返り、有用な ping がノイズに埋もれます。

IndexNow にできないこと

ページをインデックスさせることはできません。発見を早めるだけで、そのページを残す価値があるかはエンジンが決めます。薄いページは早く見つかっても薄いままです。参加者一覧に Google はいないので、Search Console 側の手順を置き換えることもありません。

どれだけ早くなるかも、私たちには分かりません。きちんと測るには、送っていない URL の対照群を数週間追う必要があり、自社サイトでそのテストはまだ行っていません。具体的な時間を語る人には、対照群を聞いてください。

IndexNow と一緒に確認したいのは、パイプラインの残りです。sitemap が全 URL にビルド時刻を刻んでいるなら、送信を強めても信号は直りません。私たちの sitemap の lastmod 調査では、24 サイト中 13 サイトがその状態でした。プロダクトの集客フローは、一つのエンドポイントではなく連鎖全体を確認するための入口です。API と MCP の開発者向けページには、送信を自分の公開処理につなぐ方法があります。

よくある質問

IndexNow は Google に効きますか?

Google は indexnow.org の参加者一覧にありません。Google が別の経路でこの送信を読むかは試していないので、どちらとも言いません。

どのくらいの頻度で送れますか?

プロトコルは一時間あたりの上限を公開していませんが、429 は送りすぎのために存在します。ユーザー生成コンテンツについては、公式の案内は段階的に減らす方法です。各項目を 20 まで、次に五つに一つを 100 まで、次に十に一つを 1,000 まで。

Bing Webmaster Tools は必要ですか?

送信には不要です。確認には必要です。URL が受け取られたかを見られる場所で、プロトコルで無料の確認手段はこれだけです。

後からキーを変えられますか?

変えられます。新しいファイルを置き、スクリプトの値を変え、古いファイルはしばらく残します。エンジンは送信のたびにキーファイルを読み直すので、登録をやり直す工程はありません。

収録: QueryWinガイド · レベル2

IndexNow の設定:キー、最初の送信、応答の読み方