IndexNow: get Bing and others to crawl changes fast
·4 min read
IndexNow is an open protocol that lets you tell search engines the moment a URL on your site is added, updated or deleted, instead of waiting for them to recrawl. You host a key file on your domain, then send the changed URLs to one endpoint, and every participating engine (Bing, Yandex, Naver, Seznam, Yep and Amazon) gets the same notification. Google does not support IndexNow, so it changes nothing about how Google finds your pages.
That last point decides how much effort it deserves. For Google you still rely on links, your sitemap and Search Console, which our guide on how to get Google to index your site covers. IndexNow is the fast lane for everyone else, and it takes about ten minutes to set up.
How IndexNow works
The IndexNow documentation describes two moving parts. A key proves you own the site, and a request lists the URLs that changed. The engine fetches your key file, checks that it holds the key, and then decides whether and when to crawl. An accepted submission is a hint. It does not guarantee a crawl, and it guarantees indexing even less.
Participating engines agree to share every submitted URL with each other, per the IndexNow FAQ. Ping one endpoint, such as api.indexnow.org or Bing's, and the rest hear about it. Sending the same batch to five engines just repeats yourself.
Set up your IndexNow API key
An IndexNow API key is 8 to 128 characters of letters, digits and dashes. Generate a random one, then serve it as a UTF-8 text file named after the key at your site root:
https://example.com/5c0a3fe0a7a54a4fb8b2d9e8a6f1c2d3.txtThe file contains the key and nothing else. No HTML, no comment, no trailing text.
You can host the file elsewhere on the same host and pass its URL as keyLocation. The folder then limits what the key can cover. A key file in /catalog/ authorizes /catalog/ URLs and nothing under /help/.
Watch for three mistakes. The file 404s because a CMS route swallowed it. A bot-protection rule serves a challenge page instead of the file. Or the server redirects the key URL somewhere else.
How to submit one URL or a bulk list
For one URL, a GET request is enough. URL-encode the page address:
GET https://api.indexnow.org/indexnow?url=https%3A%2F%2Fexample.com%2Fnew-post&key=5c0a3fe0a7a54a4fb8b2d9e8a6f1c2d3For many URLs, POST a JSON body. The documentation allows up to 10,000 URLs per request, all on the same host:
POST /indexnow HTTP/1.1
Host: api.indexnow.org
Content-Type: application/json; charset=utf-8
{
"host": "example.com",
"key": "5c0a3fe0a7a54a4fb8b2d9e8a6f1c2d3",
"keyLocation": "https://example.com/5c0a3fe0a7a54a4fb8b2d9e8a6f1c2d3.txt",
"urlList": [
"https://example.com/new-post",
"https://example.com/pricing"
]
}Leave out keyLocation when the file sits at the root under the default name.
IndexNow response codes
| Code | Meaning | What to do |
|---|---|---|
| 200 | URLs submitted | Nothing |
| 202 | Received, key validation pending | Keep the key file in place |
| 400 | Bad request format | Check the JSON and URL encoding |
| 403 | Key not valid, file missing or key not in it | Fix the key file |
| 422 | URLs not on the host, or key does not match the schema | Remove foreign URLs |
| 429 | Too many requests, possible spam | Slow down |
A 422 rejects the whole batch, so one URL from a staging subdomain sinks the rest.
When to ping IndexNow
Submit a URL when it is new, when its content meaningfully changes, and when it is deleted or redirected. The FAQ asks for 404, 410 and redirected URLs too, so engines can drop stale links.
Don't resubmit a page that hasn't changed. The FAQ says to avoid sending the same URL many times a day and to wait at least 5 minutes between updates on pages that change often. A cron that pushes your whole sitemap every hour is how you earn a 429. Your XML sitemap is still the full inventory. IndexNow only carries the changes.
IndexNow on WordPress and through your CDN
On WordPress you rarely touch the API yourself. Pick one integration and turn off the others, or you'll send every update twice.
- IndexNow plugin. Published by the Bing Webmaster team on wordpress.org, it detects created, updated and deleted pages and submits them in the background. It skips noindex URLs.
- Rank Math. The Instant Indexing module is in the plugin's base version. Turn it on under Rank Math SEO, then configure it at Instant Indexing > Settings. It generates and hosts the key and submits posts on publish or update.
- Yoast SEO Premium. Yoast added IndexNow in Premium 18.8. The base Yoast plugin does not include it.
On Cloudflare, Crawler Hints sends IndexNow signals for you. It reads a cache miss as a sign the content changed and skips responses with 4xx or 5xx status. Turn it on under Caching > Configuration. It is available on every plan, including the no-cost one, and covers the whole zone.
Plugins fail quietly. A key file blocked by a firewall rule returns 403 to the engine while the plugin dashboard looks fine, so test the file from outside your own browser session.
Check your IndexNow key and submit URLs
Our IndexNow Checker & Submitter runs both halves in one request. With no key, it generates a 32-character key and tells you the exact file to serve. With a key, it fetches the key file and flags a missing file, contents that don't match the key, a redirect, or a content type other than text/plain.
When the file is valid, it submits up to 100 URLs to api.indexnow.org in one request and reports whether the submission was accepted, rejected or throttled, with the status code. URLs from another host, outside the key file's folder or past the 100 cap are listed as not submitted rather than sent, so one stray URL can't trigger a 422. It does not reach Google, does not confirm indexing, and does not submit on a schedule. Each run costs 5 credits.