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-powered fix prompts.
Scan your site freeRelated articles
AEO for vibe-coded apps is making AI-generated sites readable and citable by ChatGPT, Claude, and Perplexity. Why AI-built apps are disproportionately invisible — and the exact fixes.
ChatGPT, Claude, and Perplexity can't see most Lovable sites because Lovable publishes client-rendered React SPAs. The 60-second diagnosis and the exact fixes: prerendering, robots.txt, llms.txt, schema.
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.