Vibe Code SEO10 min read

Is Lovable good for SEO?

Ashikur Rahman, SEO and AI search specialist for vibe coded businesses, in a navy blazer
Written by Ashikur Rahman
SEO since 2017 · LL.B, LL.M · AI search specialist
Laptop showing the Lovable builder prompt beside a Google results page with a rising green arrow, magnifying glass, and bar chart

Yes, with two conditions. Lovable projects created on or after 13 May 2026 run on TanStack Start and render every page on the server, so Google and the AI crawlers receive real HTML instead of an empty container. Projects created before that date still ship the old React and Vite build, and for those Lovable serves prerendered copies to crawlers it recognizes, which is a patch rather than a fix. That is condition one: know which stack you are on. Condition two is that rendering was never the whole problem. I build my own sites in Lovable and I have audited a lot of other people's, and the four things further down are wrong on almost every one of them regardless of the rendering mode. This article covers how to tell which build you have, what the old build actually sent to Google, the four gaps, the test most people never run, and the prompt I paste at the start of every project so none of it happens again.

How to tell which Lovable you are on

You need three minutes and no tools. Open any page of your published site that is not the homepage. Right click, choose View Page Source. Not Inspect, which shows you the page after JavaScript has run. Source, which shows you the file the server sent. Now read it.

  • If you can see your headline, your paragraphs, and your links as plain text in that file, you are on the server-rendered stack. Google reads exactly what you are reading.
  • If you see a title tag, a few script tags, and a body that contains a single empty div, you are on the older client-side build. The words on your screen arrived through JavaScript after the file loaded, and a crawler that does not run the JavaScript sees nothing.
  • A third pattern: the source contains your content, but the file is served only to crawlers. That is prerendering, which Lovable applies to older projects for user agents it recognizes. It works for Googlebot on a good day. It does not cover every AI crawler, and it goes stale between rebuilds.

If you prefer the command line, fetch a sub-page as Googlebot and count the bytes. A rendered page is tens of kilobytes. An empty shell is a few.

curl -s -A "Googlebot" https://yourdomain.com/services | wc -c
curl -s https://yourdomain.com/services | grep -c "<h1"

If the second command prints 0, there is no H1 in the HTML and Google's first pass sees a page with no heading. The most reliable check of all is inside Google Search Console: paste the URL into URL Inspection, click View Crawled Page, and read the HTML tab. That is the copy Google actually stored. Whatever is not in there does not exist as far as ranking is concerned.

What the old build actually sent to Google

People describe the problem as Google cannot see my JavaScript. That is not the damaging part. The damaging part is what the shell said. Before server rendering, the host returned one static index.html for every route on the site. That one file carried the homepage title, the homepage description, a canonical tag pointing at the homepage, and a body with zero words. So your services page did not merely look empty to Google. It carried a written instruction saying it was a copy of the homepage. Google obeyed, filed every sub-page as an alternate of the homepage, and indexed the homepage alone.

I have audited a five-page Lovable site where that was the entire story. Every route served the homepage canonical, Search Console showed one indexed page, and the owner had spent months adding content that Google had been told not to keep. You can date the problem on any site with the Wayback Machine: fetch an old capture of a sub-page with the id_ modifier in the URL, which returns the original unrewritten file, and read the canonical. A raw shell is a few kilobytes; a prerendered or server-rendered page is 25 to 110 kilobytes. The byte size alone tells you when the site changed.

If you are on the older build, upgrade before anything else

Lovable's documentation describes upgrading an existing project to TanStack Start. Do it before you spend money on content, links, or an SEO tool, because every other fix assumes Google can read the page in the first place. After the upgrade, three things change and one thing does not.

  1. Every route gets its own head() function, so titles, descriptions, canonicals, and Open Graph tags are set per page instead of once in index.html. The builder will not fill them in on its own. You have to ask.
  2. The server renders the page on request. View Page Source on any route now shows your content, and the byte count test above passes.
  3. Unknown paths can return a real 404 status, because there is now a server to return one. On the old build every path returned 200 with the homepage.
  4. What does not change: your sitemap, your robots.txt, your internal links, and everything Google already recorded about the old URLs. Those you fix by hand, and then you force the recrawl.

