IndexNow 実装ガイド 2026|Next.js / WordPress で公開即時 Bing 通知を仕組み化する 5 ステップ
目次
- 結論:IndexNow 実装の 5 ステップ
- 計測方法(Bing Webmaster Tools)
- URL Submission レポート
- インデックス速度の比較
- Bing:Google 比率の変化
- 実装手順(HowTo JSON-LD で記述)
- Next.js 15 (App Router) での実装例
- 公開フックでの呼び出し
- キーファイル配置(Next.js)
- WordPress での実装例
- エラー処理の設計
- HTTP ステータス別対応
- リトライ戦略
- ベストプラクティス
- バッチ送信
- 重複送信の回避
- 開発環境での無効化
- キーローテーション
- 失敗パターン
- 失敗 1:キーファイルを配置していない
- 失敗 2:公開フックが本番で動いていない
- 失敗 3:開発環境からも送信している
- 失敗 4:エラー処理が同期ブロッキング
- FAQ
- Q1: IndexNow を実装すると Google にも効きますか?
- Q2: IndexNow の上限は?
- Q3: 削除した URL も通知すべきですか?
- Q4: WordPress プラグインで自動化できますか?
- Q5: キーは公開しても大丈夫ですか?
- 関連記事
- この課題を1人で抱え込まないために
IndexNow 実装ガイド 2026|Next.js / WordPress で公開即時 Bing 通知を仕組み化する 5 ステップ
この記事の結論(150 字以内) IndexNow は Bing / Yandex などにインデックス通知を即時送る API。Next.js は publish フック、WordPress はプラグインまたは functions.php で実装。laboz は実装後に Bing インデックス速度が分単位に短縮、Bing:Google 比 2.3:1 です。
結論:IndexNow 実装の 5 ステップ
- キー発行:英数字 8-128 文字のランダム文字列を生成
- キーファイル配置:
/{key}.txtをルートに配置(中身はキー) - 公開フックで API 呼び出し:記事公開時に POST
- エラー処理:失敗時のリトライと通知
- 計測:Bing Webmaster Tools の URL Submission レポートで確認
IndexNow は Microsoft / Yandex が共同で立ち上げた軽量 API です。Bing / Yandex / Seznam / Naver の一部が対応しており、Google は非対応ですが、Bing 経由 organic を伸ばす運用では必須レベルの施策です。
計測方法(Bing Webmaster Tools)
URL Submission レポート
Bing Webmaster Tools → URL Submission で、IndexNow 経由で送信した URL 数と承認数が確認できます。1 日上限は 10,000 URL。
インデックス速度の比較
実装前後で「公開 → インデックス」の所要時間を比較。laboz では実装前 24-48 時間 → 実装後 5-30 分まで短縮されました。
Bing:Google 比率の変化
GA4 で Bing 流入セグメントを月次観測。IndexNow 実装と Bing 流入比率の伸びは強く相関する傾向があります。
実装手順(HowTo JSON-LD で記述)
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "Next.js / WordPress で IndexNow を実装する手順",
"totalTime": "PT4H",
"step": [
{ "@type": "HowToStep", "position": 1, "name": "キー発行", "text": "英数字 8-128 文字のランダム文字列を生成。UUID または crypto.randomBytes で生成可能。" },
{ "@type": "HowToStep", "position": 2, "name": "キーファイル配置", "text": "/public/{key}.txt(Next.js)またはルートディレクトリ(WordPress)に配置。中身はキー文字列のみ。" },
{ "@type": "HowToStep", "position": 3, "name": "公開フック実装", "text": "記事公開時に https://api.indexnow.org/IndexNow に POST する関数を実装。" },
{ "@type": "HowToStep", "position": 4, "name": "エラー処理", "text": "失敗時のリトライ(3 回 / 指数バックオフ)と Slack / Sentry 通知を実装。" },
{ "@type": "HowToStep", "position": 5, "name": "Bing Webmaster Tools で確認", "text": "URL Submission レポートで送信数と承認数を月次確認。" }
]
}
Next.js 15 (App Router) での実装例
// lib/indexnow.ts
const INDEXNOW_KEY = process.env.INDEXNOW_KEY!;
const HOST = 'laboz.jp';
export async function notifyIndexNow(urls: string[]): Promise<void> {
if (!INDEXNOW_KEY || urls.length === 0) return;
const payload = {
host: HOST,
key: INDEXNOW_KEY,
keyLocation: `https://${HOST}/${INDEXNOW_KEY}.txt`,
urlList: urls,
};
for (let attempt = 1; attempt <= 3; attempt++) {
try {
const res = await fetch('https://api.indexnow.org/IndexNow', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload),
});
if (res.ok || res.status === 202) return;
throw new Error(`IndexNow ${res.status}`);
} catch (err) {
if (attempt === 3) {
console.error('IndexNow failed', err);
// Slack / Sentry 通知
}
await new Promise(r => setTimeout(r, 1000 * attempt));
}
}
}
公開フックでの呼び出し
// app/api/articles/publish/route.ts
import { NextResponse } from 'next/server';
import { notifyIndexNow } from '@/lib/indexnow';
import { publishArticle } from '@/lib/articles';
export async function POST(req: Request) {
const { slug } = await req.json();
await publishArticle(slug);
// fire-and-forget で IndexNow 通知
notifyIndexNow([`https://laboz.jp/column/${slug}`]).catch(() => {});
return NextResponse.json({ ok: true });
}
キーファイル配置(Next.js)
/public/{INDEXNOW_KEY}.txt を作成し、中身はキー文字列のみ(改行・BOM なし)。
WordPress での実装例
// functions.php または mu-plugins/indexnow.php
add_action('publish_post', function($post_id) {
$key = defined('INDEXNOW_KEY') ? INDEXNOW_KEY : '';
if (!$key) return;
$url = get_permalink($post_id);
$payload = json_encode([
'host' => 'laboz.jp',
'key' => $key,
'keyLocation' => "https://laboz.jp/{$key}.txt",
'urlList' => [$url],
]);
wp_remote_post('https://api.indexnow.org/IndexNow', [
'headers' => ['Content-Type' => 'application/json'],
'body' => $payload,
'timeout' => 5,
'blocking' => false, // fire-and-forget
]);
});
エラー処理の設計
HTTP ステータス別対応
| ステータス | 意味 | 対応 |
|---|---|---|
| 200 | 成功 | 何もしない |
| 202 | 受理(処理中) | 成功扱い |
| 400 | パラメータ不正 | キーや URL を確認、リトライしない |
| 403 | キー認証失敗 | キーファイル配置を確認 |
| 422 | URL 形式不正 | URL を再生成してリトライしない |
| 429 | レート制限 | 指数バックオフでリトライ |
| 500 系 | サーバーエラー | 指数バックオフでリトライ |
リトライ戦略
3 回まで指数バックオフ(1 秒 → 2 秒 → 4 秒)。3 回失敗時は Slack / Sentry に通知し、手動再送のキューに積む設計が安全です。
ベストプラクティス
バッチ送信
複数記事を一度に公開する場合は urlList 配列にまとめて送信。1 リクエスト最大 10,000 URL。
重複送信の回避
同じ URL を 24 時間以内に再送するとレート制限に当たることがあります。Supabase などに送信履歴を保存して重複排除。
開発環境での無効化
process.env.NODE_ENV === 'development' のときは送信しない。dev URL が Bing にインデックスされると検索ノイズになります。
キーローテーション
漏洩が疑われる場合は新しいキーを生成し、古いキーファイルを削除して新キーファイルを配置。即時切り替え可能。
失敗パターン
失敗 1:キーファイルを配置していない
403 でリジェクトされ続けます。回避策: /public/{key}.txt を原則として配置。
失敗 2:公開フックが本番で動いていない
Vercel の環境変数 INDEXNOW_KEY が空のままなど。回避策: 公開後に Bing Webmaster Tools の URL Submission で確認。
失敗 3:開発環境からも送信している
dev URL が Bing にインデックスされる。回避策: NODE_ENV ガードを原則として入れる。
失敗 4:エラー処理が同期ブロッキング
公開 API がタイムアウトして UX が悪化。回避策: fire-and-forget または非同期キュー(BullMQ / Vercel Cron)で実装。
FAQ
Q1: IndexNow を実装すると Google にも効きますか?
Google は IndexNow に非対応です。Google には Search Console の URL Inspection / API を使います。両方を並行運用するのが推奨です。
Q2: IndexNow の上限は?
1 リクエスト 10,000 URL、1 日の総送信数の明示上限は公開されていません。同一 URL の 24 時間以内再送はレート制限に当たることがあります。
Q3: 削除した URL も通知すべきですか?
はい。削除後の URL を IndexNow に送ると 410 Gone を Bing が確認しに来てインデックスから外れます。/sitemap.xml の更新と合わせて運用。
Q4: WordPress プラグインで自動化できますか?
可能です。"IndexNow" という公式プラグインがあり、設定不要で動きます。functions.php で自前実装するより安全です。
Q5: キーは公開しても大丈夫ですか?
キーファイル URL は公開されますが、第三者が他サイトから自社の URL を IndexNow に送ることはできません(host と keyLocation の整合チェックがあります)。漏洩しても致命的ではありません。
関連記事
- Bing 経由 organic を伸ばす BtoB 戦略
- llms.txt 実装ガイド
- 構造化データの AIO 優先度
- GSC モバイル CTR 改善プレイブック
- AI 流入を GA4 セグメントとして切り出す方法
この課題を1人で抱え込まないために
ATKは、AIマーケティング部長として、記事設計、検索意図、内部リンク、CTA、月次改善レポートを継続的に整えます。まず現状を確認したい場合は、無料SEO / AIO診断で課題を棚卸ししてください。
Related
関連記事

ChatGPT / Claude / Gemini ビジネス比較 2026 — 法人導入の実務判断と SEO 活用
ChatGPT・Claude・Gemini を法人導入の観点で比較し、コスト・セキュリティ・日本語性能・SEO/AIO 活用度の 4 軸で整理。1 人マーケから情シスまで、業務別の選び方を実務目線で解説します。
AI 流入を GA4 セグメントとして切り出す方法 2026|ChatGPT / Perplexity / Claude / Gemini を月次計測
AI 流入(chatgpt.com / perplexity.ai / claude.ai / gemini.google.com / copilot.microsoft.com / notebooklm.google.com)を GA4 でセグメント化し、月次レポートに組み込む手順を解説します。
AI SEOツール比較 2026|Surfer・Jasper・EmmaTools・ATK・Claudeを選ぶ前に見る軸
AI SEOツールを比較する時に見るべき機能、価格、日本語対応、GSC/GA4連携、AI検索対応、運用体制を整理。Surfer、Jasper、EmmaTools、ATK、Claudeを検討する前の判断軸を解説します。