Crawlers run no JavaScript, so a command writes them a copy.
A runtime-rendered app under hash routes is one URL to Google and invisible to AI crawlers — the structural weakness of the whole category. ApiGlow answers it twice: every route announces itself while the app runs, and one command writes the static mirror, from your machine, with no server anywhere.
One author-side command, drawn — what it writes, and a snapshot with nothing to execute.
Every route announces itself.
From the first install, with no configuration, the app manages the document head on every route change: a per-route<title> (“addPet — Petstore”), a meta description derived from the route’s own content, and a JSON-LD block per page — APIReference on endpoints, TechArticle on guides and scenarios, WebSite on the home view. Views that no type honestly fits emit none, because a wrong type is worse than silence.One command writes the crawler's copy.
apiglow bake is a companion CLI in the same npm package. It reads the exact config your host page inlines and writes what crawlers need: an HTML snapshot and a Markdown mirror per operation, guide and scenario, a sitemap.xml, and llms.txt / llms-full.txt as served files. Deploy the tree next to the app page — the reader’s install stays one script tag.apiglow bake --config apidoc.config.json \
--site-url https://docs.example.com/ --out public/
Honest pages, not cloaking.
Each snapshot is real static content: canonical to itself, an alternate link to its Markdown twin, JSON-LD, zero scripts — and one prominent link back into the interactive app. No redirect, no hydration, no user-agent sniffing.
It is not a prerender and not static-site generation. It is the app’s own export layer written to disk, fed by the same generators as the in-app “Copy page”, so the mirror cannot drift from the product.
The difference is where it runs.
Others have answers here, and they cost a process. Scalar pre-renders with a package that needs a running JS/TS server. Redoc CE bakes a single standalone HTML file — no per-route mirror, no sitemap, no llms.txt. Swagger UI, Stoplight Elements and RapiDoc document nothing.
ApiGlow’s mirror comes out of an author-side CLI, in the job that already deploys your docs, and there is no server anywhere in the result. That is the axis, not the existence of the feature. (Competitors re-verified against their public documentation, August 2026.)
Or stay out of the index entirely.
Internal documentation opts out with one key —seo.index: false injects a noindex robots meta before first paint. The config states its own limit: that is a request to well-behaved crawlers, not a protection. Documentation that must not be read needs an auth wall.{ "seo": { "index": false } }
The mirror degrades where Node has no DOM.
The bake runs in Node (≥ 24), so raw HTML inside Markdown prose is escaped rather than rendered in snapshots, and a docs page carried by a host-page element (contentId) cannot be baked at all — it is named in the warnings and dropped from the sitemap rather than linked dead.
The sitemap carries no <lastmod>, and robots.txt stays yours. Re-run the bake when the schema or the prose changes — in practice, from the CI job that already deploys the site.