ブログ記事を公開してから、検索エンジンにインデックスされるまでに数日かかることがあります。 AI検索サービスでも同様で、コンテンツの公開から引用されるまでにタイムラグが生じます。

IndexNowは、このタイムラグを解消するためのプロトコルです。 記事の公開や更新を検索エンジンにHTTPリクエストで即座に通知でき、対応する検索エンジンはクロールを優先的に実行します。

この記事では、IndexNowの仕組みから導入手順までを解説します。

IndexNowの仕組み

IndexNowは、Webサイトが検索エンジンに「このURLが更新されました」と通知するためのプロトコルです。 2021年にMicrosoftとYandexが共同で発表しました。

従来、検索エンジンがWebサイトの更新を知る方法は「クローラによる定期巡回」と「sitemap.xmlの読み取り」の2つでした。 どちらも検索エンジン側がサイトに来るのを待つ方式です。

IndexNowはこれを逆転させます。

方式主導権通知の速度サーバー負荷
クローラ巡回検索エンジン側数時間〜数日クローラのアクセス分
sitemap.xml検索エンジン側数時間〜数日低い
IndexNowサイト側数分〜数時間API呼び出し1回のみ

通知は1回のHTTPリクエストで完結します。

POST https://api.indexnow.org/indexnow
Content-Type: application/json

{
  "host": "example.com",
  "key": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "urlList": [
    "https://example.com/blog/new-article",
    "https://example.com/blog/updated-article"
  ]
}

所有権の証明には、APIキーをサイトのルートにテキストファイルとして配置します。 検索エンジンは通知を受け取ると、https://example.com/{api-key}.txtの存在を確認してからクロールを実行します。

対応検索エンジンとGEO対策での意味

サービス対応状況エンドポイント
Microsoft Bing対応https://www.bing.com/indexnow
Yandex対応https://yandex.com/indexnow
Naver対応https://searchadvisor.naver.com/indexnow
Seznam対応https://search.seznam.cz/indexnow
IndexNow共通対応https://api.indexnow.org/indexnow
Google非対応Google Search Console APIを使用

1つのエンドポイントに通知すれば、対応するすべての検索エンジンに情報が共有されます。

GoogleはIndexNowに非対応ですが、BingのインデックスはCopilot(Microsoft)のAI検索に利用されます。 Perplexityなどの一部のAI検索サービスもBingのインデックスを参照しているため、IndexNowでBingへの通知を早めることは、間接的にAI検索での掲載速度を改善します。

導入手順

手順1: APIキーの取得と配置

# UUID v4を生成
python3 -c "import uuid; print(uuid.uuid4())"
# 出力例: a1b2c3d4-e5f6-7890-abcd-ef1234567890

# キーファイルを配置
echo "a1b2c3d4-e5f6-7890-abcd-ef1234567890" > public/a1b2c3d4-e5f6-7890-abcd-ef1234567890.txt

手順2: 通知のテスト

# 単一URLの通知(GET)
curl "https://api.indexnow.org/indexnow?url=https://example.com/blog/test&key=a1b2c3d4-e5f6-7890-abcd-ef1234567890"
ステータスコード意味
200通知成功
202通知受理(非同期処理)
400リクエスト不正
403APIキー検証失敗
429レートリミット到達

CMS別の実装

WordPress

公式プラグイン「IndexNow」をインストール・有効化するだけで、記事の公開・更新時に自動通知されます。

手動実装の場合はpublish_postフックを使います。

function notify_indexnow($post_id) {
    $post = get_post($post_id);
    if ($post->post_status !== 'publish') return;
    $url = get_permalink($post_id);
    $api_key = 'a1b2c3d4-e5f6-7890-abcd-ef1234567890';
    wp_remote_get("https://api.indexnow.org/indexnow?url=" . urlencode($url) . "&key=" . $api_key);
}
add_action('publish_post', 'notify_indexnow');

Next.js

// lib/indexnow.ts
const INDEXNOW_KEY = process.env.INDEXNOW_API_KEY

export async function notifyIndexNow(urls: string[]) {
  if (!INDEXNOW_KEY) return
  const response = await fetch('https://api.indexnow.org/indexnow', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      host: 'example.com',
      key: INDEXNOW_KEY,
      urlList: urls,
    }),
  })
  console.log(`IndexNow: ${response.status}`)
}

revalidate APIやWebhookの処理内でnotifyIndexNowを呼び出します。

GitHub Actionsでの自動化

name: Notify IndexNow
on:
  push:
    branches: [main]
    paths: ['src/content/blog/**']
jobs:
  notify:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with: { fetch-depth: 2 }
      - name: Get changed posts and notify
        run: |
          URLS=$(git diff --name-only HEAD~1 HEAD -- src/content/blog/ | \
            sed 's|src/content/blog/||;s|\.md$||' | \
            awk '{print "https://example.com/blog/"$0}' | \
            jq -R -s 'split("\n") | map(select(length > 0))')
          curl -X POST https://api.indexnow.org/indexnow \
            -H "Content-Type: application/json" \
            -d "{\"host\":\"example.com\",\"key\":\"${{ secrets.INDEXNOW_API_KEY }}\",\"urlList\":$URLS}"

Google Search Console APIとの併用

GoogleにはIndexing APIで別途通知します。 IndexNowとGoogle Indexing APIを組み合わせることで、主要な検索エンジンすべてに即時通知できます。

import { google } from 'googleapis'

export async function notifyGoogle(url: string) {
  const auth = new google.auth.GoogleAuth({
    keyFile: 'service-account.json',
    scopes: ['https://www.googleapis.com/auth/indexing'],
  })
  const indexing = google.indexing({ version: 'v3', auth })
  await indexing.urlNotifications.publish({
    requestBody: { url, type: 'URL_UPDATED' },
  })
}

運用上の注意点

通知はインデックス保証ではありません。 IndexNowの通知が成功しても、インデックスするかどうかの判断は検索エンジン側が行います。

実質的な更新があったURLのみ通知します。 同じURLを短時間に何度も通知してもレートリミットに到達するだけです。

削除したページも通知します。 検索エンジンはそのURLにアクセスし、404レスポンスを受け取ることでインデックスからの削除を処理します。

効果の測定

指標測定方法
インデックス速度Bing Webmaster Toolsの「URL検査」
クロール頻度サーバーログのBot別アクセス数
AI検索での掲載タイミングPerplexity等で記事URLを検索

Bing Webmaster Toolsの「IndexNow」セクションで、送信したURLの処理状況を確認できます。

まとめ

IndexNowは、コンテンツの公開や更新を検索エンジンにリアルタイムで通知するプロトコルです。 導入は「APIキーの生成」「キーファイルの配置」「HTTP通知の送信」の3ステップで完了します。

Bingのインデックスを介してCopilotやPerplexityなどのAI検索にも間接的に影響するため、GEO対策としてコストに対して効果の大きい施策です。