Website and SEO

IndexNow: tell search engines a page changed

Turning IndexNow on for a domain, the key file your site has to serve, which engines get notified, sending pages by hand or from the sitemap, and the record of every URL sent and what each engine answered.

Updated · 5 min read

IndexNow lets a site tell search engines that a page was added, changed or removed, instead of waiting for their crawler to come back. We send the notice for you and keep a record of it: every URL sent, when its page last changed, when we sent it, and what each engine answered.

Plan: Starter and up, like the rest of SEO. Free accounts get 402 plan_upgrade_required.

Which engines: Microsoft Bing, Yandex, Seznam.cz, Naver, Yep, the Internet Archive and Amazon. The first five are on for a new site; the Internet Archive and Amazon are off until you tick them. Google does not take part in IndexNow, so this does not reach Google.

Where

  • Web: SEO in the rail, open the domain, IndexNow below the whole-site audit.
  • API: /api/domains/:id/indexnow and the routes under it (scope seo; sending needs write).
  • MCP: get_indexnow_status, configure_indexnow, verify_indexnow_key, submit_urls_to_indexnow, sync_sitemap_to_indexnow, list_indexnow_urls, list_indexnow_submissions.

Setting it up

  1. Turn on IndexNow. We create a key for the domain, 32 letters and digits. If your site already has an IndexNow key (a WordPress plugin may have made one), you can use that instead.
  2. Put the key file on your site. Make a plain text file named after the key, for example 3f9c…e1.txt, containing only the key, and upload it so it loads at https://yourdomain.com/<key>.txt. The page shows the exact name, contents and address, with a copy button.
  3. Check the key file. We fetch it and say, per host, whether it loads and holds exactly the key. A web page (your 404 page, say) in place of the file does not count, and neither does a redirect to another host.

Each engine fetches the same file before it trusts what we send. If the file is missing on a host, we do not send that host's URLs at all: the engine would refuse them, and engines keep score of keys that fail.

A page on www.yourdomain.com needs the file on www.yourdomain.com. If your site answers on both, upload it to both, or send only the addresses your site actually uses.

Sending pages

  • From the sitemap. We read your sitemap (the address you saved, or the one in robots.txt, or /sitemap.xml) and send only pages we have never sent, or whose <lastmod> date is newer than the one we recorded. Newest changes go first, up to 1,000 a run; the rest wait for the next run. Some sites stamp every page in their sitemap with the time it was requested; a last-modified time that close to when we read it is ignored, so those pages are not sent again on every read.
  • Again, where an engine said no. Each sitemap read also sends a page again to any engine that refused it (slow down, key not found, no answer) an hour or more earlier, and to any engine you ticked after the page went out. Only that engine hears about it again.
  • Automatically. Tick "Read my sitemap once a day" and we do the above every day. If a run leaves pages over, the next one follows an hour later.
  • By hand. Paste up to 1,000 addresses, one per line. Use this when you changed a page and want it noticed now. Addresses that are not on the domain are refused and listed.

A domain can send 10,000 URLs in any 24 hours, across all three ways. Sending a page that has not changed does not help it; engines treat repeats as noise.

What the answers mean

Each engine gets its own request, so each has its own answer on every URL:

Answer HTTP Meaning
Accepted 200 The engine took the URLs.
Received 202 The engine took them and will check the key file later. Normal for a new key.
Key not found 403 The engine could not load the key file, or it did not match.
Refused 422 The URLs are not on the host sent, or the key breaks the protocol's rules.
Slow down 429 Too many requests; the engine will take more later.
No answer other / none The engine was down or timed out.

Accepted means the engine has the notice. It does not promise the page will be crawled or ranked.

Bing and "slow down". Bing answers 429 to most requests that come from Cloudflare's shared network, and that is where we send from. The same notice sent from anywhere else gets through. So Bing often shows "Slow down" for a while. We keep offering it the pages with each sitemap read, and the record changes when one gets through.

The record

The URLs sent table lists every address with the date its page last changed, when we last sent it (and how many times), and one tag per engine coloured by its last answer. Hover a tag for the HTTP status and time. Recent sends lists each send: where it came from (you, the API, the sitemap, or the daily run), how many URLs, and each engine's status.

Over the API, GET /api/domains/:id/indexnow/urls?engine=bing answers "which pages have been sent to Bing", and …/submissions is the full send log.

Common questions

Do I need this if I use Cloudflare? Cloudflare's Crawler Hints, when switched on, sends IndexNow notices under Cloudflare's own key. The two can run side by side; ours adds the record of what was sent and what each engine said.

I changed the key. What happens? The old key file stops counting. Upload the new one and check it again before sending.

Can I pause it? Yes. Pausing stops sending, including the daily run, and keeps the record.

Still stuck?

Ask the people who run the scanner.

Send the domain and what you expected to see. We look at the same scan you are looking at and write back with what it means and what to change.