Your AI-Built Site Is Invisible to ChatGPT | Ploy

Why this happens

Lovable and Bolt generate client-side rendered (CSR) Vite + React single-page apps by default. The server sends an almost-empty HTML shell, and the browser builds the real page only after downloading and executing a 500 KB–2 MB JavaScript bundle.

Google spent over a decade building infrastructure to render JavaScript, so Googlebot eventually sees your content — but on a deferred second wave that independent audits clock at 3–6 weeks, and that render can silently fail if your content depends on API calls.

The newer AI crawlers never made that investment. They fetch raw HTML and stop. Research from Merj and Vercel found that ChatGPT and Claude download JavaScript files but read them as text — they do not execute them as code. To them, your <div id="root"> stays empty forever.

Who actually sees your content

Only one major crawler reliably renders JavaScript — and even it is weeks behind.

Crawler Powers Executes JavaScript? Sees your CSR site
Googlebot Google Search Yes — deferred 3–6 wks Eventually
GPTBot ChatGPT No Never
OAI-SearchBot ChatGPT Search No Never
ClaudeBot Claude No Never
PerplexityBot Perplexity No Never
Google-Extended Gemini training No Never
Applebot Siri & Spotlight No Never

What each AI builder ships by default

The pattern is consistent: AI coding tools optimize for working code shipped to humans, not for what machines read. Schema, sitemaps, and server rendering are left as homework.

Builder Default rendering Schema Sitemap Visible to AI crawlers
Lovable Client-side (Vite) None No No
Bolt.new Client-side (Vite) None No No
v0 by Vercel Next.js (SSR-capable) None by default No by default Only if configured
Cursor Depends on stack None Depends Depends
Ploy Server-side rendered Built in Auto Yes

Test your own site in 8 seconds

You do not need a tool to confirm this:

  1. View Page Source (Cmd/Ctrl + U). If the <body> is just an empty <div> and a script tag, your content is not in the HTML.
  2. Disable JavaScript in Chrome DevTools (Cmd/Ctrl + Shift + P → "Disable JavaScript") and reload. What remains is what AI crawlers see.
  3. Ask ChatGPT to summarize your URL. A generic answer — or an explicit “I can’t read this page” — confirms the rendering gap.

Why the usual fixes fall short

Every path points to the same root requirement: the content has to be in the initial HTML response. Structured data, in particular, must be server-rendered — JSON-LD injected via a useEffect hook is invisible to non-rendering crawlers.

How Ploy fixes it

Ploy builds and publishes server-rendered marketing sites, so the full page — headings, copy, internal links, and JSON-LD schema — is in the HTML on the first byte, before any JavaScript runs. That is exactly the format GPTBot, ClaudeBot, and PerplexityBot read.

A vibe-coded site that looks great and is invisible to ChatGPT is not done. The fix is not a clever prompt or a proxy — it is shipping HTML the machines can actually read.

FAQ

Why does my Lovable or Bolt site rank in Google but not appear in ChatGPT? Googlebot renders JavaScript on a delayed second wave, so it eventually sees client-rendered content. ChatGPT’s crawlers (GPTBot, OAI-SearchBot) do not execute JavaScript at all — they read the raw HTML and find an empty page.

How do I test if my site is invisible to AI crawlers? View Page Source, or disable JavaScript in DevTools and reload. Whatever is missing is what AI crawlers see. You can also ask ChatGPT to summarize your URL.

Does a prerender service fix this? It can, but it is a paid proxy layer serving bots a separate snapshot. Server-side rendering puts the content in the HTML natively — no extra service, no cloaking risk.

Do I have to rebuild my site in Next.js? Not on a server-rendered platform. Ploy renders every page server-side by default, so content is crawlable without a re-platform.