What Is IndexNow and How It Speeds Up Indexing in Yandex and Bing
Basics3 minInnovialabs editorial team
In short
IndexNow is an open protocol that lets a site instantly notify Bing, Yandex and other participating search engines about new, changed or deleted URLs; Google does not use it, so a sitemap is still required.
The short answer
IndexNow is an open protocol for notifying search engines that a URL has been added, updated or deleted. Instead of waiting for a crawler to discover the change, your site sends a short request with the list of URLs, and the search engine can recrawl them sooner.
It is supported by Bing, Yandex and several other engines (for example Seznam and Naver). Participating engines share submitted URLs with each other, so one request to a single endpoint is enough. Google does not support IndexNow, which is why it does not replace a sitemap and Search Console.
How the protocol works
- You generate a key: a string of 8 to 128 characters using letters, digits and dashes.
- You publish the key in a text file on your domain, usually at the root:
https://example.com/<key>.txt. The file contains only the key itself. - When content changes, your site sends a request with the URLs and the key.
- The search engine fetches the key file to confirm that you own the site, then queues the URLs for crawling.
A notification is a hint, not an order. The engine still decides whether and when to crawl and index the page.
Setting up the key file
- Generate a random key and save it as
<key>.txtin the site root. - Make sure the file is accessible over HTTPS and returns status 200 with the key as plain text.
- If the file cannot sit at the root, put it elsewhere on the same host and pass its address in the
keyLocationparameter. In that case, only URLs under that path can be submitted.
In Next.js, the simplest option is to place the file in the public folder so it is served at the root.
Sending URLs
For one URL, a GET request is enough:
curl "https://api.indexnow.org/indexnow?url=https://example.com/blog/new-post&key=YOUR_KEY"
For several URLs, use POST with JSON:
curl -X POST "https://api.indexnow.org/indexnow" \
-H "Content-Type: application/json; charset=utf-8" \
-d '{"host":"example.com","key":"YOUR_KEY","urlList":["https://example.com/blog/a","https://example.com/blog/b"]}'
All URLs in one request must belong to the same host.
From a CMS
Many CMS platforms have plugins or built-in settings for IndexNow. Check that notifications are sent only for published pages and not for drafts, previews or service URLs.
From a Next.js site
Send the notification on the server after publishing, for example in a route handler called by your CMS webhook:
export async function notifyIndexNow(urls: string[]) {
await fetch("https://api.indexnow.org/indexnow", {
method: "POST",
headers: { "Content-Type": "application/json; charset=utf-8" },
body: JSON.stringify({
host: "example.com",
key: process.env.INDEXNOW_KEY,
urlList: urls,
}),
});
}
Call it only when content actually changes. Do not send the whole site on every deploy.
Response codes to know
| Code | Meaning |
|---|---|
| 200 | URLs received |
| 202 | Received, key validation pending |
| 400 | Invalid request format |
| 403 | Key not valid or key file not found |
| 422 | URLs do not belong to the host or the key does not match |
| 429 | Too many requests, slow down |
Why it does not replace sitemaps for Google
Google discovers pages through links, sitemaps and Search Console. IndexNow notifications do not reach it. Keep doing the basics:
- maintain an up-to-date XML sitemap with correct
lastmoddates; - submit it in Search Console and Yandex Webmaster;
- link to new pages from existing ones.
IndexNow complements this setup for Bing and Yandex. It also does not fix pages that search engines choose not to index because of low quality or duplicates.