I built my site with Lovable, Bolt or Cursor, and ChatGPT never mentions it
Bring the live URL of your vibe-coded site and a terminal. Six one-minute tests show whether a common trap is hiding it: text that exists only in JavaScript, AI bots blocked at the CDN, soft 404s, an open preview copy, links that aren’t links, or a site only Google knows about. Each trap has a known fix you can hand to your AI coding tool, so you don’t need to rebuild the site.
Why vibe-coded sites go missing
A site built in an evening with an AI builder can look finished in your browser and still be blank to the bots that feed ChatGPT, Claude and Perplexity. The popular 20-point SEO checklists don’t mention the main reasons: in our book we checked one such list against Google’s own documentation, and the three things that most often make a vibe-coded site invisible (text in JavaScript, soft 404s, open preview copies) weren’t on it. Run the six tests below before anything else; if a test fails, fix it first. In short, the six traps are:
- the text exists only after JavaScript runs;
- AI bots are blocked by the CDN or firewall;
- missing pages answer with a 200 instead of a 404;
- a preview copy of the site is still public;
- menus and cards change page without real links;
- Google has the site, but Bing and Brave don’t.
What your builder usually produces
| Builder | What it usually outputs | What to check |
|---|---|---|
| Lovable | Apps created from 13 May 2026 use TanStack Start with server rendering; older React + Vite apps get prerendered pages served only to verified crawlers (Lovable docs) | Run trap 1; for older apps, confirm with Search Console’s live test |
| Bolt, Replit | Often a client-rendered React/Vite app | Run trap 1 first |
| v0 | Next.js App Router apps, server-rendered by default | Pages marked "use client" that load their text in useEffect |
| Cursor, Claude Code, Windsurf | Whatever framework you or the agent picked | Run all six |
The six traps
1. The text lives in JavaScript
Single-page apps draw the page in the browser, so the HTML the server sends is often nearly empty. Google renders JavaScript later, in a queue, and still recommends server rendering or prerendering (Google, JavaScript SEO basics). The AI crawlers don’t render it at all in Vercel’s analysis (Vercel, December 2024; third-party study). A quiz page on our sample site showed bots 27 words until we added an 86-word written “How it works” section (own measurement, 24 September 2026).
Test: a few dozen words means your text is in JavaScript.
curl -s https://yoursite.com/ | sed 's/<[^>]*>/ /g' | wc -w
Fix: prompt P2 in the method: server rendering, static generation or prerendering for public pages only, with real paths instead of # routes. For older Lovable apps on Lovable hosting, curl sees the plain app because the prerendered version goes only to verified crawlers; Search Console’s URL inspection live test shows what Googlebot really gets. If you export and self-host such an app, the prerendering doesn’t come with it.
2. AI bots are stopped at the door
Your robots.txt can say yes while your CDN or firewall says no. We found exactly this on katman.pro on 29 September 2026: robots.txt allowed GPTBot, and Cloudflare returned 403 to training bots (own measurement).
Test: anything other than 200 means something is blocking.
curl -s -o /dev/null -w "%{http_code}\n" -A "Mozilla/5.0 (compatible; GPTBot/1.2)" https://yoursite.com/
Fix: follow Cloudflare is blocking AI crawlers, or run the AI crawler checker to test the main AI bots at once. Other hosts have their own switches: on Vercel, for example, the AI bots ruleset is inactive unless you turn it on (Vercel bot management).
3. Missing pages return 200 (soft 404s)
In a single-page app, a URL that doesn’t exist often shows a “page not found” screen with a 200 status. Google calls that a soft 404 and suggests two fixes: redirect to a URL that really returns 404, or add noindex to that screen (Google, JavaScript SEO basics). On Cloudflare Workers, not_found_handling: "single-page-application" serves your index page with a 200 for every unknown path (Cloudflare).
Test: anything other than 404 is a problem.
curl -s -o /dev/null -w "%{http_code}\n" https://yoursite.com/this-page-does-not-exist
Fix: prompt P11: every missing URL returns a real 404.
4. A preview copy is still open
Most hosts give each project a preview address, such as project.vercel.app. If it stays public after you connect your own domain, Google sees two copies of the site and picks the canonical one itself, possibly the wrong one. Google uses an open demo copy as its own example of this problem; the fix is noindex, a password or a redirect, and robots.txt isn’t enough (Google, canonicalization troubleshooting).
Test: search Google for site:vercel.app "yourbrand", or use your host’s preview domain instead of vercel.app.
Fix: prompt P11: preview and staging URLs redirect with a 301 to the main address, return noindex, or sit behind a password.
5. Links that aren’t links
A div that changes page with onClick in your menu or on cards isn’t a link to a bot. Google follows only <a> elements with an href, and URLs should change through real paths, not # fragments (Google, crawlable links).
Test: fewer links than the pages in your menu means trouble.
curl -s https://yoursite.com/ | grep -o '<a [^>]*href="/[^"]*"' | wc -l
Fix: prompt P10: real <a href> links everywhere, 0 orphan pages, 0 broken internal links.
6. Google knows you, Bing and Brave don’t
Copilot answers from Bing’s index, and our research note says Claude searches through Brave (medium confidence). Bing asks you to send IndexNow whenever pages are added or changed (Bing Webmaster Guidelines). Brave has no console and no IndexNow; you submit pages one at a time. On 24 September 2026, Bing had 0 pages of our sample site, and ChatGPT still sent it 40 visitors that day (own measurement): Bing is needed for Copilot, not for ChatGPT.
Test: search Bing for site:yoursite.com.
Fix: add the site to Bing Webmaster Tools (it can import from Search Console), set up IndexNow for changed URLs only, and submit key pages at search.brave.com/submit-url.
Run all six in one go
SITE=https://yoursite.com
echo "1 words: $(curl -s $SITE/ | sed 's/<[^>]*>/ /g' | wc -w)"
echo "2 GPTBot: $(curl -s -o /dev/null -w '%{http_code}' -A 'Mozilla/5.0 (compatible; GPTBot/1.2)' $SITE/)"
echo "3 404: $(curl -s -o /dev/null -w '%{http_code}' $SITE/this-page-does-not-exist)"
echo "5 links: $(curl -s $SITE/ | grep -o '<a [^>]*href="/[^"]*"' | wc -l)"
echo "4 and 6: search Google for site:<preview-domain> \"brand\" and Bing for site:${SITE#https://}"
What good looks like:
- words: hundreds, not dozens;
- GPTBot:
200; - missing page:
404; - links: at least as many as your menu items;
- searches: no preview copies in Google, and your pages listed in Bing.
What to fix first
- Trap 2: if bots can’t get in, nothing else counts.
- Trap 1: if they get in but see no text, nothing else counts either.
- Traps 3 and 4: soft 404s and preview copies confuse which pages are real.
- Trap 5: bots can only find the pages you link to.
- Trap 6: tell Bing and Brave, so Copilot and Claude can find you.
Once all six pass, you’re through the first gate. The next two, a sentence worth quoting and a page for each customer situation, are covered in Why doesn’t ChatGPT recommend my brand?.
Hand it to your AI coding tool
Give it one measurable job and one acceptance criterion, not “fix the SEO”. This is prompt P2 from our book:
The text of our public pages must be visible in the HTML without JavaScript:
headings, paragraphs, prices, FAQ answers and links. Pick the smallest change
for our framework (server rendering, static generation at build time, or
prerendering public pages) and explain why. Leave the app screens as they are.
Use real paths, not # fragments. When done, show that this command prints each
page's H1 and first paragraph:
curl -s https://DOMAIN/PAGE | sed 's/<[^>]*>/ /g' | tr -s ' ' | head -c 600
Accept when: with JavaScript off, every page’s H1 and first paragraph can be read.
How Katman runs these checks
Katman is an MCP server that works inside Cursor, Claude Code, VS Code and other AI coding tools. katman_scan_code reads your codebase and reports the framework, the builder signature (Lovable, Bolt, v0, Replit) and whether pages render on the server or only in the browser. katman_audit_site runs all six tests on the live site; both are part of Audit Week ($3 for 7 days) and Katman Pro. katman_prompt, a Katman Pro tool, returns P2 with prerender options for your framework. More on what Katman does, how to install it and the vibe-coder track of the course.
Written by the Katman team, Rnify Limited. Google, Lovable, Vercel, Cloudflare and Bing pages checked 30 September 2026.
Who this is not for
- Sites that already pass all six tests: the next step is situation pages and a quotable first sentence.
- App screens behind a login: they should stay out of search and AI answers.
- Anyone looking for ranking tricks: this page is only about being readable at all.
Frequently asked questions
Are Lovable sites invisible to ChatGPT?
Not necessarily. Lovable says apps created from 13 May 2026 are server-rendered and older ones get prerendered HTML for verified crawlers, so run the tests and, for older Lovable apps, confirm with Search Console’s live test.
Do I have to rebuild my app to fix this?
No. Usually only the public pages need server rendering or prerendering; app screens behind a login can stay exactly as they are.
Google indexes my site, so why doesn’t ChatGPT see it?
Because Google runs JavaScript and the AI crawlers don’t. A client-rendered page can look complete in Google and still be empty for OAI-SearchBot, ClaudeBot and PerplexityBot.
Is robots.txt enough to hide my preview URL?
No. Google recommends noindex, a password or a redirect to your main address; robots.txt only stops crawling, and a blocked URL can still end up in the index.
Why does a missing page need to return 404?
Because a “page not found” screen sent with a 200 status is a soft 404 to Google, and every unknown URL then looks like a real, empty page.
Do I need Bing if ChatGPT already sends visitors?
For Copilot, yes: it answers from Bing’s index. Our sample site got ChatGPT visitors while Bing had 0 of its pages (own measurement, 24 September 2026), so Bing isn’t required for ChatGPT.
Can my AI coding tool fix these on its own?
Yes, if you give it a measurable job and an acceptance criterion for each trap. “Fix SEO” gets you a meta tag; “every public page shows its H1 in curl output” gets you server rendering.