The four things Lovable does not do for you

Google's John Mueller said in April 2026 that AI builders will not set up canonicals, sitemaps, or robots.txt unless you tell them to. I would add per-page titles to that list. These are the four checks I run first on any Lovable site. Each takes under a minute to check and under an hour to fix.

1. Per-page titles and descriptions

The old build sets one title in index.html and every route inherits it, so Google sees ten pages with the same name and picks one to show. On the new stack each route has a head() block, but the builder writes a generic title unless told otherwise. Open Search Console, go to Performance, switch to the Pages tab, and read the titles Google shows for your top pages. If they are all the site name, that is the job. Each page gets one title written for the query it should win, under about 60 characters, and one description that answers that query in a sentence.

2. One canonical per page, pointing at itself

Read the canonical tag in the source of three different pages. Each one must be an absolute URL that matches the page you are on, with the same hostname and the same trailing slash convention as every other page on the site. This is what a correct one looks like on a services page:

<link rel="canonical" href="https://yourdomain.com/services" />

If all three pages show the same href, or a relative path, or the lovable.app hostname, the site has the bug described above and it needs the recovery steps, not only the tag.

3. A real sitemap.xml with lastmod dates

Lovable does not generate one by default. Put a static file at public/sitemap.xml, list every indexable URL exactly as the canonical spells it, and include a lastmod date, because that is the one field Google reads to decide whether a page deserves a recrawl. Google ignores priority and changefreq, so leave them out. Submit the file in Search Console under Sitemaps and again in Bing Webmaster Tools.

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://yourdomain.com/</loc>
    <lastmod>2026-09-12</lastmod>
  </url>
  <url>
    <loc>https://yourdomain.com/services</loc>
    <lastmod>2026-09-12</lastmod>
  </url>
</urlset>

4. A robots.txt that lets the right crawlers in

Two failures here. The first blocks a folder your JavaScript or CSS lives in, which means Google can fetch the HTML but cannot render it. The second blocks the AI crawlers, sometimes on purpose because a template shipped that way. If you want to appear in ChatGPT, Perplexity, and Copilot answers, the file needs to allow Googlebot, Bingbot, GPTBot, OAI-SearchBot, and PerplexityBot, and it needs to point at the sitemap.

User-agent: *
Allow: /

User-agent: GPTBot
Allow: /

User-agent: OAI-SearchBot
Allow: /

User-agent: PerplexityBot
Allow: /

Sitemap: https://yourdomain.com/sitemap.xml

The one that hides: soft 404s

Every unknown URL on many Lovable sites returns HTTP 200 with a copy of the homepage. The Not Found message only appears after JavaScript runs. Google records these as soft 404s and, worse, treats the unlimited supply of them as duplicates of your homepage. Every typo anyone ever linked becomes another copy. Test it by loading your domain followed by a made-up path and checking the status code, not the screen.

curl -s -o /dev/null -w "%{http_code}\n" https://yourdomain.com/this-page-does-not-exist

The answer must be 404. If it is 200, ask the builder for a catch-all route that returns a 404 status, or configure it on the host. On the server-rendered stack this is a few lines. On the old build it is a hosting configuration change.

What Lovable's own SEO review catches, and what it misses

Lovable added an SEO and AI search review inside the editor in 2026. It checks metadata, sitemap and robots configuration, structured data, and mobile usability, and it is worth running once after every major change. It cannot tell you whether Google has actually indexed your pages, whether your canonicals still point at the right place after publishing to your own domain, whether unknown paths return a real 404, or whether your content answers the question people type. For those you need Google Search Console, which is free, and a person who reads it. The review is a linter. Search Console is the exam result.

The prompt I paste at the start of every Lovable project

The cheapest fix is to put the rules in the first message, before the builder has written a single route. This is the block I use, adjusted for the domain. Paste it as the first prompt or the first message after the project exists.

