What IndexNow Is
Traditional search engine crawling is pull-based: Googlebot and Bingbot periodically revisit known URLs to check for changes. A new article published today might not be crawled for hours or days, depending on your site's crawl budget and authority.
IndexNow flips this to push-based: when you publish or update a page, you immediately notify participating search engines via a simple API call. They then prioritize crawling that URL.
IndexNow is an open protocol, jointly developed by Microsoft (Bing) and Yandex, and now supported by Seznam and other engines. Google has participated in limited trials but has not formally committed to the protocol — Google still primarily relies on its own crawl scheduling and GSC's Request Indexing feature.
Supported Search Engines
- Bing — Full support, recommended as primary target
- Yandex — Full support
- Seznam — Full support
- Google — Partial/trial support; submitting doesn't guarantee faster indexing but doesn't hurt
Implementation: API Key Setup
- Generate an API key (any random string, e.g., a UUID)
- Create a text file named
{your-api-key}.txtcontaining just the API key on one line - Place it at the root of your domain:
https://yourdomain.com/{your-api-key}.txt - Submit URLs via POST request
curl -X POST "https://api.indexnow.org/IndexNow" \
-H "Content-Type: application/json" \
-d '{
"host": "yourdomain.com",
"key": "your-api-key",
"keyLocation": "https://yourdomain.com/your-api-key.txt",
"urlList": [
"https://yourdomain.com/blog/new-post",
"https://yourdomain.com/products/updated-item"
]
}'
Bulk submissions support up to 10,000 URLs per call. The response is 200 OK on success, 400 if the request is malformed, 403 if key validation fails, 422 if URLs don't match the host.
Next.js Integration
For a Next.js site, integrate IndexNow into your build pipeline. After generating your sitemap, extract changed URLs and submit them:
// scripts/submit-indexnow.ts
const INDEXNOW_KEY = process.env.INDEXNOW_KEY;
const DOMAIN = 'yourdomain.com';
async function submitUrls(urls: string[]) {
const response = await fetch('https://api.indexnow.org/IndexNow', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
host: DOMAIN,
key: INDEXNOW_KEY,
keyLocation: `https://${DOMAIN}/${INDEXNOW_KEY}.txt`,
urlList: urls,
}),
});
return response.status;
}
Call this after deploy with your changed URLs. You can also trigger it via a CMS webhook — when content is published, fire an API route that calls IndexNow immediately.
IndexNow vs GSC Request Indexing
| Feature | IndexNow | GSC Request Indexing | |---|---|---| | Target engines | Bing, Yandex, Google (partial) | Google only | | Programmatic | Yes, full API | Manual only (no public API) | | Bulk submission | Up to 10k URLs/call | 1 URL at a time | | Daily quota | No documented limit | ~10-12 per day | | Speed | Near-instant notification | 24-72 hours typically |
For Bing visibility, IndexNow is the clear winner. For Google, it's a complement to GSC's Request Indexing — not a replacement.
Links: IndexNow specification | Bing IndexNow documentation | IndexNow GitHub