---
title: Fix guides by builder
description: How to make apps built with Lovable, Bolt, v0, Replit, Cursor, Claude Code, Next.js and Vite readable by ChatGPT, Claude and Perplexity, and how to stop Cloudflare blocking AI crawlers.
order: 8
---

# Fix guides by builder

**The same five fixes make most AI-built apps readable by ChatGPT, Claude and Perplexity:** put the text in the HTML, say what the app is in the first line, describe it in structured data, publish a sitemap, and let AI crawlers in. How you apply them depends on what built your app. Run an [Unvibe checkup](https://unvibe.app/signup.html) first to see which ones you need.

## The five fixes

1. **Text in the HTML.** AI crawlers read the raw HTML and don't run JavaScript. Your homepage text must be in the HTML before any JavaScript runs: server-side rendering, static generation or pre-rendering.
2. **Say what it is, first.** The first line, page title and meta description should say what the app does and who it is for, in plain words.
3. **Structured data.** A JSON-LD block that describes the app as a `SoftwareApplication`, with its name, category, description and price.
4. **Sitemap.** A `sitemap.xml` listing your public pages, linked from `robots.txt`.
5. **Let AI crawlers in.** `robots.txt` must allow GPTBot, OAI-SearchBot, ClaudeBot and PerplexityBot, and your CDN or firewall must not block them.

## Lovable and Bolt

These builders usually produce a single-page React app (Vite), where the text is added by JavaScript. Ask the builder:

> Make sure the homepage text, title and description are in the HTML without JavaScript, by pre-rendering the public pages. Add a JSON-LD SoftwareApplication block with our name, description and price to index.html, add a sitemap.xml and a robots.txt that allows GPTBot, ClaudeBot and PerplexityBot to the public folder.

Then run a checkup: the "Readable by crawlers" area shows whether crawlers now get the text.

## v0 and Next.js

Next.js renders pages on the server by default, so the text is usually in the HTML already. Check that your homepage isn't fully client-rendered (a page marked `"use client"` that loads its content after mounting). Add metadata with the `metadata` export, JSON-LD in a `<script type="application/ld+json">` tag, and `app/sitemap.ts` and `app/robots.ts`.

## Replit

It depends on the stack Replit chose. If it is a React single-page app, follow the Lovable and Bolt guide. If it is a server app (Express, Flask, Next.js), make sure the homepage route returns the full HTML with the text in it.

## Cursor, Claude Code and Codex

Connect Unvibe over [MCP](/docs/mcp.html) and ask: *"Use Unvibe to get my fixes and apply them."* The agent reads each fix with exactly what to change, applies it in your stack and re-runs the checkup after you deploy.

## Vite and other single-page apps

Add a pre-rendering step that writes the HTML for your public pages at build time (many frameworks have a static-export option or a pre-rendering plugin), or move the marketing pages to a framework that renders on the server.

## Cloudflare and other CDNs

A CDN can block AI crawlers even when your own robots.txt allows them. In Cloudflare, check the AI crawler and bot settings, including any option that blocks AI bots and the managed robots.txt, and make sure GPTBot, ClaudeBot and PerplexityBot are allowed. The checkup's "AI crawlers get the page" check visits as each crawler and shows if one is blocked or gets a different page. On unvibe.app itself, a Cloudflare setting was serving AI crawlers a robots.txt that turned them away; switching it off took the score from 93 to 100.

## After fixing

Deploy, mark the fixes as done in Unvibe and run a checkup. Then track whether AI recommends you with [AI mentions and weekly rank tracking](/docs/ai-visibility.html).
