unvibe
Checklist · October 4, 2026

SEO for Lovable, Bolt and v0 apps: 10 checks

AI builders ship an app that looks finished in minutes. What they usually do not ship is a page that search engines and AI crawlers can read. If your site was made with Lovable, Bolt.new, v0 or Replit, these ten checks catch the problems that matter, and one prompt to paste into your builder.

By the Unvibe team · 9 min read

Short answer: Apps from AI builders are often single-page apps that draw their content in the browser, so the HTML a crawler receives is nearly empty. The fix that matters most is to render every public page to HTML (pre-rendering or server-side rendering). After that: a unique title and description per page, one clear headline, real links, a sitemap, a correct robots.txt, canonical tags, link-preview tags and structured data. Check with view source, not “Inspect”. Unvibe runs the checks on your live site and gives each fix as a prompt for your coding agent.

Why AI-built apps have this problem

Many AI builders create a React single-page app by default. The server sends one nearly empty page with a script, and the browser builds the content. You see the finished page, and so does Google, which can run JavaScript. But many AI crawlers read the raw HTML and do not, so to them the page is close to blank. We explain the mechanism in Why ChatGPT can’t see your vibe-coded app.

Even for Google, a page that is only built in the browser is slower to understand than one that arrives complete. The checks below help both.

The 10 checks

1. See what a crawler receives

Open your homepage, view the page source (not “Inspect”, which shows the page after JavaScript has run) and search for your headline. If it is not there, the text is drawn by JavaScript. A quick command-line version prints the number of words in the HTML; a healthy homepage has well over a hundred:

curl -s https://yourdomain.com | sed 's/<[^>]*>/ /g' | wc -w

2. Put the text in the HTML

This is the big one. Options, from least to most work: ask your builder to pre-render public pages to static HTML at build time; add a pre-rendering plugin for your framework; or move the public pages to a framework that renders on the server, such as Next.js or Astro. Some builders have a pre-rendering or SEO setting, so check yours before anything else.

3. A unique title and description on every page

A single-page app often shows the same title on every route. Each public page needs its own title (under about 60 characters) and a description of 50 to 160 characters that says what the page is. Watch for template leftovers like “Vite + React App” or “Lovable Generated Project”: they tell search engines and AI nothing.

4. One clear headline per page

One <h1> that says what the page is about, in the HTML. Use <h2> and <h3> for sections.

5. Real links and buttons

Navigation and calls to action should be <a href="…"> links. A <div onclick> works for people and does nothing for a crawler or an AI agent. See Can an AI agent use your website?

6. A sitemap

A sitemap.xml listing every public page, with the address in your robots.txt. In Google Search Console, add it under Sitemaps.

7. A correct robots.txt

Make sure it does not block the pages you want found, and that AI search crawlers are allowed. A leftover “Disallow: /” from a staging setup is a classic. See letting AI search in.

8. Canonical tags that point to themselves

Each page’s <link rel="canonical"> should be its own full address. A canonical copied from a template, pointing to another page or domain, tells crawlers your page is a duplicate.

9. Link-preview tags

Open Graph tags (og:title, og:description, og:image) control how a link looks when shared. They are cheap and make every shared link look intentional.

10. Structured data

A JSON-LD block that says what the business is, with the same name and price as the page. If it contains an error such as a trailing comma, the whole block is ignored, so paste it into a JSON validator. For a software product, SoftwareApplication is the usual type.

A prompt to paste into your builder

Adjust it to your app, and read what it changes before accepting:

Make every public page of this app readable by search engines and AI crawlers that do not run JavaScript:
1. Pre-render or server-render all public pages so the headline, text and prices are in the HTML.
2. Give each page its own <title> (under 60 characters) and meta description (50-160 characters). Remove template titles.
3. Use one <h1> per page, and real <a href> links for navigation and calls to action.
4. Add sitemap.xml and robots.txt (allow all crawlers, list the sitemap).
5. Add a canonical tag on each page pointing to its own full URL.
6. Add Open Graph tags and a JSON-LD block that matches the visible page.
Keep the current design. Do not invent facts: use only what is already on the site.

How to know it worked

After you deploy, repeat check 1. The headline should now be in the source. Then request indexing of your key pages in Google Search Console. Indexing takes time on a new site, and nothing here can make Google or an assistant choose you, but each check removes a reason they could not.

Where Unvibe fits

You can run all ten checks by hand. Unvibe runs them on your live site, and the fixes arrive as prompts for your builder.

Unvibe

Built for apps made with AI tools

  • Empty pages: counts the words in the HTML and flags pages that are empty without JavaScript, naming the likely framework and the matching fix.
  • Template leftovers: flags default titles and descriptions left by site builders.
  • Sitemap, canonical and structured data: checks the sitemap exists and lists key pages, canonical tags point to themselves, and JSON-LD parses and describes the business.
  • Verified fixes: each finding says how it will check the change, and the next checkup confirms it on the live site. Coding agents can connect over MCP to fetch fixes and re-run checkups.

Check my AI-built app

See how the checks work in the checkup docs and the step-by-step fix guides.

Questions

Does Google index apps built with Lovable or Bolt?

Google can run JavaScript, so it can often read client-rendered pages, though it may take longer. The bigger gap is with AI crawlers that read raw HTML and see little. Pre-rendering helps both.

Do I need to rebuild my app in Next.js?

Not necessarily. Pre-rendering your public pages to static HTML at build time can be enough for a marketing site. A server-rendering framework is worth it when many pages or fast-changing content need it.

Is “Inspect” enough to check my page?

No. Inspect shows the page after your browser ran its JavaScript. View source (or a command-line fetch) shows what a crawler that does not run JavaScript receives.

See what a crawler sees on your app.

Free to start. Fixes ready for your coding agent.

Check my app