TL;DR
Lovable ships fast, but the default output is a client-rendered SPA that Googlebot can't index reliably. This is the 18-point launch checklist that takes a Lovable site from "1 page indexed" to "every page indexed" — covering meta, schema, sitemap, robots, prerendering, and Core Web Vitals.
Lovable is a category-defining tool for shipping React apps fast. The default build is a Vite SPA that loads index.html and hydrates client-side — great for app UX, bad for crawlers that don't execute heavy JS reliably (most of them, including Bing, LinkedIn, Slack, and Googlebot under load).
This checklist is what you run after shipping a Lovable site, before announcing it. It assumes you want organic traffic, not just a working app.
Block 1 — Per-route meta (5 items)
- react-helmet-async installed and wrapped at root. Without it, every route shares the same
<title>fromindex.html. Confirm<HelmetProvider>wraps your app inmain.tsx. - Per-route title and description. Each page component should set its own
<Helmet>. Titles under 60 chars with the primary keyword, descriptions under 160 chars with a value hook. - Canonical per route. Each route emits its own
<link rel="canonical">. Delete any sitewide canonical inindex.html— duplicates break SEO. - OG and Twitter tags per route. Social previews need page-specific titles and images. Generic sitewide OG defeats the purpose.
- JSON-LD schema per route. Article, Product, FAQPage, or BreadcrumbList depending on page type. Inject via
<script type="application/ld+json">inside<Helmet>.
Block 2 — Crawlability (4 items)
- robots.txt in
public/. Default Lovable doesn't ship one. AddUser-agent: */Allow: //Sitemap: https://yoursite.com/sitemap.xml. - sitemap.xml generated at build time. Use a
prebuildscript that walks your route definitions and writespublic/sitemap.xml. Manual sitemaps drift the moment you add a page. - No
noindexinindex.html. Lovable's default is fine; check anyway. A stray<meta name="robots" content="noindex">blocks the entire site. - 404 page returns the right signal. SPAs serve 200 on every route by default. Either ship a server-level 404 rule or accept that broken URLs return 200 (and use canonical + soft 404 cleanup in GSC).
Block 3 — The indexing problem (3 items)
- Test with Google's Mobile-Friendly Test. Paste any URL and inspect the rendered HTML. If it shows an empty
<div id="root">, your content isn't being seen by crawlers reliably. - Pre-render or SSR. Options: (a) LovableHTML — drop-in prerender service made for Lovable; (b) Cloudflare Workers with HTMLRewriter; (c) self-hosted Puppeteer prerender. Without one of these, the SPA is invisible.
- Confirm indexing in GSC after launch. Submit 5–10 representative URLs via URL Inspection. If they go to "Crawled — currently not indexed," your render still isn't passing. See no-code site not indexed in Google for the diagnostic flow.
Block 4 — Core Web Vitals (3 items)
- Image optimization. Use WebP, set
widthandheightattributes to prevent CLS, lazy-load below-the-fold images withloading="lazy". - Code splitting. Lovable uses Vite, which splits by route by default. Audit your bundle with
vite-bundle-visualizer— anything above 200 KB gzipped per route needs a closer look. - Font loading. Self-host critical fonts or use
font-display: swap. Google Fonts CDN is slow on first paint.
Block 5 — Content depth (3 items)
- Every indexable page must have 600+ words of unique content. Thin Lovable pages get classified as "Discovered — not indexed" forever.
- Internal linking. Each new page needs at least 2 inbound links from other pages on your site. Orphan pages don't get crawled.
- Update
lastmodin sitemap when content changes. Oldlastmoddates tell Google nothing changed; updates trigger recrawl.
Post-launch validation
One week after launch: check Google Search Console → Coverage. Anything in "Excluded" needs investigation. Anything in "Discovered — not indexed" past 30 days is almost always an indexing problem solved by adding prerendering. The full diagnostic flow is in no-code site not indexed in Google.
For the underlying explanation of why Lovable sites need prerendering, see LovableHTML: make your Lovable site indexable in Google.