Connect by JBRH Open Connect

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.

Status
Reference What this means
Audience
both, developer
Last verified
Product version
6.3.2

The exchange, start to finish#

  1. 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.

  2. 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.

  3. 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#

StatusMeaningWhat to do
200Submission receivedNothing. This is not a statement about crawling
202Received, key validation pendingNothing yet. Confirm the key file is reachable
400Malformed requestFix the body. Usually a missing field or a bad content type
403Key not valid for this hostThe key file is missing, unreachable, or its content does not match the key sent
422URL does not belong to the host, or the key does not match the patternCheck for a stray host in the list
429Too many requestsBack 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.net and example.net need 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.