Playbooks

SEO for AI-built apps: the SPA problem and how to fix it

AI builders ship JavaScript SPAs that look empty to crawlers. Learn why your Lovable or Bolt app may be invisible to search and AI engines, and the fixes that make it indexable.

Last updated 2026-07-18

Your app looks perfect in a browser. To a search or AI crawler that doesn't run JavaScript, it may be a blank page. This is the single biggest SEO trap for AI-built apps — and it's fixable.

The SPA problem

Lovable, Bolt, v0, and most AI builders ship a single-page app: the HTML the server sends is a near-empty shell, and the title, meta tags, content, and analytics are injected by JavaScript after load. Google renders JS eventually, but many crawlers — including several AI crawlers — don't, so they index nothing.

How to tell if you're affected

Run an Actuant audit. If the report is flagged as rendered, it means your static HTML was an empty shell that had to be browser-rendered to score. That's the exact content JS-blind crawlers can't see.

The fixes

  1. 1

    Get critical content server-rendered

    At minimum, ship a real <title>, meta description, and Open Graph tags in the initial HTML — not injected at runtime.

  2. 2

    Serve robots.txt and sitemap.xml

    So crawlers can enumerate your pages regardless of rendering. See Search indexing.

  3. 3

    Publish an llms.txt

    A plain-text brief every AI crawler can read without JavaScript. See AI-search visibility.

  4. 4

    Consider a landing page that isn't a SPA

    Even a static, server-rendered marketing page in front of your app fixes most of the visibility problem.

The goal isn't to abandon your SPA — it's to make sure the handful of things crawlers rely on (title, meta, OG, sitemap, llms.txt) exist without JavaScript.