IndexNow 解説:公開時に検索エンジンに通知する
デプロイ後に検索エンジンに対して Push URL を更新します。
静的サイトやブログは、デプロイされるたびに内容が変化します。IndexNow をサポートする 検索エンジン なら、次の盲目的なクロール(blind crawl)を待たずに、その変更を即座に認識できます。
このページでは、その重要性、プロトコルの機能、そして実際のワークフロー(再利用可能なパターンや、小さめの Go CLI など)に組み込む方法を解説します。

なぜ静的サイトや Hugo サイトで IndexNow を使うのか
Hugo を S3 や類似のサービスにデプロイ している場合、HTML と sitemap.xml を既に配信しているはずです。クロールは最終的にサイトマップを読み取りますが、タイミングはあなたの制御下ではありません。サイトの移行後や、新しい投稿のバッチ処理後など、「来週のいつか」ではなく、即時のインデックス登録を望む場面があります。
IndexNow はプッシュチャネルです。あなたが重要視する正規化 URL のリストを POST します。参加しているエンジン(Microsoft Bing や indexnow.org にリストされている他社など)は、それらの URL のフェッチを優先的に処理します。これは適切な URL リダイレクトや内部リンクを置き換えるものではありませんが、git push と検索エンジンの認識の間のループを閉じます。
IndexNow は何をするのか
大まかなレベルで言うと、各送信は以下の概念的な JSON を含む HTTPS POST リクエストです:
host- あなたのサイトのホスト名(例:www.example.com)key- 事前に生成された秘密の文字列keyLocation(オプション)- デフォルトパスにない場合、検証ファイルの完全な URLurlList- インデックスを通知したい、そのホスト上の 1 つ以上の絶対 URL
エンジンは、不正なキー、誤ったホスト、またはフォーマット不正なペイロードを拒否します。成功は、エンドポイントにもよりますが、通常 HTTP 200 または 202 です。
詳細なルールとパートナーリストは公式サイトで確認できます。重要なメンタルモデルは、テキストファイルによるドメイン所有権の証明と、キーワードやページ内容ではなく明示的な URL リストです。
サイトの準備方法
キーファイルとホスト名
- キーを選択する - 長いランダムな文字列(秘密扱いとして扱う)。
- 公開する -
https://your-domain/<key>.txtに、キーのみを 1 行の本文として配置します。 - 同じキーを使用する - POST する際、CLI や自動化スクリプトで同じキーを使用します。
- URL を送信する - そのホスト上で再クロールしたい URL(新しい投稿、更新されたページ、リダイレクト先のターゲット)のみを送信します。
一度に多くの URL を移動させた場合、バッチ処理でパスを通知したいこともあるでしょう。IndexNow は、各エンジンの制限に従い、1 つのリクエストで複数の URL を受け付けます。
URL の送信方法
- 手動 POST - デバッグ用には、JSON を使用した
curlコマンドで十分です。 - プラグイン - 一部の CMS やホスティングパネルには、IndexNow のトグルスイッチが含まれています。
- デプロイスクリプト -
hugoコマンドとアップロードの後に、変更された URL リストやサイトマップ URL を持つ小さなバイナリを呼び出します。
Hugo ワークフローでは、自然なトリガーは「ビルド後」または「バケットへの同期後」です。あなたが提供している www またはアペックス(ドメイン名のみ)を含め、ライブサイトと一致する完全な HTTPS URL を渡してください。
小さな Go CLI(オプション)
実装可能な機能
ペイロードは小さな JSON POST であり、デプロイスクリプトに組み込めるため、最小限の Go コマンドラインツールは IndexNow に適しています。典型的な設計には以下が含まれます:
- 単一または複数の URL を位置引数として
--sitemapオプションでsitemap.xmlをフェッチし、すべての<loc>を送信(オプションの**--limit**付き)--enginesを介して複数のエンジンを並行処理(例:グローバルアグリゲーター用のindexnow、またはプロバイダーごとのエンドポイント)- フラグまたは環境変数(例:
INDEXNOW_KEY、INDEXNOW_WEBSITE_URL、INDEXNOW_ENGINES) - 403 や 422 レスポンスのデバッグ用**-v**(詳細出力)
go build または go install でビルドし、バイナリを PATH にインストールした後、公開後に呼び出します:
indexnow --key YOUR_KEY --website https://www.example.com https://www.example.com/new-post/
デプロイ後のサイト全体の更新には、公開されているサイトマップ URL と共に**--sitemapを渡すことができます。レスポンスコードとエンジンリストを独自の README に文書化し、静的デプロイをトリガーするものの横に、「公開してからインデックス登録」**のシェルスニペットを配置しておきます。
Best LLMs for OpenCode - tested locally という投稿では、「Go で IndexNow ノティファイアを実装する」ことをコーディングベンチマークとして使用しています。同じ仕様と構造化されたタスクを異なるモデルがどのように処理するかを確認したい場合に役立ちます。
実践的なヒント
- 1 つの送信で共有インフラストラクチャを通じて扇状に広めたい場合は、
indexnowエンジンターゲットを優先してください(searchengines.json を参照し、複数のエンドポイントをサポートする場合はそのリストを自身のクライアントにミラーしてください)。 - 429 は「速度を落とす」ことを意味します。403 は通常、キーまたはホストの不一致を意味します。まずキーファイルの場所またはホスト名を修正してください。
- IndexNow は、パス名を変更する際の301 リダイレクトの代わりにはなりません。リダイレクトが有効になった後に通知してください。
関連項目
- Web Infrastructure - 静的サイトのデプロイとインデックス登録に関するフルクラスター
- Best LLMs for OpenCode - tested locally - このプロトコルに関する現実的なコーディングベンチマークを含む
- Deploy Hugo site to AWS S3 - 公開後のフックが組み込まれるデプロイフロー
- 公式プロトコル - indexnow.org