Lovable SEO after you move: what comes with your code and what doesn't
Since 13 May 2026, Lovable apps are readable to Google and AI search out of the box. But for older apps that is done by Lovable hosting, not by your code. Move one to Vercel or your own server and that part stays behind. Your pages go back to an almost empty shell for every crawler that does not run JavaScript. What you lose depends on one thing: is your app TanStack Start or React with Vite.
How Lovable makes your app readable today
| React and Vite (before 13 May 2026) | TanStack Start (since 13 May 2026) | |
|---|---|---|
| What visitors get | A mostly empty page that the browser builds with JavaScript | Finished HTML |
| What crawlers get on Lovable hosting | A rendered copy, but only for verified crawlers: search engines, AI search crawlers and social preview bots | The same finished HTML as everyone |
| Where it happens | In Lovable hosting | In your code (server-side rendering) |
Lovable switched pre-rendering on for all existing apps on 13 May 2026. Lovable calls its first numbers early results: apps using it got 2.9% more organic search traffic and 98.5% more traffic from AI tools like ChatGPT and Perplexity. That AI traffic is what an old Vite app gives up when it leaves Lovable hosting.
Not sure which one you have? Open package.json in your repository. If it lists @tanstack/react-start, it is a TanStack Start app.
What moves with your code and what stays
| Moves with the code? | Why | |
|---|---|---|
| Server-side rendering (TanStack Start) | Yes | It is part of the app. The new host must run its server part |
| Pre-rendering for crawlers (Vite) | No | It is part of Lovable hosting |
| Page titles, descriptions and social preview tags | Yes | They are in the code |
| robots.txt | Yes | Lovable creates one with every new project |
| Sitemap | Only if the project has one | Lovable does not always create one |
| Search Console verification | Yes | Lovable verifies with a tag it adds to the app's HTML |
| Markdown version of each page for AI assistants | Unknown | Lovable's docs don't say if this is in the code or in their hosting |
What a Vite app looks like on a new host
Vercel, Cloudflare Pages or your own Nginx serve the same files Lovable built: an almost empty HTML page plus JavaScript. Nobody renders it for crawlers anymore.
- Google still renders JavaScript, but later. Lovable quotes a median delay of about 10 seconds, with a long tail of hours.
- AI crawlers don't run JavaScript. Vercel tested this in December 2024: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, PerplexityBot and Meta's crawler fetch the page but don't run the scripts. Gemini uses Google's crawler, so it does render.
- Link previews on LinkedIn, Slack, WhatsApp and X read the tags from the HTML. If those tags are set by JavaScript per page, the preview shows the generic ones.
Visitors see the same app as before, so nothing looks broken. That is why you need to check what crawlers get (below) before you switch the domain.
Fix it before you move: upgrade to TanStack Start
The fix is in Lovable itself. Lovable converts an older Vite project to TanStack Start in place. After that the app renders on the server wherever you host it.
- Open the project in Lovable. In the chat type /, choose Migrate to TanStack Start and confirm. Or go to Project settings, General, Project actions and select Migrate.
- Wait. It usually takes several minutes. A large project can pause partway. Ask Lovable to continue.
- Open every page in the preview. Some code libraries only work in the browser and break server rendering. Tell Lovable which page fails and what you see.
- Pull the changes from GitHub before you continue in Claude Code, Codex or Cursor.
Your live site keeps the old version until you publish again. You can undo the whole upgrade from the project's version history.
The upgrade moves your page titles, descriptions, social preview tags and analytics scripts into the new template. Backend code that outside services call at a fixed address, like a payment webhook or a scheduled job, stays where it runs today.
Most upgrades cost 10 to 35 credits, depending on the size of the project, and it works on every plan. The free plan gives 5 build credits a day, so a bigger upgrade will not fit into one day there. Lovable warns you partway through if your balance is low.
After the upgrade, the new host has to run the server part of the app. Vercel, Netlify and Cloudflare Pages detect it. On your own server you build and start it like this:
NITRO_PRESET=node-server npm run build node .output/server/index.mjs
Don't add the index.html rewrite a Vite app needed. The server handles routing now. The Lovable to Vercel and Lovable to own VPS guides cover both setups step by step.
Do you need Next.js?
People search for "lovable to next.js conversion". For SEO, no. What fixes SEO is server-side rendering, and TanStack Start already does that. Lovable does the upgrade for you and the project keeps working in Lovable. Rewriting the app in Next.js is a much bigger job for the same result. Pick Next.js only if you want it for other reasons.
Don't add a pre-rendering service
You could put a pre-rendering service in front of a Vite app on the new host. That is the same trick Lovable uses. Google calls it dynamic rendering, says it "was a workaround and not a long-term solution" and recommends server-side rendering, static rendering or hydration instead.
Check what crawlers see before you switch the domain
Deploy to the address the new host gives you, for example your-app.vercel.app, and test there.
- In a terminal, fetch one of your real pages, for example curl -s https://your-app.vercel.app/pricing. If you see your page text in the output, crawlers that do not run JavaScript see it too. If you see almost nothing except script tags, they do not.
- In Google Search Console, add the temporary address as a property. Inspect a page, click Test live URL, then View tested page. You get the HTML Google rendered and a screenshot.
- If you do not want the temporary address in Google, add a noindex rule there. Remove it before the move.
Move the domain without losing rankings
If the app already runs on your own domain and the URLs stay the same, Google sees a hosting change, not a site move. Google lists these steps:
- At least a week before, lower the TTL of the domain's DNS records to a few hours.
- Keep your Search Console verification. Check that the verification tag is still in the HTML on the new host.
- Remove any noindex rule or robots.txt block you added for testing.
- Change the DNS records to the new host. Move a Lovable custom domain to a new host has the records for each host.
- Watch Search Console. Google says a short drop in crawl rate right after the move is normal. It goes up again over the next few days.
- When the old host gets no more traffic, unpublish the project in Lovable: Project settings, Unpublish project. Or click Publish, open the menu in the top-right corner of the dialog and select Unpublish.
Until you unpublish, your app is online twice: on your domain and on its lovable.app address. Check that the canonical tags and the URLs in your sitemap use your domain, not the lovable.app address.
If the app only lives on a lovable.app address
Then the move changes the URL, and for Google that is a real site move. Normally you would redirect every old URL to the new one. We found no option in the Lovable docs to redirect a lovable.app address to another domain. Without redirects the new domain starts without the rankings of the old address.
If the app is on a branded workspace URL (Business and Enterprise plans), there is nothing to lose. Lovable says those never appear in search.
Sources
- Lovable docs: Optimize your app for SEO and AI search
- Lovable docs: How Lovable hosts your app
- Lovable docs: Upgrade a project to TanStack Start
- Lovable blog: Introducing Discoverability
- Lovable blog: Building apps using TanStack Start
- Vercel blog: The rise of the AI crawler
- Google Search Central: Dynamic rendering as a workaround
- Google Search Central: Changing your hosting
- Search Console Help: URL Inspection tool