InsightsBuilder guides

Why your Lovable app isn't showing up on Google

A Lovable app renders in the browser, so it looks live — but Google and ChatGPT often see a blank page. Here's what they actually receive, how to check it in 30 seconds, and the five fixes in the order that matters.

Aug 8, 2026 · 7 min read

The short version

Your app works in a browser but not in Google because Googlebot and AI crawlers read the HTML your server sends *before* JavaScript runs — and a Lovable app sends an almost empty shell. Fix what the crawler receives, not what you see.

The page a crawler receives is empty

Lovable ships a React single-page app. The server returns one small HTML file with an empty root element, and the browser fills it in by running JavaScript. You see the finished page; a crawler often doesn't.

Google *can* render JavaScript, but it does so on a second pass that can lag days behind, and it skips pages it judges low-value. The AI crawlers behind ChatGPT, Perplexity and Google's AI answers don't run JavaScript at all. To all of them, your first response looks like this:

what the crawler downloadshtml
<!doctype html>
<html>
  <head><title>Vite App</title></head>
  <body>
    <div id="root"></div>
    <script src="/assets/index-a1b2c3.js"></script>
  </body>
</html>

No headline, no copy, no links. A default Vite App title. There is nothing on the page to index, so nothing ranks.

Check what Google actually sees in 30 seconds

Don't trust the rendered page in your browser — check the raw response. Two ways:

  1. 1

    View source, not inspect

    Open your live app, then use View Page Source (Cmd/Ctrl+U). This shows the HTML the server sent, before JavaScript. Inspect Element shows the rendered DOM, which hides the problem.

  2. 2

    Fetch it like a crawler

    Run curl -s https://yourapp.com | head -40 in a terminal. If you see an empty <div id="root"> and little else, that's exactly what Googlebot's first pass and every AI crawler get.

Search Google for site:yourapp.com. Zero results (after the app has been live a week or two) confirms it: nothing has been indexed.

The five fixes, in the order that matters

Do these top to bottom. The first one is the difference between invisible and indexable; the rest compound on it.

1. Serve real HTML (pre-render or SSR)

The root fix is to send content in the first response. Put your marketing and content pages on static HTML or server-side rendering so the title, headings and copy are present before JavaScript runs. A logged-in app dashboard can stay client-rendered — it's the public, shareable pages that need to be crawlable.

2. Set a real title and meta description per page

Vite App is not a search result anyone clicks. Give every public page a specific <title> and <meta name="description">, and an Open Graph image so shared links don't unfurl blank.

html
<title>Split expenses with friends — Tabby</title>
<meta name="description" content="Track shared bills, settle up in a tap, no signup for guests.">
<meta property="og:image" content="https://yourapp.com/og.png">

3. Generate a sitemap.xml

A sitemap lists your indexable URLs so Google doesn't have to discover them by luck. Generate one, list your public routes, and reference it from robots.txt. Without it, a JavaScript app with few inbound links can stay undiscovered indefinitely.

4. Set a canonical tag on every page

A canonical tag tells Google which URL is the real one when the same page is reachable at several addresses (with and without www, with tracking parameters, trailing slashes). Missing canonicals split your ranking signals across duplicates.

The rules are worth getting exactly right — see Canonical tags: the rules that actually matter.

5. Verify in Search Console and request indexing

Add the site to Google Search Console, submit the sitemap, and use URL Inspection to request indexing on your key pages. Search Console is also where you'll see whether Google rendered the page or gave up on the empty shell.

Symptom to cause to fix

What you seeThe causeThe fix
site:yourapp.com returns nothingEmpty HTML shell, nothing to indexPre-render / SSR (fix 1)
Ranks for your brand name onlyOnly the homepage got rendered and indexedSitemap + per-page HTML (fixes 1, 3)
Link previews are blankNo title, description or OG imagePer-page metadata (fix 2)
Duplicate URLs competingNo canonical tagCanonical per page (fix 4)

How long until it ranks

Once real HTML is served and the sitemap is submitted, indexing usually starts within days. Ranking for anything competitive takes longer and depends on links and content — but you can't rank at all while the page is blank, so serving crawlable HTML is the step that unblocks everything else.

Every fix above maps to a check Actuant runs against your deployed app. It loads the live URL in a real browser, reads the pre-JavaScript HTML, and returns each of these as pass or fail with the exact line to change.