---
title: "The complete AI readiness setup for Lovable in 2026"
slug: ai-readiness-setup-lovable
published: 2026-09-01T08:18:08.713433+00:00
updated: 2026-09-01T08:18:08.713433+00:00
author: "Asif Rahman"
author_url: https://masifrahman.com
category: "AI Readiness"
tags: platform:lovable, check:D1, check:D2, check:B2, check:C1, check:C2, check:C3, check:E3, check:P1, check:P2, Lovable, TanStack Start, AI readiness, server-side rendering, llms.txt
description: "Lovable ships two templates and only one of them renders for every AI crawler. We measured 15 published apps, then fixed robots.txt, llms.txt and rendering."
url: https://aiscan.site/blog/ai-readiness-setup-lovable
---

Two Lovable apps can look identical in a browser and differ by a factor of fifty in what an AI crawler actually receives. On 1 September 2026 we fetched fifteen published Lovable apps twice each, once with a desktop browser user agent and once with a GPTBot user agent, and stripped scripts before counting words. The six apps on Lovable's TanStack Start template returned 246 to 1,284 words of body copy. The nine on the older React + Vite template returned 9 to 210, with seven of the nine under fifty words. Every app returned the same word count to both user agents.

That is the whole Lovable story in one measurement. Your stack decides whether your content exists for retrieval crawlers, and the fix is one confirmation dialog.

## Quick summary

| If your project is on... | What crawlers get | What to do | Time |
|---|---|---|---|
| TanStack Start (new default since 13 May 2026) | Fully rendered HTML on every request | Add the discovery files (D1, D2, C2) | 20 minutes |
| React + Vite (older projects) | Pre-rendered HTML, but only for crawlers Lovable verifies | Migrate to TanStack Start, then add the files | 10 to 35 credits, plus 20 minutes |
| Either, published only to a preview URL | `x-robots-tag: noindex, nofollow` | Connect a custom domain before measuring anything | 1 hour including DNS |

