Lovable app not showing on Google? Why it isn't indexed, and the four fixes
A question I get a lot: "My Lovable app has been live for weeks. Why can't I find it on Google?" Search Console says Discovered - currently not indexed or Crawled - currently not indexed, and the few pages that do show u
A question I get a lot: "My Lovable app has been live for weeks. Why can't I find it on Google?" Search Console says Discovered - currently not indexed or Crawled - currently not indexed, and the few pages that do show up all carry the same title.
The app usually isn't broken. It's built in a way that makes Google work hard to understand it. Here is why that happens with Lovable and Bolt apps, and the fixes I apply, in order.
What you might be seeing
Discovered - currently not indexedCrawled - currently not indexed- Your Lovable app isn't indexed at all
- Every page in the results has the same title
Why it happens
- The content only appears after JavaScript runs. Apps built with Lovable or Bolt render their pages with JavaScript. Google queues pages for crawling and for rendering, and renders them with a headless Chromium once its resources allow. Not every bot runs JavaScript at all. So a client-rendered app is slow to be understood.
- Every route shares one title. The page shell has one title and one description, so each route looks like a duplicate until the app sets its own.
-
Links Google can't follow. Navigation done with click handlers or
#fragments instead of real<a href>links hides pages from the crawler. Google can only discover links that are<a>elements with anhref. - Soft 404s. Unknown addresses return the app with a 200 status, so error pages look like real pages.
- Nothing tells Google the pages exist. No sitemap, no robots.txt, and no Search Console property.
Find the cause first
- Run a quick check on your live address. Our free Launch Check reports titles, descriptions, canonical, sitemap, robots.txt and whether your content is in the HTML.
- Open the page source (View Source, not the inspector). If the body is just an empty root element, crawlers that don't run JavaScript see nothing.
- In Search Console, inspect one key URL and compare the crawled page with what you expect to see.
Fix 1: Give every route its own title and description
Set the title and meta description for each route when it renders, with a helmet-style component or a small effect. Google says JavaScript may set or change both the <title> and the meta description, so this works without leaving Lovable. Keep each title unique and descriptive.
Here's the small hook I use:
import { useEffect } from 'react'
export function usePageMeta(title: string, description: string) {
useEffect(() => {
document.title = title
let tag = document.querySelector('meta[name="description"]')
if (!tag) {
tag = document.createElement('meta')
tag.setAttribute('name', 'description')
document.head.appendChild(tag)
}
tag.setAttribute('content', description)
}, [title, description])
}
Call it at the top of each page component, for example usePageMeta('Pricing | Acme', 'Plans and prices for Acme.').
Fix 2: Make your pages discoverable
- Use real
<a href="/pricing">links. Your router'sLinkcomponent renders them. Route with the History API (normal paths like/pricing), never#fragments. - Publish a
sitemap.xmlthat lists every public route, and reference it inrobots.txt. - Add the site to Google Search Console and submit the sitemap.
Fix 3: Pre-render the pages that must rank
This is the fix that matters most when search traffic matters to the business.
- For landing, pricing and article pages, serve HTML that already contains the content: pre-render them at build time, or move those pages to a server-rendered framework.
- Keep the app itself client-rendered behind sign-in, where search doesn't matter.
Google itself says server-side or pre-rendering is still a great idea, because it makes the site faster for users and crawlers, and not all bots can run JavaScript.
Fix 4: Stop soft 404s
For unknown routes, add a robots noindex tag from JavaScript, or redirect to an address the server answers with a real 404. That way your "page not found" screen stops looking like one more page to index.
Check the fix worked
- Each public route shows its own title in the browser tab, and in the page source once it's pre-rendered.
- The Launch Check reports titles, descriptions, sitemap and robots.txt as passing.
- Search Console's URL inspection shows the rendered content for a key page.
Stop it coming back
- Decide early which pages are for search (marketing, articles) and which are app screens, and build the first kind to be pre-rendered.
- Check titles and the sitemap after every publish that adds a page.
Quick answers
Can Google index a JavaScript app at all? Yes. Google renders JavaScript with a headless Chromium, but in a queue, and other crawlers may not render it. That's why Google still calls server-side or pre-rendering a great idea.
Do I have to leave Lovable for SEO? Not necessarily. Unique metadata, real links and a sitemap help in place. For pages that must rank well, pre-rendering or a server-rendered framework is the reliable fix. The usual setup is a pre-rendered marketing site next to the app.
Source: Google Search Central: Understand the JavaScript SEO basics.
I keep the full checklist, with related fixes for 404s on refresh and Lovable deploys, on our fix page. Once you've made the changes, you can run the free Launch Check on your live address to confirm titles, sitemap and robots.txt pass.
I wrote this with AI assistance and reviewed it myself.
Originally published by Dev.to WebDev. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.