Why single-page apps disappear from Google
A single-page app can look completely finished in your browser and still be a blank page to Google, Bing, and every AI crawler. This is the single most common visibility gap we find in AI-built apps — here's how to check for it and fix it.
Your app can look finished and still be invisible.
This is an actual pattern we catch: a polished dashboard that search engines and AI crawlers see as an empty shell.
Revenue
Signups
<!DOCTYPE html> <html> <head><title>Vite + React</title></head> <body><div id="root"></div></body> </html>0 bytes of indexed content
Completely invisible to Google, Perplexity, and ChatGPT Search — no matter how good the product is. It's one of 40+ checks in every Launch Readiness Audit. See how to check and fix it.
How to tell your app has this problem
- "site:yourapp.com" on Google returns zero or almost no results, even months after launch
- View Page Source (not Inspect Element) shows an almost-empty HTML file with a single container div
- Sharing a link in Slack, X, or LinkedIn shows no title, description, or preview image
- Google Search Console lists pages as "Discovered — currently not indexed" with no crawl errors
- AI answer engines (ChatGPT Search, Perplexity, Claude) never cite or reference your app when asked about it
Any client-rendered single-page app can have this problem
This isn't specific to one AI builder. Any app built as a client-rendered single-page app — React, Vue, or plain JavaScript, whether hand-written or generated by Lovable, Bolt, Replit, or another tool — ships one HTML file with an empty container. Content only appears after the browser downloads and runs your JavaScript bundle.
A human's browser runs that JavaScript, so the app looks complete. Googlebot can render JavaScript, but slowly and unreliably compared to reading real HTML. Most AI crawlers — the ones behind ChatGPT Search, Perplexity, and Claude — don't render JavaScript at all. They read the raw response and see nothing.
The fix is the same regardless of what built the app: ship real content in the first HTML response.
What actually fixes it
- 1. Pre-render or server-render every public, indexable route so the initial HTML response contains real, route-specific text — not just a script tag and an empty container
- 2. Add a unique <title>, meta description, canonical URL, and Open Graph tags to every route
- 3. Generate sitemap.xml listing every public route with an accurate last-modified date
- 4. Confirm robots.txt allows crawling of everything that should be indexed
- 5. Verify with a raw HTTP request, not a browser — a browser runs your JavaScript and will always look fine
Copy-paste this into Cursor, Claude, or v0 to ship the fix:
You are auditing a single-page application for search and AI-crawler visibility. Audit every public, indexable route (homepage, pricing, and any content pages) and confirm each one returns meaningful, route-specific HTML in the initial server response — not an empty container element that only fills in after JavaScript runs. For each route that fails this check: 1. Add server-side rendering or static pre-rendering so real content ships in the initial HTML response 2. Add a unique <title>, meta description, self-referencing canonical URL, and Open Graph tags 3. Generate or update sitemap.xml to include every public route with an accurate lastmod date 4. Confirm robots.txt allows crawling of all of them Report back the full list of routes you checked, which ones needed rendering changes, and what you changed on each.
curl -s https://yourapp.com | grep -i title
Your prototype deserves a real launch plan.
Stop guessing what comes next. Find the gaps, focus on the highest-impact fixes, and move toward customers with confidence.
Get a Launch Ready Audit48-hour turnaround. Clear priorities. No product-theater detours.