You shipped an app with Lovable, Bolt, Base44, Replit or v0. Google shows it. ChatGPT, Claude and Perplexity never mention it. Before you blame "AI SEO", check one boring thing: what the crawlers actually receive when they fetch your home page.
AI crawlers do not run your JavaScript
A Vercel and MERJ study of crawler traffic found that none of the major AI crawlers render JavaScript. GPTBot, OAI-SearchBot, ChatGPT-User and Anthropic's crawlers download your JS bundles and never execute them. Googlebot does render, which is why an app can be indexed by Google and still look empty to ChatGPT.
Many AI app builders ship single-page apps. The server sends something like this:
<!doctype html>
<html lang="en">
<head>
<title>My App</title>
<script type="module" src="/assets/index-abc123.js"></script>
</head>
<body>
<div id="root"></div>
</body>
</html>
To a crawler that does not run scripts, that page has a title and zero words. Your headline, your pricing, your features: none of it exists.
Test it yourself in 30 seconds
curl -s https://yourapp.com | sed -e 's/<script[^>]*>.*<\/script>//g' -e 's/<[^>]*>/ /g' | wc -w
Or open view-source:https://yourapp.com and search for your headline. If it is not in the source, AI crawlers cannot see it. When we ran our checker on a well-known React dashboard, the home page HTML carried 5 words.
We also added this to our free check: atalaya-ai.com now counts the words in your homepage HTML, says whether the title, meta description and H1 are there, flags an empty app shell, and tells you which builder or host it recognizes. It also reads robots.txt for 20 AI crawlers, because a blocked crawler is the other common reason.
What each builder does today
- Lovable: its rendering FAQ says apps render in the browser by default and recommends prerendering for marketing sites. Newer projects can use server-side rendering; ask in the Lovable chat which one yours uses. Catch: if your app serves a prerendered copy only to verified crawlers, tools that do not pretend to be a crawler (ours included) see the browser version.
- Base44: its SEO docs say it serves crawler-ready HTML on apps published to a custom domain. Free base44 addresses are not meant for search.
- Bolt / Replit: usually Vite + React single-page apps unless the agent picked a server framework. Check with view-source.
- v0 on Vercel: Next.js renders on the server by default, so text is usually there. Check the Vercel Firewall's AI Bots managed ruleset: if set to Deny, it blocks AI crawlers before robots.txt.
- Netlify: the User Agent Blocker extension can block AI crawlers at the edge.
The prompt that fixes most of it
Paste this into your builder (works in Lovable, Bolt, Replit, v0, Cursor or Claude Code), then check view-source again:
Make the public pages (home, pricing, about, blog posts) render their full text on the server, so that a request without JavaScript returns the headline, the main paragraphs and the links. Use server-side rendering or static prerendering. Give every public page its own title, meta description and one H1 in that HTML. Keep the logged-in app as it is. When done, show me the raw HTML of the home page.
What this does not fix
Readable HTML makes your app eligible to be read and quoted. It does not make AI tools recommend it. We ran 6 buyer questions through ChatGPT, Claude, Gemini and Perplexity for our own product and were mentioned in 0 of 24 answers, even with a readable site. Recommendations come from pages that answer the exact question (like this one) and from other sites mentioning you. Fix access first, because nothing else counts until crawlers can read you.
If you use Claude Code or Cursor, the same check runs as a free MCP server: `claude mcp add --transport http atalaya https://atalaya-ai.com/mcp%60?utm_source=devto (details).
Written with AI and reviewed before publishing. If you spot an error, tell us in the comments.
Top comments (0)