In short
- Lovable projects created from May 13, 2026 use TanStack Start and render on the server. Older React + Vite projects render in the browser, and Lovable serves prerendered copies to verified crawlers only.
- On an older project, curl and many SEO tools see an empty shell even when Google doesn't. Use Search Console's live URL test to see what Googlebot gets.
- Fix in this order: custom domain as primary with absolute canonicals, unique metadata per page, a sitemap listed in robots.txt, then Search Console.
- Lovable redirects other domains to your primary domain with 302s, not 301s, so absolute canonicals on your custom domain matter.
- Use the built-in Migrate to TanStack Start action if every client needs real HTML; move off Lovable only if you need things like 301 path redirects.
Yes, a Lovable site can show up on Google, and since May 2026 the platform does much of the hard part for you. Projects created from May 13, 2026 use TanStack Start and render on the server. Older projects are React + Vite apps that render in the browser, and Lovable serves a prerendered copy to verified search engine and AI crawlers. What it doesn't do for you is the per-page work: unique titles and descriptions, a sitemap, your custom domain as the one canonical host, and links between pages. Fix those first, in that order, then decide whether to migrate an older project to TanStack Start. This guide goes deeper than our general SEO for AI-built websites guide, for Lovable specifically.
How your Lovable site renders
Which stack you have decides what crawlers get. Lovable's docs describe two cases:
| Older projects | Newer projects | |
|---|---|---|
| Created | Before May 13, 2026 (June 22 on Enterprise) | From May 13, 2026 (June 22 on Enterprise) |
| Stack | React + Vite, renders in the browser | TanStack Start, server-side rendering |
| Verified crawlers (Google, Bing, major AI crawlers, link-preview bots) | A prerendered copy, generated on request | Server-rendered HTML |
| Everyone else (curl, many SEO tools, unverified bots) | The single-page app shell, unless they ask for Markdown | Server-rendered HTML |
| Self-hosted elsewhere | Plain SPA: prerendering is part of Lovable hosting | Needs a host that runs a Node server |
Two consequences. On an older project, a plain curl showing an empty page does not prove Google sees an empty page: Lovable's hosting docs warn that third-party scanners "may report your pages as empty". And prerendering only captures what has loaded when the copy is made, so content that arrives late (a slow API call, a carousel that fetches on scroll) can be missing for crawlers too.
The five-minute diagnosis
- Find out which stack you have
Check the project's creation date, or open the code: TanStack Start projects have a
src/routes/folder and@tanstack/react-startinpackage.json; older ones havevite.config.tswithreact()and anindex.htmlwith<div id="root">. - Curl the live page
Terminal URL=https://your-domain.com/pricing curl -s $URL | grep -o "<title>[^<]*" curl -s $URL | grep -o "<h1[^>]*>[^<]*" curl -s $URL | grep -o '<link rel="canonical"[^>]*>'Terminal $ curl -s https://old-app.example.com/pricing | grep -o "<h1[^>]*>[^<]*" (no output: the H1 is added by JavaScript) $ curl -s https://new-app.example.com/pricing | grep -o "<title>[^<]*" <title>Pricing | Acme $ curl -s https://new-app.example.com/pricing | grep -o "<h1[^>]*>[^<]*" <h1>Simple pricing for small teams
Illustrative output. Top: an older React + Vite Lovable project seen by a normal client (Google gets a prerendered copy instead). Bottom: a TanStack Start project with per-page metadata. On a TanStack Start project, missing H1 or text in this output is a real problem. On an older project, go to the next step before you worry.
- See what Google gets
In Google Search Console, paste the URL into URL Inspection, run Test live URL, then View tested page. That HTML is what Googlebot received. If your copy is there, rendering is fine for Google; work on metadata and discovery.
- Compare titles and check the files
Terminal for p in / /pricing /about /blog; do curl -s "https://your-domain.com$p" | grep -o "<title>[^<]*"; done curl -s https://your-domain.com/robots.txt curl -sI https://your-domain.com/sitemap.xml | head -1 curl -s -o /dev/null -w "%{http_code}\n" https://your-domain.com/no-such-pageFour identical titles means metadata is generic, which Lovable's docs say is the starting point. A sitemap that isn't a 200 XML file needs to be added. Lovable doesn't document what status unknown routes return, so look at the last line: a
200is a soft 404 risk. The free SEO checker, robots.txt tester and sitemap validator do the same checks without a terminal.
Fixes, in order of impact
- 1One hostCustom domain set as primary; everything else redirects to it
- 2Per-page metadataUnique title, description, canonical and Open Graph on every route
- 3SitemapA sitemap.xml with every public URL, listed in robots.txt
- 4Search ConsoleVerify, submit the sitemap, read the indexing report
- 5Links and contentEvery page linked from another, real text on each
1. Make your custom domain the only host
Custom domains need a paid Lovable plan. Once connected, set it as primary in the domain settings. Lovable then redirects your other connected domains, including the lovable.app address and www (on by default), to it. Those redirects are 302s: Lovable hosting doesn't support 301 redirects between project domains, so primary domains stay reversible. Google says its indexing pipeline doesn't use a temporary redirect as a signal for which URL is canonical, so other signals have to carry that: an absolute canonical on every page pointing at your custom domain, a sitemap on that domain, and internal links that use it.
curl -sI https://your-app.lovable.app/pricing | grep -iE "^(HTTP|location)" # want 302 to your domain
curl -sI https://www.your-domain.com/ | grep -iE "^(HTTP|location)"The redirect checker shows the full chain. Note that branded workspace URLs (app-name.workspace.lovable.app), unpublished projects and projects with restricted access never appear in search, so don't test SEO on those.
2. Give every page its own metadata
Run the built-in review first: in the project's SEO & AI tab, Your SEO & AI search review checks sitemap, robots.txt, titles, canonicals, structured data, alt text and noindex, and offers Try to fix. It is free on all plans. Then prompt for anything it leaves:
For every public page, set a unique <title> (under 60 characters, main topic first),
a meta description of 140-160 characters, an absolute canonical URL on https://your-domain.com,
and og:title, og:description and a 1200x630 og:image. Use the page's real content; don't invent
claims. List the values you set per route so I can review them.Check the result with the SERP preview for length and the curl loop above for uniqueness.
3. Add a sitemap and point robots.txt at it
Lovable creates a robots.txt with each project but "not always a sitemap". Ask for one that lists only public, indexable pages, and make sure robots.txt names it:
Add a sitemap.xml at https://your-domain.com/sitemap.xml that lists every public page
(no login, admin or thank-you pages), using absolute URLs on my custom domain. Add
"Sitemap: https://your-domain.com/sitemap.xml" to robots.txt. Keep the sitemap in sync
when pages are added.4. Connect Search Console
Lovable has a Google Search Console connection that shows clicks, impressions and queries and can submit sitemaps. It verifies with the meta-tag method only. Add a property for your custom domain (not the lovable.app URL), submit the sitemap, and come back to the Page indexing report after a week or two. A Bing Webmaster Tools connector exists too.
5. Fix the 404 status and late content
If the not-found curl returned 200, ask Lovable to render a not-found page with <meta name="robots" content="noindex"> for unknown routes (Google's advice for SPAs), or on TanStack Start to return a real 404 status from the not-found route. For content that loads late, ask Lovable to load the main copy with the page instead of after a delay or on scroll.
Should you migrate to TanStack Start?
If your project is older and it matters that every client, not only verified crawlers, gets real HTML, yes. Lovable has a built-in Migrate to TanStack Start action on all plans: type / in chat and pick it, or use Project settings, General, Project actions, Migrate. Lovable says most upgrades cost 10 to 35 credits, carries over titles, descriptions, social tags and analytics, and leaves the live site alone until you republish. You can revert from version history.
What you can and can't control
| Item | On Lovable | Notes |
|---|---|---|
| Titles, descriptions, Open Graph | Yes, by prompt or in code | Starts generic; social and search preview cards in the editor |
| Canonical | Yes, by prompt or in code | Checked by the SEO & AI review |
| robots.txt | Yes | Created with every project |
| sitemap.xml | Yes, by prompt | Not always created for you |
| Domain redirects | 302 only | No 301s between project domains |
| Custom path redirects | Not documented | Test with curl before relying on them |
| 404 status for unknown URLs | Not documented | Check with curl; add noindex if it's 200 |
| llms.txt | Optional | Not required; served if you add one |
When to move off Lovable, and how
Most sites never need to. Consider it when you need permanent 301 redirects (for example, a site migration with many renamed URLs), server-level control over status codes and headers, or a stack Lovable doesn't produce. Lovable is still great for building; you can keep using it and host elsewhere.
- Sync the code to Git
Git sync works with GitHub, GitLab and Bitbucket on all plans and is two-way, but it creates a new repository (you can't connect an existing one). ZIP download needs a paid plan.
- Pick a host that fits the stack
A TanStack Start project needs a host that runs a server. Its build uses Nitro, which detects Vercel, Netlify and Cloudflare Pages; elsewhere use the
node-serverpreset and runnode .output/server/index.mjs. An older React + Vite project is a static SPA: it needs anindex.htmlfallback rewrite, and it loses Lovable's prerendering, so prerender it yourself (see React SEO for Vite apps) or migrate it first. - Brief your coding agent in the repo
Prompt for a coding agent This repo was exported from Lovable and will be hosted on <host> at https://your-domain.com. 1. Confirm every public route returns its H1, title, description and an absolute canonical on https://your-domain.com in the server HTML (curl a production build). 2. Make unknown URLs return a 404 status and generate sitemap.xml from the real routes. 3. Add 301 redirects from any old URLs I list below. Done when the curl checks pass on the preview deploy. Old URLs: - Switch the domain last
Point DNS at the new host only after the preview passes, then resubmit the sitemap in Search Console. Server secrets aren't in the repo, so set them on the new host first.
Once the code is in a repo, npx serpkin can set up Claude Code, Codex or Cursor, register the site and run a first scan. It flags pages whose text isn't in the server HTML, bundles small metadata gaps into one "Fix the basics" mission, and npx serpkin check <preview-url> catches regressions on each preview before you switch DNS.
Questions
Is Lovable good for SEO?
It can be. New projects render on the server with TanStack Start, and older ones get prerendered copies for verified crawlers. You still need unique titles and descriptions, a sitemap, a primary custom domain and links between pages.
Why does my Lovable site look empty to SEO tools?
Older Lovable projects are React + Vite single-page apps. Lovable serves prerendered pages only to verified crawlers such as Google and Bing; other tools get the app shell. Check Google's view with URL Inspection's live test.
Does Lovable create a sitemap?
Not always. Lovable's docs say it creates robots.txt with every project but not always a sitemap. Ask Lovable to add sitemap.xml with your public pages and reference it in robots.txt.
How do I connect a custom domain to Lovable for SEO?
Connect it on a paid plan and set it as primary. Lovable then redirects the lovable.app address and other domains to it with 302 redirects. Add absolute canonicals on the custom domain and verify that domain in Search Console.
Can I move my Lovable project to Vercel or Netlify?
Yes. Sync it to GitHub, GitLab or Bitbucket. TanStack Start projects build with Nitro, which supports Vercel, Netlify and Cloudflare; older React + Vite projects deploy as a static SPA but lose Lovable's prerendering.
Sources
- Lovable docs: SEO and AI search (stacks, prerendering, review, branded URLs, llms.txt) (checked October 29, 2026)
- Lovable FAQ: tech stack (checked October 29, 2026)
- Lovable docs: Migrate to TanStack Start (checked October 29, 2026)
- Lovable docs: hosting (lovable.app, third-party scanners) (checked October 29, 2026)
- Lovable docs: custom domains (primary, 302 redirects, www) (checked October 29, 2026)
- Lovable docs: launch on a custom domain (checked October 29, 2026)
- Lovable docs: Google Search Console integration (checked October 29, 2026)
- Lovable docs: Git sync (checked October 29, 2026)
- Lovable docs: deployment, hosting and ownership (ZIP download) (checked October 29, 2026)
- Lovable docs: external deployment and hosting (checked October 29, 2026)
- Google: redirects and Google Search (temporary vs permanent) (checked October 29, 2026)
- Google: JavaScript SEO basics (SPA soft 404s) (checked October 29, 2026)
- Google: URL Inspection tool (checked October 29, 2026)