Indexing, SEO and Agents
What each discovery file and tag does, and how to register the site with Google and Bing
The app is a single-page app: without JavaScript its page is nearly empty. These pieces make it findable by search engines and usable by AI assistants.
What does what
robots.txt (public/robots.txt) allows all crawlers and points them to the sitemap.
sitemap.xml lists the app and every docs page, so crawlers find pages without following links. Generated by scripts/build-seo.mjs on every pnpm build, from the docs frontmatter.
Canonical URL. Every shared link (/?lat=…&zoom=…) is a different address for the same page. The <link rel="canonical"> in index.html tells search engines to rank them all as the root, and each docs page declares its own address. Links keep working; it is only a hint to crawlers.
Shell text and schema.org markup. index.html carries a description, links to key docs pages and a WebApplication JSON-LD block, for crawlers and fetchers that do not run JavaScript. React replaces the text on first render.
llms.txt at the site root is for AI assistants that read the web, ChatGPT search among them: what the app is, how to build a link to a place and mode, and every docs page. Generated with the sitemap. The docs also serve their own /docs/llms.txt and /docs/llms-full.txt.
The agent skill (skills/terrain-viewer/SKILL.md) does the same for agents that load skills, with step-by-step instructions. See Use with AI Assistants.
Search consoles. Google Search Console and Bing Webmaster Tools are where the owner proves the site is theirs, submits the sitemap and sees what gets indexed. ChatGPT search draws largely on Bing's index, so Bing matters as much as Google here.
Google Search Console
- Open search.google.com/search-console and add a property: URL prefix
https://terrain-viewer.iconem.com/, or Domainiconem.comfor every subdomain. - Verify: for URL prefix, put the
google….htmlfile it gives inpublic/and deploy (or add its meta tag toindex.html); for Domain, add the DNS TXT record. - Sitemaps: submit
https://terrain-viewer.iconem.com/sitemap.xml. - URL inspection: request indexing of
/and/docs/.
Bing Webmaster Tools
- Open bing.com/webmasters and sign in.
- Import from Google Search Console copies the verified site and its sitemap. Otherwise add the site and verify with
BingSiteAuth.xmlinpublic/, a meta tag, or DNS. - Check that
sitemap.xmlis listed under Sitemaps.
IndexNow
A free ping that tells Bing (and other participating engines) a page changed, so it is recrawled within minutes instead of days. Generate a key in Bing Webmaster Tools under IndexNow or at bing.com/indexnow, serve it as public/<key>.txt, and have the deploy call https://api.indexnow.org/indexnow?url=<page>&key=<key>. Not set up yet.
URL as an API (Scalar)
The viewer's URL described as an OpenAPI document, browsed with Scalar — every parameter with the right control for its type
State reference (URL & storage)
Every URL parameter the app reads, generated from the source at build time — state parameters mirrored by nuqs, instruction parameters read once on load, and the settings kept in localStorage