Overview
IndexNow is an open protocol for pushing URL changes to participating search engines instead of waiting for them to crawl. One POST reaches every participant, because engines share submissions. Ship it on any site that publishes or updates content more often than weekly. Submission does not guarantee crawling or indexing.
Treat IndexNow as the delta channel on top of a sitemap
The IndexNow FAQ is explicit that it does not replace sitemaps: use IndexNow for high-priority or frequently changing pages and sitemaps for the full inventory. Bing’s July 2025 sitemap guidance says the same and adds that Bing ignores <changefreq> and <priority>. See sitemaps-deep.
Expect Bing and others, not Google
Participants listed on indexnow.org are Bing, Yandex, Seznam, Naver, Yep, the Internet Archive, and Amazon (Amazonbot). Google is not listed. For Google, rely on Search Console URL Inspection and the sitemap <lastmod> plus normal crawling. Bing traffic alone justifies the integration, and Copilot grounds its answers in the Bing index.
Host the key file at the site root
The key authenticates ownership.
- Use 8 to 128 characters from letters, digits, and hyphens.
- Serve it as UTF-8 text at
https://<your-domain>/<key>.txtwith the key as the file content, or at another public path declared inkeyLocation. - Rotate only on leak, and keep the old file live until the new one is.
POST URL lists in batches
Single URLs use a GET; batches use a JSON POST of up to 10,000 URLs.
curl -X POST "https://api.indexnow.org/IndexNow" \
-H "Content-Type: application/json" \
-d '{
"host": "example.com",
"key": "<your-key>",
"keyLocation": "https://example.com/<your-key>.txt",
"urlList": ["https://example.com/seo/technical", "https://example.com/seo/content"]
}'Wire these responses into alerting:
- 200: accepted. 202: received, key validation pending.
- 400: malformed request.
- 403: key missing, or the file does not contain the key.
- 422: URLs do not belong to the declared host, or the key does not match the schema.
- 429: rate-limited; back off. Limits are not published.
Submit only real changes
Resubmitting unchanged URLs risks throttling.
- Submit on publish, on material update, and on delete. The FAQ says to submit redirected URLs and pages returning 404 or 410 so engines drop them.
- Do not submit on every build. Diff against the last-deployed manifest and send only the changes.
- Tie submission to the
last_updatedrule in content: a page that is not re-dated is not re-submitted.
Use a plugin or wire it into CI
WordPress, Wix, Duda, and Cloudflare-fronted sites have official plugins or one-click integrations. For custom stacks (Next.js, Astro, Quartz), commit the key file, then after a successful deploy diff the URLs against the previous manifest and POST the delta from CI. Log responses and alert on non-2xx for two builds in a row.