IndexNow × Cloudflare Pages — sitemap.xml を即時インデックス通知する運用
このトピックを深掘りする
TanStack Start × Cloudflare
TanStack StartとCloudflare Pagesを組み合わせたフルスタック構成・Tailwind v4移行
全4本中 4 本目。
次に読む記事
Next.jsを選ばなかった理由 — TanStack Startを選んだ判断基準
203個のインタラクティブコンポーネントを載せるポートフォリオで、Next.jsではなくTanStack Start + Cloudflare Pagesを選んだ技術選定の記録。
TanStack Start × Cloudflare Pages — 詰まった全記録と解決策
CF PagesにTanStack Start v1をデプロイする過程で踏んだ5つの地雷 — Viteプラグイン順序、ServerFnバグ、FOUC対策など — の回避策を実コードで解説する。
Tailwind CSS v4移行で壊れたもの — @custom-variantとダークモードの実装記録
Tailwind CSS v3からv4への移行で踏んだ破壊的変更と、@custom-variantを使ったダークモード/ライトモードの実装パターン。
シリーズ全体の流れを見ながら、次に読む記事へ進めます。 初めての方はホームへ →
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 に
keyとkeyLocationを含める
このサイトでは以下の定数で管理しています。
src/config/indexnow.tspublic/<KEY>.txt
実装: sitemap.xml を読んで URL を送る
運用が崩れないようにするなら、URL リストを手で作らないほうが強いです。
そこで public/sitemap.xml を読み取り、<loc> を抽出して IndexNow に送ります。
このリポジトリでは次のスクリプトで行っています:
scripts/submit-indexnow.ts
ポイントは 2 つです。
- sitemap.xml をパースして URL リストを生成
- IndexNow の失敗は exit non-zero にして、CI で検知できるようにする
(ただし sitemap 生成と送信は分離し、第三者 API の一時障害で sitemap コミットが止まらないようにしています)
いつ送るべきか(Cloudflare Pages での運用)
一番やりがちな失敗が、「デプロイ前に送る」ことです。
URL を通知しても、検索エンジンが取りに来たときに 404 / 旧内容だと意味が薄い。
推奨はこれ:
bun run generate:seo(sitemap / feed / llms を生成)bun run build(静的生成・型チェック)- Cloudflare Pages に deploy
- deploy 後に
bun run submit:indexnow
この順序だと、IndexNow が参照する sitemap.xml と公開状態の整合性が取りやすくなります。
追加の最適化(効くところだけ)
1) robots.txt に sitemap を必ず載せる
IndexNow とは別軸ですが、発見性の基本は sitemap です。public/robots.txt に次の行があることを確認します。
Sitemap: https://sakimyto.com/sitemap.xml2) URL は canonical と一致させる
sitemap の URL は「正規 URL(canonical)」と一致させます。
多言語サイトの場合は hreflang を含めて齟齬が出ないようにするのが重要です。
(sakimyto.com は generate:seo が hreflang を出す前提で設計しています)
よくあるハマり
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 と同じリストを継続的に送れるので、記事追加・削除の追従漏れが起きにくい。