IndexNow 429 for days after a big batch, and the fix
After one 1,622-URL submission the shared IndexNow endpoint answered 429 to every later request for the host. Submitting to Bing and Yandex directly fixed it.
작성 seops team · Türkçesi
Short answer. api.indexnow.org throttles a host after a large burst and keeps answering 429 even to single-URL requests, in our case for three days. The same requests get 202 from yandex.com/indexnow and www.bing.com/indexnow. Submit to an engine directly (one notification is shared with all of them), keep batches under a few hundred URLs, and run only one IndexNow sender per site.
What happened
On 1 November we pushed a site’s whole sitemap, 1,622 URLs, through https://api.indexnow.org/indexnow in one request. The response was 200. From then on, every request for that host got 429 Too Many Requests: the nightly job from the site itself, the panel’s queue, and a single-URL test from a laptop. The key file at the site root returned 200 the whole time, so the key wasn’t the problem.
Three days later it was still 429.
What the direct endpoints said
Same key, same single URL, sent to the engines’ own endpoints:
| Endpoint | Response |
|---|---|
api.indexnow.org/indexnow | 429 |
www.bing.com/indexnow | 202 Accepted |
yandex.com/indexnow | 202 Accepted |
The shared endpoint is a convenience proxy. Its throttling is per host and, after a large burst, lasts far longer than the engines’ own limits.
The fix
seops now:
- Submits directly to the engines, never through the shared endpoint: Yandex first, because IndexNow shares a notification with every participating engine (Bing included); Bing’s own endpoint only as a fallback, since it rate-limits requests coming from Cloudflare’s shared egress addresses.
- Sends in batches of at most a few hundred URLs, one batch every 30 minutes, rotating across sites.
- Backs off per engine on 429 (20 → 40 → 80 → 120 minutes) instead of stopping everything.
- Logs the response code of every batch, so the IndexNow page shows “Yandex 202” rather than a vague “sent”.
If your site also runs its own IndexNow plugin or cron, turn one of them off. Two senders for the same host double the burst and halve the time until a 429.
How to check your own setup
- Open
https://yourdomain/KEY.txt. It must return 200 with only the key as the body. - Send one URL with
curl:
curl -s -o /dev/null -w "%{http_code}\n" -X POST "https://www.bing.com/indexnow" \
-H "Content-Type: application/json; charset=utf-8" \
-d '{"host":"example.com","key":"YOUR_KEY","keyLocation":"https://example.com/YOUR_KEY.txt","urlList":["https://example.com/"]}'
202 is good. 403 means the key file isn’t readable from the location you gave. 422 means the URLs don’t belong to the host. 429 means wait.
Why it matters for AI search
ChatGPT search and Copilot read the Bing index. A page that Bing hasn’t crawled can’t be cited there, however well it ranks on Google. IndexNow is the cheapest way to shorten that gap, which is why seops treats a working IndexNow setup as part of AI visibility, not just Bing SEO.
자주 묻는 질문
Does one submission to Bing reach Yandex too?
Yes. IndexNow engines share submissions with each other. Sending to both directly is belt and braces; it also tells you which engine accepted what.
What does 429 mean here?
Too many requests. The endpoint is rate-limiting your host, not rejecting your key. A 202 means accepted; a 403 means the key file could not be read.
Does Google support IndexNow?
No. For Google, submit a sitemap in Search Console and let it crawl; URL Inspection's request-indexing is manual and limited.