Discoverability (GEO/AEO)
Answer to “how does this brand show up when an AI does the shopping?” — schema.org JSON-LD surfaces for answer engines, plus brand-visibility monitoring against a generative engine.
Structured data (packages/commerce/src/structured/, public, brand-resolved, gated on the brand’s identity.structured_data.enabled): GET /structured/feed.jsonld (schema.org ItemList), GET /structured/products/:id (Product + BreadcrumbList in a @graph), plus sitemap.xml and robots.txt — each also available under /structured/:storefront/*. Root aliases serve host-resolved GET /robots.txt, GET /sitemap.xml, and GET /.well-known/ai-catalog.json (a discovery document pointing answer engines at the feed — the commerce analogue of the agent card). Responses carry weak ETags + Cache-Control.
GEO/AEO monitoring (packages/commerce/src/geo/, API packages/commerce/src/geo/router.ts at /geo, cron packages/commerce/src/geo/monitor-job.ts) answers “how does this brand show up when an AI does the shopping?” Tenants register tracked queries (POST /geo/queries, gated geo:write); each cron tick replays active queries through a generative engine (Workers AI by default), extracts whether the brand was mentioned, its rank, competitors[], and products[], and writes geo_observations plus a geo_observation audit event, orchestrator_geo_mention counter, and orchestrator_geo_rank histogram. Read back via GET /geo/observations and GET /geo/summary. Tuned by the GEO_MONITOR env JSON.