Vibe-coded app not indexed? SEO for Lovable, Bolt, v0 and Cursor
AI-built apps miss Google for the same reasons: content only in JavaScript, no sitemap, a builder subdomain, one title on every page. How to fix each.
LLaunchScaler·Published ·8 min read
An AI-built app usually fails to get indexed for one of four reasons, whichever tool built it: its content only appears after JavaScript runs, it has no sitemap.xml or robots.txt, it still lives on the builder's subdomain instead of your domain, or every route serves the same title and description. Each takes a few minutes to check and, except the first, a few minutes to fix.
This page covers what Lovable, Bolt, v0 and Cursor projects share, then points to a guide for each tool. Every tool-specific fact below was read on that tool's own documentation in September 2026, and several changed during 2026, so check your project against it rather than against older advice.
Why isn't my AI-built app indexed?
Because the builder produced a working app, not a crawlable website. Search engines and AI crawlers need content in the HTML, a list of your URLs, a stable domain and a distinct title on every page. Builders don't always set those up, and the gaps are the same across tools. The table maps each one to its symptom and fix.
Cause
How it shows up
The fix
Content only appears after JavaScript runs
curl of your page returns an empty <div id="root">; AI answers never mention your features
Server-render or prerender public pages
No sitemap.xml
returns 404 or your app's homepage; Search Console shows no sitemap
Questions, answered
What people ask about this
01
Why is my vibe-coded app not showing on Google?
Usually one of four things: the content only appears after JavaScript runs, there is no sitemap.xml or robots.txt, the site still lives on the builder's subdomain rather than your domain, or every route shares one title and description. Check each with curl and Search Console's URL Inspection.
Generate one listing every public URL on your production domain
No robots.txt, or one that blocks everything
/robots.txt returns 404 or Disallow: /
Publish one that allows crawling and names your sitemap
Still on the builder's subdomain
Links and search results show *.lovable.app, *.bolt.host, *.netlify.app or *.vercel.app
Connect your own domain, make it primary, point canonicals at it
One title and description for every route
Search results for different pages all read the same
Set a title, description and canonical per route in the served HTML
A preview or staging URL shared instead of production
The URL returns X-Robots-Tag: noindex or asks for a login
Share and link only the production domain
Which AI builders produce client-rendered apps?
It depends on the tool and, increasingly, on when the project was created. The idea that every AI builder outputs a client-rendered React app is out of date: v0 starts on Next.js, and Lovable switched new projects to server-side rendering in May 2026. Check your own project's stack before choosing a fix.
Builder
What it generates, per its docs
Where it publishes by default
Guide
Lovable
New projects since May 13, 2026: TanStack Start with server-side rendering. Older projects: React and Vite, with pages pre-rendered on request for verified search, social and AI crawlers
Whatever you build: Cursor describes itself as a coding agent, so the stack is your choice
Wherever you deploy
This page's checks apply as written
Two things follow. First, "React" does not mean "invisible": a Next.js or TanStack Start app renders its pages on the server, and Client Components in a Next.js App Router app are prerendered to HTML too. Second, an older Lovable project or a Vite single-page app built in Bolt or Cursor can show crawlers an empty shell. Google renders JavaScript later, in a queue; OpenAI's, Anthropic's and Perplexity's crawlers don't run it at all, according to Vercel's measurements. The client-side rendering SEO guide covers what each crawler sees and the fixes.
How do you check an AI-built app in 10 minutes?
Four requests and one Search Console check cover all the common causes. Run them against your production domain, not the builder's preview, and write down what each returns before you change anything.
Check the HTML. Run curl -s https://yourdomain.com | grep -i "your headline". If your H1 text doesn't appear, crawlers that don't run JavaScript see an empty page. Repeat on one deep page, such as /pricing.
Check the head. Run curl -s https://yourdomain.com/pricing | grep -iE "<title>|name=\"description\"|rel=\"canonical\"|og:title", then the same for a second route. Identical output on both means every page shares one title.
Open https://yourdomain.com/sitemap.xml. You should see XML listing your public URLs on your own domain. A 404, or your homepage rendered by the app's router, means there is no sitemap.
Open https://yourdomain.com/robots.txt. It should allow crawling and include a Sitemap: line. Disallow: / under User-agent: * blocks every search engine.
Check the headers: curl -sI https://yourdomain.com | grep -i x-robots-tag. Any noindex means search engines are told to leave the page out.
In Google Search Console, inspect the homepage URL, click Test live URL, then View tested page. The screenshot shows what Google's inspection tool rendered.
Step 1 has one exception worth knowing. Lovable serves pre-rendered pages from older projects only to crawlers it has verified, and its docs say third-party SEO scanners, link checkers and other agents see the regular single-page app shell. curl is one of those agents. On an older Lovable project, trust URL Inspection for what Google gets, and treat the curl result as what every unverified crawler gets.
Why are sitemap.xml and robots.txt missing?
Because a builder generates what the app needs to run, and a sitemap and robots file are for crawlers. Lovable's docs say it plainly: sitemaps, robots.txt, metadata and other SEO elements "are not always generated up front." In a single-page app, a missing file often doesn't even return a 404; the app's router answers the URL with the homepage.
What each file should contain:
robots.txt at the root: User-agent: *, Allow: /, any Disallow: lines for app-only paths such as /dashboard/, and Sitemap: https://yourdomain.com/sitemap.xml.
sitemap.xml at the root: one <url><loc> per public page, every URL absolute, on your production domain, returning 200. Leave out sign-in, dashboard and preview URLs.
In a Vite project, static files go in public/, which Vite copies to the root of the build as-is. In a Next.js project (v0), generate both from app/robots.ts and app/sitemap.ts. In Lovable, the built-in SEO review checks for both and can create or repair them. Then submit the sitemap in Search Console under Sitemaps.
Is your app still on the builder's subdomain?
If people reach it at yourapp.lovable.app, yourapp.bolt.host, yourapp.netlify.app or yourapp.vercel.app, it probably is, and that is worth fixing before you launch. Every link you earn on the builder's subdomain builds authority for an address you don't own, and moving later means redirecting all of it.
What each platform says:
Lovable recommends connecting a custom domain to build search presence, says a lovable.app subdomain works well for MVPs, demos and internal tools, and says branded workspace URLs are never indexable. You can't remove the lovable.app URL, but you can set your custom domain as primary; Lovable then redirects other connected domains to it with a 302.
Bolt publishes to a free bolt.host address; custom domains need a paid plan. Its domain aliases forward visitors to your primary domain, which Bolt's docs say helps SEO and avoids duplicate content.
On Vercel (where v0 publishes), every deployment from a non-production branch carries X-Robots-Tag: noindex, so preview links never rank. Only the production deployment on your domain should be shared.
After connecting the domain, add a Domain property in Search Console, which covers every subdomain and both protocols, set every canonical tag to the custom domain, and make sure the sitemap lists only custom-domain URLs.
Why do all your pages have the same title?
Because a single-page app serves one index.html for every route, and the title and description in that file are what crawlers and link previews read. Per-route tags set by JavaScript (React Helmet, or React 19 metadata in a client-only app) appear only after the app runs. Lovable's own review flags this pattern as "Duplicate titles across routes" and "Canonical URLs point to the homepage."
The fix is per-route metadata in the served HTML. On a server-rendering stack (Next.js, TanStack Start) that means using the framework's metadata API for each route. On a Vite single-page app it means prerendering the public routes, or at minimum replacing the starter defaults in index.html with your real name and description. The React Helmet SEO guide walks through the options, and the guide to whether AI crawlers render JavaScript shows why the served HTML matters most for AI answers.
What else do AI-built apps get wrong at launch?
Two more failures are worth checking before launch. The first is a noindex that was right in development and never removed: a robots meta tag in the template, or a staging header copied into production. The guide to noindex shipped to production covers how it happens and how to catch it.
The second is security, which matters more than indexing once the app has users. The checks that matter most are API keys in the client bundle, databases without row-level security, and public .env files. The vibe-coded app security checklist has a one-line test for each.
To run the whole check against your live app in one pass, run the free scan on LaunchScaler. It needs only your URL and no account, and its free checks cover content that only appears after JavaScript, missing or broken sitemap.xml and robots.txt, noindex in the meta tag or header, missing or placeholder titles and descriptions, canonicals that point at redirected or non-canonical URLs, and the security headers and exposed files AI-built apps tend to miss, among 156 checks across 6 of its 7 categories.
Can Google index a Lovable, Bolt or v0 site?
Yes. v0 starts projects as Next.js apps that render on the server, and Lovable's new projects use TanStack Start with server-side rendering. Bolt supports any JavaScript framework, so check what yours uses; a client-rendered app can still be indexed by Google, only later, and is close to invisible to AI crawlers.
03
Do AI-built apps need a sitemap?
Yes, for anything beyond a single page. Builders don't always generate sitemap.xml and robots.txt up front; Lovable's docs say so directly. Add both, list only your production domain's URLs, and submit the sitemap in Search Console.
04
Will my app rank on its lovable.app, bolt.host or vercel.app address?
It can be indexed there, but you build search presence on a domain you control. Lovable says its lovable.app subdomain suits MVPs, demos and internal tools, and that branded workspace URLs are never indexable. Connect a custom domain before you launch.
05
How do I check what Google sees on my AI-built app?
In Search Console, inspect the URL, click Test live URL and open View tested page. The screenshot shows the page as Google's inspection tool rendered it. For crawlers that don't run JavaScript, curl the page and look for your headline in the raw HTML.
Get a Bolt site indexed: check which framework it uses, publish publicly on your own domain, add robots.txt and a sitemap, then verify in Search Console.