**Check first, then decide:** run `npx aiscan-cli yoursite.com`, or paste the URL at [AIScan](https://aiscan.site/). It grades C3 and E3 (server-rendered HTML), D1 and D2 (robots.txt and sitemap), B2 (AI bot rules), C1 (Markdown negotiation), C2 (llms.txt) and P1 and P2 (capability files) in one pass, free and without an account.

## Why a Lovable app can be invisible while looking perfect

Lovable ships two templates, and they answer a crawler in two different ways.

An older React + Vite project sends the browser a near-empty page and lets JavaScript build the content. Lovable's documentation is direct about what happens next. In its own words, on the [SEO and AI search page](https://docs.lovable.dev/features/seo-aeo), older projects use "on-request pre-rendering on deployed public URLs, served only to verified search and AI crawlers (Google, Bing, social-preview bots, and AI engines like ChatGPT, Perplexity, Claude, Gemini)." The same page finishes the thought: "Third-party SEO scanners and other unverified agents see the regular single-page app."

TanStack Start does not negotiate. Lovable's [upgrade guide](https://docs.lovable.dev/features/upgrade-to-tanstack-start) says it "renders each page into finished HTML on the server before sending it. Everyone receives the same complete page, every time." That page also dates the switch: TanStack Start "became the default for new projects on May 13, 2026, and for new Enterprise projects on June 22, 2026."

Think of it as a doorman versus an open shop. TanStack Start hands the same finished page to whoever knocks. React + Vite keeps the finished page behind a doorman with a guest list, and the guest list is verified by Lovable rather than by the name on your request. That is why our sweep found no difference between a browser fetch and a GPTBot fetch: sending a crawler's user agent string does not get you past the door, and neither does any scanner.

## What fifteen published Lovable apps returned

| Template | Apps | Body words, browser | Body words, GPTBot | Under 50 words |
|---|---|---|---|---|
| TanStack Start | 6 | 246 to 1,284 (median 470) | Identical | 0 |
| React + Vite | 9 | 9 to 210 (median 22) | Identical | 7 |

Method: `curl -sL --compressed`, two user agents per app, `<script>`, `<style>`, `<noscript>` and `<svg>` blocks removed before counting. The stack label for each app is Lovable's own `tech_stack` field, fetched from its API rather than guessed. The sample is one operator's portfolio, so it says nothing about how Lovable users generally configure their sites, and a great deal about how the platform behaves, because template choice is the only variable that moved.

The typical React + Vite response was the `<title>`, the meta description and the Lovable badge. Enough for a link preview, not enough for a retrieval crawler to quote you. According to Vercel's [December 2024 crawler study](https://vercel.com/blog/the-rise-of-the-ai-crawler), still the last public measurement of the question, none of the major AI crawlers execute JavaScript, and no operator has said otherwise since.

## Step 1: find out which template you are on

Ask Lovable in the chat, exactly as its documentation suggests:

```text
What stack is this project on?
```

Or check for the option that only appears on eligible projects: **Project settings → General → Project actions → Migrate to TanStack Start**. Lovable's troubleshooting note is that if the option is missing, "your project is probably already on TanStack Start."

## Step 2, path A: migrate to TanStack Start

This is the recommended path if the option exists for you.

1. In the editor chat, type `/` and choose **Migrate to TanStack Start**, or open **Project settings → General → Project actions → Migrate to TanStack Start** and select **Migrate**.
2. Confirm on the card titled **Migrate to TanStack Start**. Lovable documents the cost as "10 to 35 credits, depending on how large your project is."
3. Wait. A large project can pause partway and report what is left; ask it to continue.
4. Review in the preview. The upgrade changes the project, not the live site, until you publish.
5. Publish. Only then does the rendering change reach visitors and crawlers.
6. If a page is blank afterwards, the usual cause is a browser-only library. Tell Lovable which page failed; it can change how that library loads.

Revert is documented and safe: restore the version before the upgrade from **version history**, and your published site is unaffected because the upgrade never touched it.

## Step 2, path B: stay on React + Vite

Nothing forces the migration. Its own FAQ, on the upgrade page, answers "Do I have to upgrade?" with "No. Older React + Vite projects keep working, and search engines can still read them through pre-rendering."

If you stay, accept three consequences.

1. **You cannot verify your own rendering with a command.** No curl, no third-party scanner and no CI check will see the pre-rendered HTML. Use Google's URL Inspection tool or a social platform's link debugger, which is what Lovable's documentation recommends.
2. **Any crawler outside the verified list gets the shell.** That list is Lovable's, not yours, and it is not published anywhere machine-readable.
3. **Metadata still lands.** The `<title>`, description and Open Graph tags are in the initial HTML on both templates, so put anything a crawler must read there.

## Step 3: add the discovery files, on either template

According to Lovable's SEO page, "sitemaps, `robots.txt`, metadata, and other SEO elements are not always generated up front." Two mechanisms serve them, and both work on either template.

| What you need | Check | Mechanism | Where it goes |
|---|---|---|---|
| robots.txt with named AI bots | D1, B2 | Static file | `public/robots.txt` |
| llms.txt | C2 | Static file | `public/llms.txt` |
| Markdown twin of the homepage | C1 | Static file | `public/index.md` |
| MCP server card, API catalog | P1, P2 | Static file | `public/.well-known/…` |
| Sitemap built from a database | D2 | Server route | `sitemap[.]xml.ts` |
| OAuth discovery metadata | P4 | Server route | `[.well-known]/…` |

**Static files.** Anything in `public/` is served from the site root, and dotted directories work, which is the part that matters. Our own project tree carries `public/.well-known/mcp/server-card.json` and `public/.well-known/agent-skills/index.json`, both live on `aiscan.site` and both verified on 1 September 2026. Webflow gates `.well-known` behind an Enterprise-only API and Ghost's theme middleware refuses `.json` outright, so this is the one hosted builder in the series where the capabilities dimension is reachable on any plan. Use the [llms.txt generator](https://aiscan.site/llms-txt-generator) rather than writing that file by hand.

**Server routes.** A sitemap that reflects a database needs code. TanStack Router's [file naming conventions](https://tanstack.com/router/latest/docs/framework/react/routing/file-naming-conventions) give the escape rule verbatim: "Square brackets escape special characters in filenames that would otherwise have routing meaning. For example, `script[.]js.tsx` becomes `/script.js`." A route named `llms[.]txt.ts` therefore answers at `/llms.txt`, and a folder named `[.well-known]` produces `/.well-known/`. Our project uses both forms.

For B2, name the crawlers rather than relying on a wildcard. Lovable does this on its own marketing site: `lovable.dev/robots.txt`, fetched on 1 September 2026, carries separate groups for `GPTBot`, `OAI-SearchBot`, `ClaudeBot`, `PerplexityBot`, `Google-Extended` and `Applebot-Extended`, and an inline comment explaining why the rules are repeated rather than inherited: "A named group replaces the `*` group outright."

## When the content is not in the Lovable app

Lovable connects to WordPress.com and Contentful as headless sources. If your posts live in WordPress, the Lovable work does not touch that domain's robots.txt, schema, sitemap or llms.txt, and those are graded separately.

[ThinkRank](https://thinkrank.ai) is the plugin to reach for there. It handles robots.txt, robots meta, schema, sitemaps and llms.txt from one plugin, which ends the usual fight between three plugins over one file, and it migrates settings from Rank Math, Yoast, All in One SEO and SEOPress so nothing gets re-entered. Rank Math has the deeper schema editor and Yoast the better editorial readability tooling; pick either if that is what you need. If a Shopify store sits behind a Lovable front end, [StoreSEO](https://storeseo.com/) generates llms.txt from live products, collections, pages and articles and ships an agents.md editor, which no theme edit gives you.

## Confirm the change reached crawlers

**Start with the scan.** `npx aiscan-cli yoursite.com`, or paste the URL at [AIScan](https://aiscan.site/). Read four rows: C3 and E3 for server-rendered HTML, D1 and D2 for robots.txt and sitemap, B2 for named AI crawlers, C2 for llms.txt. Add `--min-score 85` to gate a build. Passing looks like body word counts in the hundreds and a `pass` on C3.

**If you would rather check by hand**, the same four answers come from four commands:

```bash
URL=https://yoursite.com
curl -sL --compressed "$URL" \
| perl -0777 -pe 's/<(script|style|noscript|svg)\b.*?<\/\1>//gsi; s/<[^>]+>/ /gs' \
| tr -s '[:space:]' ' ' | wc -w        # under 100 means the shell, not the page
curl -sI "$URL" | grep -i x-robots-tag  # noindex here means you measured a preview URL
curl -s "$URL/robots.txt" | grep -iE 'gptbot|claudebot|perplexity'
curl -sI "$URL/llms.txt" | head -1
```

Run these against your custom domain. A `.lovable.app` preview host answers with `x-robots-tag: noindex, nofollow`, verified on 1 September 2026, and a published app with a custom domain connected redirects its `.lovable.app` URL to that domain.

## Where AIScan fits, and where it doesn't

AIScan reads what your server actually returns. On a React + Vite Lovable app that is the SPA shell, by design, because we are not on Lovable's verified list and no scanner is. So a low C3 or E3 on that template means "an unverified client sees nothing", which is true and worth knowing, but it is not the same as "Google sees nothing." We cannot see the pre-rendered copy, and we say so rather than scoring around it. On TanStack Start there is no gap: what we read is what everyone reads.

The scan also cannot tell you whether your content is worth citing. It grades reachability, not quality.

## Your next step on Lovable

Scan your published custom domain at [AIScan](https://aiscan.site/) and read C3, E3, D1, D2, B2 and C2. If C3 is failing and the migration option exists in your project settings, take path A. If it does not, add the three files to `public/` today and come back to the rendering question later. The rest of the platform guides are at [aiscan.site/guides](https://aiscan.site/guides), the Lovable pages we track are at [/docs/platforms/lovable](https://aiscan.site/docs/platforms/lovable), and the check definitions live under [content](https://aiscan.site/docs/checks/content), [discoverability](https://aiscan.site/docs/checks/discoverability), [bot access](https://aiscan.site/docs/checks/bot-access) and [capabilities](https://aiscan.site/docs/checks/capabilities).

Related guides: [Next.js](https://aiscan.site/blog/ai-readiness-setup-nextjs), [Webflow](https://aiscan.site/blog/ai-readiness-setup-webflow) and [Ghost](https://aiscan.site/blog/ai-readiness-setup-ghost), plus the teardown of [why a React front end goes invisible to AI crawlers](https://aiscan.site/blog/nextjs-react-invisible-to-ai-crawlers) and the [llms.txt mistakes](https://aiscan.site/blog/llms-txt-validator-common-mistakes) that a generated file usually makes.

