← Blog
SEOIndexNowCloudflareAutomation

IndexNow × Cloudflare Pages — sitemap.xml を即時インデックス通知する運用

4 分で読める

このトピックを深掘りする

TanStack Start × Cloudflare

TanStack StartとCloudflare Pagesを組み合わせたフルスタック構成・Tailwind v4移行

全4本中 4 本目。

このトピックの記事一覧

シリーズ全体の流れを見ながら、次に読む記事へ進めます。 初めての方はホームへ →

IndexNow × Cloudflare Pages — sitemap.xml を即時インデックス通知する運用

新しい記事やページを公開したとき、いちばん無駄なのは「検索エンジンに気づかれるまでの待ち時間」です。

IndexNow は、その待ち時間を縮めるための URL 通知プロトコルです。
このサイト(sakimyto.com)では、Cloudflare Pages のデプロイ後に sitemap.xml をソースにして IndexNow に一括送信する運用にしています。

この記事では「仕組みの理解」より 明日から回せる実装と運用を優先してまとめます。

TL;DR(結論)

  • sitemap.xml を唯一のソースにする(URL リストの二重管理をしない)
  • IndexNow のキーは 秘密情報ではない(公開ファイルで所有を証明する)
  • CI / デプロイの「最後」に submit:indexnow を置く(公開 URL と一致させる)

IndexNow の仕組み(最小限)

IndexNow は「この URL 群が更新されたよ」という通知を、検索エンジン側へ送る仕組みです。

重要なのは キーでホスト所有を証明する点です。

  • https://sakimyto.com/<KEY>.txt を公開する(中身は KEY と同じ文字列)
  • 送信 payload に keykeyLocation を含める

このサイトでは以下の定数で管理しています。

  • src/config/indexnow.ts
  • public/<KEY>.txt

実装: sitemap.xml を読んで URL を送る

運用が崩れないようにするなら、URL リストを手で作らないほうが強いです。
そこで public/sitemap.xml を読み取り、<loc> を抽出して IndexNow に送ります。

このリポジトリでは次のスクリプトで行っています:

  • scripts/submit-indexnow.ts

ポイントは 2 つです。

  1. sitemap.xml をパースして URL リストを生成
  2. IndexNow の失敗は exit non-zero にして、CI で検知できるようにする

(ただし sitemap 生成と送信は分離し、第三者 API の一時障害で sitemap コミットが止まらないようにしています)

いつ送るべきか(Cloudflare Pages での運用)

一番やりがちな失敗が、「デプロイ前に送る」ことです。
URL を通知しても、検索エンジンが取りに来たときに 404 / 旧内容だと意味が薄い。

推奨はこれ:

  1. bun run generate:seo(sitemap / feed / llms を生成)
  2. bun run build(静的生成・型チェック)
  3. Cloudflare Pages に deploy
  4. deploy 後に bun run submit:indexnow

この順序だと、IndexNow が参照する sitemap.xml と公開状態の整合性が取りやすくなります。

追加の最適化(効くところだけ)

1) robots.txt に sitemap を必ず載せる

IndexNow とは別軸ですが、発見性の基本は sitemap です。
public/robots.txt に次の行があることを確認します。

Sitemap: https://sakimyto.com/sitemap.xml

2) URL は canonical と一致させる

sitemap の URL は「正規 URL(canonical)」と一致させます。
多言語サイトの場合は hreflang を含めて齟齬が出ないようにするのが重要です。

(sakimyto.com は generate:seohreflang を出す前提で設計しています)

よくあるハマり

IndexNow のキーを .env に入れてしまう

IndexNow のキーは 公開識別子です。
もちろんキーをローテーションする運用はありえますが、少なくとも「秘密として扱う」必要はありません。

秘密情報と混ぜると、運用が面倒になって回らなくなります(=結局送らない)。

sitemap と送信 URL の管理が分裂する

送信 URL を手で組むと、記事追加・削除・多言語追加で破綻します。
基本は sitemap.xml を唯一のソースに寄せるのが最短で強いです。

関連リンク(このリポジトリ内)

  • docs/runbooks/indexnow-setup.md(キー発行と Bing 側の確認手順)
  • scripts/generate-seo.ts(sitemap / llms / feed の生成)
  • scripts/submit-indexnow.ts(IndexNow の送信)

新記事公開のたびに「検索に出るまで待つ」を削るだけで、長期的にはかなり効きます。
まずは デプロイ後に機械的に送るところまでを、今日中に仕組みにしてしまうのがおすすめです。

よくある質問

Q. IndexNow のキーは秘密情報ですか?
いいえ。IndexNow のキーは公開識別子で、ドメイン直下にキーと同名の txt ファイルをホストして所有を証明する仕組み。漏洩という概念は基本的にない。
Q. IndexNow は Google Search Console の代わりになりますか?
ならない。IndexNow は Bing / Yandex などのエンジン向けの即時通知が主目的。Google は IndexNow 非対応のため、GSC と併用する前提になる。
Q. 送信対象 URL はどうやって集めるのが良いですか?
運用がシンプルなのは sitemap.xml を唯一のソースにすること。サイトの公開 URL と同じリストを継続的に送れるので、記事追加・削除の追従漏れが起きにくい。