Echo/Docs

CLI command

seo indexnow

IndexNow: a host's key declared once Echo read it where the host serves it, changed URLs submitted to every participating search engine, and published blog posts submitted by themselves.

Invocation#

Shell
echo-cli seo indexnow key --key <key> --key-location <https url> --by <who> | list | unkey --host <host> | submit --url <https url>

Inputs and output#

key and unkey write the key: host (the key location's), key, key_location, declared_by and declared_at. list writes keys by host and submissions, newest first: id, host, urls, post_id (the blog post whose publication made it, or null), status and body (the endpoint's answer) or error (what stopped the request), and submitted_at. submit writes { submissions } and exits 1 unless every submission was answered 2xx.

State effect#

Every verb calls Echo Web's authenticated /api/seo/indexnow with ECHO_INTERNAL_BEARER at ECHO_WEB_BASE_URL; the IndexNow section of the GEO screen and of Echo Desktop's GEO screen call the same operations, and echo-mcp runs them as echo_indexnow_key, echo_indexnow_state, echo_indexnow_unkey and echo_indexnow_submit. As the protocol defines it (https://www.indexnow.org/documentation), a host serves its key as a text file at the key location; key reads that file now and stores the key in seo_indexnow_keys only when the file serves exactly it. submit sends each host's URLs to https://api.indexnow.org/indexnow in one request with that host's key and key location and stores the answer in seo_indexnow_submissions. Publishing a blog post, by the blog admin's publish button or an approved publish_blog_post, submits its address (the surface's canonical origin, /blog/ and the slug) when its host has a key; the publication answers indexnow with the stored submission, or skipped with why none was made. A failed submission is stored, not thrown, since the post is already published.

Refusals#

  • A wrong invocation is refused before anything is sent: "seo indexnow takes <every verb's usage, separated by semicolons>; got <word>", "seo indexnow <verb> does not take <flag>; it takes …", "<flag> needs a value" and "seo indexnow <verb> needs <flag>".
  • Echo Web answers a bad request with "key is required: the IndexNow key the host serves", "key may hold only letters, digits and dashes, as IndexNow defines it; got <value>", "key_location is required: …", "key_location must be an https address; got <value>", "declared_by is required: who declares the key", "<key location> answered <status> serving <text>, not the key <key>; serve the key there first", "host is required: …" or "urls is required: the absolute addresses that changed"; not found with "<host> has no IndexNow key; echo-cli seo indexnow list lists them" for unkey, or "<hosts> has no IndexNow key; declare one with echo-cli seo indexnow key" for submit; and fails naming the cause with "the IndexNow key of <host> could not be stored: <cause>" or "the IndexNow submission for <host> could not be stored: <cause>". The command prints Echo Web's sentence and exits 1.