IndexNow
IndexNow is a small push protocol. Instead of waiting for a crawler to notice that a page changed, you POST the changed URLs to a participating search engine, having first proved you control the host by serving a key file from it. Version 1.0 is the current revision; participating engines share submissions with each other.
The exchange, start to finish#
Generate a key: 8 to 128 characters, hexadecimal, unique to the host.
Result The key is not a secret in the cryptographic sense. It is a proof of write access to the host, which is what the protocol needs.
Serve it as plain text at
https://host/<key>.txt, with the key itself as the file's entire content.Result Any submission naming that key can be verified by fetching the file. A key file that 404s makes every submission fail verification.
POST the changed URLs, either one at a time as a GET-style request or as a JSON body listing many.
Result The engine acknowledges receipt. Acknowledgement is not a promise to crawl, still less to index.
POST /indexnow HTTP/1.1
Host: api.indexnow.org
Content-Type: application/json; charset=utf-8
{
"host": "connectbyjbrh.com",
"key": "<8-128 hex characters>",
"keyLocation": "https://connectbyjbrh.com/<key>.txt",
"urlList": [
"https://connectbyjbrh.com/docs/technology/indexnow/"
]
}A bulk submission carries at most 10,000 URLs. Every URL in the list must belong to the host named in the host field; a mixed list is rejected in full rather than partially accepted.
Reading the response#
| Status | Meaning | What to do |
|---|---|---|
| 200 | Submission received | Nothing. This is not a statement about crawling |
| 202 | Received, key validation pending | Nothing yet. Confirm the key file is reachable |
| 400 | Malformed request | Fix the body. Usually a missing field or a bad content type |
| 403 | Key not valid for this host | The key file is missing, unreachable, or its content does not match the key sent |
| 422 | URL does not belong to the host, or the key does not match the pattern | Check for a stray host in the list |
| 429 | Too many requests | Back off. Submitting the same URL repeatedly is the usual cause |
Does Connect use IndexNow?#
Used. The capability registry records IndexNow as available, implemented in tools/docs_indexnow.py as part of the documentation tooling rather than inside the running application. Submission is a publishing step, not a request-time behaviour, and keeping it in the build tools is what makes it possible to submit only what actually changed in a release.
That distinction is the whole design. Because the corpus is built from page records, a build can compare what it just produced against what was published before and derive the changed set. A page whose content is identical is not submitted, which keeps the submissions truthful and keeps them under the bulk limit without any batching logic.
Note also what IndexNow does *not* replace. The sitemap remains the complete list and the entry point for every crawler that does not participate; IndexNow is a notification about a subset. Publishing one without the other leaves either the discovery or the freshness half of the problem unsolved.
Practical cautions#
- Key rotation
- Rotating the key means serving the new key file before the first submission that names it. The old file may be removed once no in-flight submission references it.
- Several keys on one host
- Permitted, and useful where two systems publish to the same host. Each names its own
keyLocation. - Subdomains
- A key file proves control of one host.
docs.example.netandexample.netneed separate key files. - Staging hosts
- A preview environment that submits its own URLs is asking search engines to index a preview. Gate submission on the production host, not on a build flag somebody can forget.
- Deletions
- Submitting a URL that now returns 404 or 410 is legitimate and useful — it tells the engine to re-check a page you removed.
Questions#
Is the IndexNow key a secret?
Not in the way an API key is. It is published at a URL on your own host, which is the point: anyone can verify it, and only someone who can write files to your host can create one. Treat it as a proof of control rather than a credential, and rotate it if the host changes hands.
Does submitting a URL make it appear in search results?
No. It shortens the delay before a crawler considers fetching the page. Everything downstream of that — whether it is fetched, whether it is indexed, whether it is shown — is unchanged. A page that would not have been indexed after a crawl is not indexed faster.
Should every deploy submit every page?
No, and doing so is actively harmful to the signal. Submit the URLs whose content changed in that release. If your build cannot tell you which those are, that is the problem to fix first — it is the same information a truthful lastmod needs.