Dark green cover: a whole translucent shape on the left and the same shape fragmented on the right, illustrating the two Lovable templates and what each returns to an AI crawler.
Dark green cover: a whole translucent shape on the left and the same shape fragmented on the right, illustrating the two Lovable templates and what each returns to an AI crawler.
AI Readiness

The complete AI readiness setup for Lovable in 2026

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.

AAsif Rahman September 1, 2026 10 min read
#Lovable#TanStack Start#AI readiness#server-side rendering#llms.txt

This guide covers D1 · Discoverability, D2 · Discoverability, B2 · Bot Access, C1 · Content, C2 · Content, C3 · Content, E3 · Content, P1 · Capabilities, P2 · Capabilities — for Lovable.

Table of contents

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 getWhat to doTime
TanStack Start (new default since 13 May 2026)Fully rendered HTML on every requestAdd the discovery files (D1, D2, C2)20 minutes
React + Vite (older projects)Pre-rendered HTML, but only for crawlers Lovable verifiesMigrate to TanStack Start, then add the files10 to 35 credits, plus 20 minutes
Either, published only to a preview URLx-robots-tag: noindex, nofollowConnect a custom domain before measuring anything1 hour including DNS

Check first, then decide: run npx aiscan-cli yoursite.com, or paste the URL at AIScan. 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, 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 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

TemplateAppsBody words, browserBody words, GPTBotUnder 50 words
TanStack Start6246 to 1,284 (median 470)Identical0
React + Vite99 to 210 (median 22)Identical7

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, 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:

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 needCheckMechanismWhere it goes
robots.txt with named AI botsD1, B2Static filepublic/robots.txt
llms.txtC2Static filepublic/llms.txt
Markdown twin of the homepageC1Static filepublic/index.md
MCP server card, API catalogP1, P2Static filepublic/.well-known/…
Sitemap built from a databaseD2Server routesitemap[.]xml.ts
OAuth discovery metadataP4Server 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 rather than writing that file by hand.

Server routes. A sitemap that reflects a database needs code. TanStack Router's 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 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 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. 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:

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 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, the Lovable pages we track are at /docs/platforms/lovable, and the check definitions live under content, discoverability, bot access and capabilities.

Related guides: Next.js, Webflow and Ghost, plus the teardown of why a React front end goes invisible to AI crawlers and the llms.txt mistakes that a generated file usually makes.

Frequently asked questions

My Lovable app fails C3 for server-rendered HTML, but Google indexes it fine. Which is right?

Both, if the project is on React + Vite. Lovable pre-renders those pages only for crawlers it verifies, and its own documentation says third-party scanners and other unverified agents see the regular single-page app. AIScan is an unverified agent, so a failing C3 means an unverified client gets nothing. It does not prove Google gets nothing. Migrating to TanStack Start removes the ambiguity, because then every request gets the same HTML.

The Migrate to TanStack Start option is missing from my project settings.

Lovable's troubleshooting note is that the project is probably already on TanStack Start, or Lovable cannot determine its stack. Ask in the chat: What stack is this project on? New projects have used TanStack Start by default since 13 May 2026, and new Enterprise projects since 22 June 2026, so anything created after those dates will not show the option.

My scan reports x-robots-tag: noindex on my Lovable app. Did I break something?

Almost certainly you scanned a preview URL. Lovable preview hosts answer with x-robots-tag: noindex, nofollow, verified on 1 September 2026, and branded workspace URLs are never indexable either. Connect a custom domain, publish, and scan that hostname. Everything you measured on the preview host tells you nothing about the live site.

A page went blank after the TanStack Start migration.

The usual cause is a code library that only runs in the browser and breaks server rendering. Lovable's own limitation note says its post-upgrade checks do not catch all of these. Tell Lovable which page failed and what you see; it can change how that library loads. If the whole app is wrong, restore the version from before the upgrade in version history, which leaves your published site untouched.

Where do I put robots.txt in a Lovable project?

In public/robots.txt. Anything in the public folder is served from the site root on both templates. Name the AI crawlers explicitly rather than relying on a wildcard group, because a named group replaces the wildcard group outright rather than inheriting from it. Lovable does exactly this on its own marketing site, with separate groups for GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended and Applebot-Extended.

Can a Lovable app serve files under /.well-known?

Yes, on any plan, and this is where Lovable beats the other hosted builders. A dotted directory inside public works, so public/.well-known/mcp/server-card.json is served at /.well-known/mcp/server-card.json. Generated files use a route folder named [.well-known] instead. Webflow restricts .well-known uploads to an Enterprise-only API and Ghost's theme middleware refuses .json outside the assets folder.

Do I need an llms.txt file on a Lovable app?

Lovable says no, and its SEO review does not treat a missing file as a problem. AIScan grades it as C2 because agent-facing discovery is what we measure, and the file costs one upload. Google has said separately that llms.txt will neither harm nor help rankings in Google Search. Publish one if you want a curated map for AI clients; do not expect search traffic from it.

How much does the TanStack Start migration cost, and can I undo it?

Lovable documents the cost as 10 to 35 credits depending on project size, on all plans, for anyone with permission to edit the project. It is reversible from version history, and it does not change the live site until you publish again, so you can review the upgraded app for as long as you like before anyone else sees it.

Related guides