To rank a vibe-coded SPA in AI search: serve real HTML to crawlers (SSR, SSG, or prerendering), allow AI bots in robots.txt, publish llms.txt, add JSON-LD structured data, restructure pages answer-first — then verify with an AEO scan. The rendering fix comes first; without it, nothing else registers.
AI engines can't execute JavaScript at scale. Your single-page app assembles everything client-side. Those two facts are the entire problem — and every step below exists to route around them.
TL;DR — the 6 steps
/llms.txt describing your product in plain text.Run this and look at what comes back:
curl -s -A "GPTBot" https://yourapp.com
For a typical Lovable or Bolt app you'll see a <div id="root"></div> and a script tag. That's the entire site as far as ChatGPT, Claude, and Perplexity are concerned. They fetch HTML over HTTP and parse what's there; they do not boot a browser for your bundle.
Fix options, ranked by effort:
vite-plugin-prerender walk your routes and emit static HTML per route. Best effort-to-impact ratio for marketing pages.Whichever you choose, re-run the curl test. Your actual copy must appear in the raw response. This single step is the difference between "optimizing" and "existing."
The big engines crawl with named user-agents. Allow them explicitly and point at your sitemap:
User-agent: GPTBot
Allow: /
User-agent: OAI-SearchBot
Allow: /
User-agent: ClaudeBot
Allow: /
User-agent: PerplexityBot
Allow: /
User-agent: Google-Extended
Allow: /
User-agent: Bingbot
Allow: /
Sitemap: https://yourapp.com/sitemap.xml
Two notes vibe coders hit constantly: hosting templates and "bot protection" presets sometimes block these bots at the WAF/CDN layer even when robots.txt allows them (check your Cloudflare/Vercel settings), and an SPA usually has no sitemap at all — generate one listing every public route.
/llms.txt is a plain-text map written for AI engines: what your product is, what it does, key pages, pricing. It costs twenty minutes and removes every ambiguity about your entity:
# YourApp
> One-sentence factual description of what YourApp does and who it's for.
## Key pages
- Pricing: https://yourapp.com/pricing
- Docs: https://yourapp.com/docs
## Pricing
- Free: ...
- Pro ($X/month): ...
Keep it synchronized with reality — engines that read a stale llms.txt will repeat stale facts to your prospects.
JSON-LD tells engines what they're looking at without inference. The minimum set for a product SPA:
Organization + WebSite — sitewide, in the document head, ideally as one linked @graph.SoftwareApplication with offers — homepage and product pages: your name, category, and prices become machine-checkable facts.FAQPage — every page with a Q&A block. AI engines lift these wholesale.Your AI editor will generate all of this correctly from one prompt; validate the output with Google's Rich Results Test.
Engines compose answers from passages that already look like answers:
dateModified in schema.One page that answers one question completely beats five pages of brand copy.
Test, don't vibe:
For continuous mention-tracking once readability passes, see the best AEO tools comparison.
Effectively no. AI crawlers parse served HTML; if your content only exists after JavaScript runs, they index an empty shell. Prerendering, SSG, or SSR for public routes is the non-negotiable first step.
Both exist in the wild: ChatGPT Search and Claude use their own fetchers (GPTBot/OAI-SearchBot, ClaudeBot), Perplexity runs PerplexityBot, and several engines also lean on Bing's index — which is why allowing Bingbot and submitting your sitemap to Bing still matters for AI visibility.
Google ranks pages; answer engines cite sources inside a composed answer. Citation favors machine-readable, answer-shaped, factually-consistent content over backlink authority alone — which is why a small site that's perfectly readable can out-cite a big site that isn't.
After every significant deploy, and monthly at minimum. Client-side regressions are silent: the page looks identical in your browser while serving an empty shell to crawlers. Automated re-scans catch what eyeballs can't.
Paste your URL and get a security report in 30 seconds — 100+ automated checks with AI-ready fix prompts.
Related articles
AEO for vibe-coded apps means making AI-generated sites readable and citable. Why they are disproportionately invisible — and the exact fixes.
ChatGPT, Claude and Perplexity can't read most Lovable sites — they ship client-rendered React. The 60-second diagnosis, then the exact fixes.
SEO gets you ranked. AEO gets you cited by ChatGPT, Claude, and Perplexity. Where they overlap, where they diverge, and how to win both in one workflow.