SEO requirements for this project, apply to every page and every future page:
1. Server-side rendering on. Every route must return its full HTML without JavaScript.
2. Each route sets its own <title> (under 60 characters) and <meta name="description"> (under 155 characters) in head(). No two pages share a title.
3. Each route sets one absolute canonical: https://yourdomain.com + its own path, no trailing slash. Never point a canonical at the homepage from another page.
4. Unknown paths return HTTP 404 with a real not-found page, not 200.
5. Navigation and footer use <a href> links, never buttons with click handlers, so crawlers can follow them.
6. Generate public/sitemap.xml listing every indexable route with <lastmod>, and public/robots.txt allowing all crawlers including GPTBot, OAI-SearchBot and PerplexityBot, with a Sitemap: line.
7. One H1 per page containing the page's main query. Headings in order, no skipped levels.
8. Every <img> has descriptive alt text, width and height attributes, and loading="lazy" below the fold.
9. Organization or LocalBusiness JSON-LD on the homepage, BlogPosting on posts, served in the HTML, not injected client-side.
10. Redirect www to the bare domain (or the reverse) and http to https with 301s.

It does not make the builder write good content. It does remove the ten mechanical reasons a Lovable site fails to index, and they are the reasons I see most.

Not sure which stack your site is on?

Send me the URL and I will check the rendering, the canonicals, the sitemap, the robots file, and the 404 behavior, and tell you what Google is actually seeing. Free, and you get the list either way.

What a Lovable site that ranks looks like

The pattern is boring. Unique titles. One canonical per page pointing at itself. A sitemap Google has read without errors. Real anchor links between pages instead of buttons. A 404 that is a 404. Pages that say something specific in the first two lines under each heading. And a person who opens Search Console once a week and reads the Pages report. A tech site I built with an AI-assisted workflow, launched on that checklist, indexed in its first week and went from zero to 481 clicks and 211,000 impressions in three months, with the curve bending upward from week eight.

Google Search Console chart for a new technology website showing growth from zero to 481 clicks and 211K impressions in three months
Search Console, first three months of a new domain built with an AI-assisted workflow. Indexing took a week; ranking took eight.

The pattern I see on Lovable sites that do not rank is a beautiful design on top of the four defaults above, untouched, with the owner adding pages that Google has been told not to keep.

Questions people also ask

Is Lovable SEO friendly out of the box?

For projects created after 13 May 2026, the rendering is. Titles, canonicals, sitemap, robots, and 404 handling are not set up until you ask for them. For projects created before that date, no, and the upgrade to TanStack Start is the first task.

Does Lovable generate a sitemap?

Not by default. You either ask the builder to generate public/sitemap.xml as a static file, or you write it by hand. Either way, check that every URL in it matches your canonical spelling exactly, and submit it in both Google Search Console and Bing Webmaster Tools.

Can Google index a Lovable site?

Yes. Google indexes any site that returns readable HTML, one self-pointing canonical per page, and a real 404 for unknown paths. Lovable sites that fail to index fail on one of those three, not because of the tool's name.

Do I need to move off Lovable to rank?

No. I run my own sites on it. Moving to WordPress or Next with the same missing titles and the same homepage canonical produces the same result. Fix the four gaps and force the recrawl first; judge the platform after that.

Does Lovable support server-side rendering?

Yes, on projects created on or after 13 May 2026, which run on TanStack Start. Older projects can be upgraded. Until they are, Lovable serves prerendered copies to crawlers it recognizes, which covers Googlebot most of the time and the AI crawlers some of the time.

So, is it good for SEO?

Lovable is as good for SEO as the person prompting it. The May 2026 change removed the structural excuse for new projects. What is left is the same work every website needs, with the difference that an AI builder will not do any of it unless the instruction is in your prompt. If your site is already live and invisible, start with why Google is not indexing your pages. If you would rather have it done, the Vibe Code SEO service begins with exactly the checks in this article.

LovableVibe codingTechnical SEOIndexing

Work with Ashikur Rahman

Ready to get found, chosen, and booked?

Book a free discovery call. I will look at your current visibility, tell you exactly what is holding you back, and show you what I would do about it. No pressure, no obligation.