AEO Headless Hosting — Do's & Don'ts
The same article, hosted two ways. One is invisible to AI answer engines. One is configured so AEO actually works. Open each page, then run npm run crawl to see what an AI crawler reads from the raw server response.
Don't
/without-aeo
Client-side rendered. Content + schema arrive after hydration via a browser fetch. The initial HTML is an empty shell — crawlers see nothing.
/with-aeo
SSR + ISR. Content and JSON-LD (Article, FAQ, HowTo, Speakable) are in the server response, with a deliberate per-route TTL.
What this demonstrates
- Rendering strategy: CSR is invisible to most AI crawlers; SSR/ISR is not.
- Schema delivery: JSON-LD must be in the server response, never injected client-side.
- ISR TTL: the
with-aeoroute setsrevalidatedeliberately as an AEO freshness signal. - Crawler access: see /robots.txt — GPTBot, ClaudeBot and PerplexityBot are explicitly allowed.
Prove it
With the dev server running, the crawler check fetches both pages exactly as a bot would (raw HTML, no JS execution) and reports whether the content and structured data are actually present:
npm run crawl