If you've built a site with Lovable, Bolt, v0, Cursor, or Replit and you're wondering why it isn't showing up in search, this is the article for you.
Vibe coding SEO mistakes aren't random. After auditing a growing number of these sites, the patterns are entirely predictable. The same five structural problems appear on almost every vibe-coded site, regardless of which tool was used or what industry the business is in. The tools that build the visible layer don't build the infrastructure layer. And it's the infrastructure layer that determines whether a site gets found.
Here's what's wrong, and what to do about it.
Why the same five mistakes appear on every vibe-coded site
The mistakes aren't the fault of the founder, and they're not exactly the fault of the tools. They're a knowledge gap of the developer, and a structural consequence of how vibe coding works.
When you describe what you want, and the AI builds it, the output is optimised for what you can see: layout, content, navigation, visual design. What you can't see—things like crawlability, structured data, entity signals, content extraction—is invisible during development. A page can look polished, load fine in a browser, and still be fundamentally broken from a search engine's or AI engine's perspective.
As one technical SEO auditor who reviewed a growing number of vibe-coded sites noted: "SEO tends to be one of the first things sacrificed in [vibe coding] because most SEO problems are invisible during development. A page can look modern, load fine for users, and still create major crawlability and indexing issues behind the scenes."
In my work, I've noticed the same; five distinct issues appear every time.
Mistake 1: Client-side rendering—why AI crawlers see a blank page
Most vibe coding tools generate React applications or Next.js projects without server-side rendering configured by default. The browser receives a near-empty HTML file, and JavaScript runs to build the actual content the visitor sees.
This is completely invisible to a human user. The page appears fully formed within milliseconds.
For AI crawlers, it's a blank page.
Marketing Movement confirmed this directly: "GPTBot from OpenAI, ClaudeBot from Anthropic, PerplexityBot and most other AI crawlers do not execute JavaScript at all." They fetch the static HTML. If your content only exists after JavaScript executes, those crawlers see nothing.
What the tool did: Generated a React or Next.js frontend with client-side rendering; the standard output for the frameworks these tools use.
What it should have done: Configured server-side rendering (SSR) or static site generation (SSG) so content exists in the initial HTML response before any JavaScript runs.
The fix: In Next.js, use getServerSideProps or getStaticProps to ensure pages render on the server. After implementing, disable JavaScript in your browser and reload the page; if your content is still visible, the fix is working. If the page goes blank, it isn't.
Mistake 2: The schema vacuum
Every vibe-coded site I've audited has the same structured data situation: none, or a few basic meta tags that shipped with the template.
No Person entity. No ProfessionalService entity. No Service schema on individual offerings. No Article schema on content pages. No FAQPage schema. No @id references linking any of it together.
This matters because search engines and AI engines don't just read text; they build models of entities. To be cited by ChatGPT, Perplexity, or Claude, you need to be a recognisable entity: something the engine can identify with confidence and attribute accurately. Without schema, the engine must infer everything from unstructured prose. Inference is imprecise. When the engine isn't sure, it cites someone it is sure about.
What the tool did: Generated meta titles, descriptions, and Open Graph tags—surface-level SEO requirements that the major vibe coding tools handle adequately.
What it should have done: At a minimum, implemented a connected entity graph including: Person linked to ProfessionalService via founder, Service schema on each offering, Article schema on content with author linked back to the Person entity via @id, and FAQPage schema on every page with FAQ content.
The fix: Add JSON-LD schema blocks to the <head> of each page. The key is the linking; each entity references the others via @id values so the engine can follow the connections. Validate at Google's Rich Results Test. Zero errors is the target.
Mistake 3: robots.txt built for a pre-AI world
Most vibe coding tools generate a basic robots.txt file—a wildcard Allow: / rule and a sitemap reference. That's not wrong, but it's incomplete.
The major AI companies now run separate crawlers for training (building their models) and for citation (answering user queries in real time). A file that says Allow: / treats them all the same. A properly configured file lets you block training crawlers while allowing citation crawlers, so you don't feed training data you didn't consent to, but you still appear in AI answers.
What the tool did: Either left robots.txt absent or generated a generic file with no AI-specific configuration.
What it should have done: A robots.txt that explicitly allows the major citation crawlers—OAI-SearchBot, Claude-SearchBot, PerplexityBot, ChatGPT-User, Claude-User—and optionally blocks training crawlers—GPTBot, ClaudeBot, Google-Extended—depending on the founder's preference.
The fix: Edit or create robots.txt at the root of your domain with explicit User-agent rules for each major AI crawler. Confirm the file is reachable at yourdomain.com/robots.txt and references your sitemap.xml. If your site runs behind Cloudflare, check whether Bot Fight Mode is active—it can block AI crawlers at the network layer before they reach your robots.txt at all.
Mistake 4: No entity graph
Even when a vibe-coded site has some schema—usually a basic Organization block—the entities aren't connected.
An entity graph is a set of schema declarations where each entity references the others via @id values. The Person entity points to the ProfessionalService via worksFor. The ProfessionalService points back to the Person via founder. Every Article points to the Person via author. Every Service points to the ProfessionalService via provider.
When these connections exist, an engine can follow them: this article was written by this person, who founded this business, which offers this service. That's a coherent entity model. Without the connections, isolated schema blocks are declarations the engine can't verify against each other. This is why entity SEO is so important.
What the tool did: Either generated no schema, or generated a standalone schema block with no connections to other entities on the site.
What it should have done: An entity graph where every schema block uses a consistent @id and references related entities using those same values.
The fix: Audit every schema block on your site. Confirm every Article has an author field referencing your Person entity's @id. Confirm your Person has a worksFor field referencing your ProfessionalService entity's @id. Confirm your ProfessionalService has a founder field referencing your Person. Use the same @id values everywhere—if your Person entity is https://yourdomain.com/#your-name, that exact string must appear in every author reference across the site.
Mistake 5: Content written for humans, not machines
This is the hardest mistake to see because the content looks completely fine. It flows well, it describes the business accurately, it reads as professional. The problem is that it wasn't written to be extracted by a language model.
AI engines extract answers. They look for content where the answer comes first, in the opening sentence of each section, not buried after context-setting and scene-building. They look for FAQPage schema that pre-chunks question-and-answer pairs for retrieval. They look for specificity—named claims, concrete facts, attributable statements—rather than marketing language that gestures at topics without addressing them.
A page that opens with "At [Business Name], we believe in delivering exceptional value through our industry-leading solutions" gives an AI engine nothing to cite. A page that opens with "A systems architecture review typically takes one to three days and produces a prioritised list of infrastructure changes, ranked by impact" gives the engine a citable answer to a specific question.
What the tool did: Generated plausible copy that reads well but is structured for human narrative rather than machine extraction.
What it should have done: Structured every page with an answer-first paragraph in the first 40–60 words; a direct, self-contained answer to the question the page is addressing. Added FAQPage schema on every page with FAQ content.
The fix: Read the first sentence of each section on every page. Ask: does this sentence directly answer the question the heading implies? If it sets context before answering, move the answer to the front. Add a FAQ section to every article and service page with specific FAQPage schema.
The self-audit: four checks you can do right now
Before commissioning a full infrastructure review, these four checks give a fast picture of where a vibe coded site stands.
Check 1—Disable JavaScript. Open your site in Chrome, go to Settings → Site Settings → JavaScript → Block, then reload. If the content disappears, you have a client-side rendering issue. AI crawlers see what you're seeing now.
Check 2—Run the Rich Results Test. Go to search.google.com/test/rich-results and enter your URL. It shows which schema types are detected, which fields are present, and any errors. Zero errors is the target. If nothing is detected, there is no structured data on the site.
Check 3—Check your robots.txt. Go to yourdomain.com/robots.txt. If the file doesn't exist, that's a problem. If it exists but contains no AI-specific directives, that's incomplete. Check whether GPTBot, OAI-SearchBot, ClaudeBot, Claude-SearchBot, and PerplexityBot are mentioned.
Check 4—Run a domain overview. Enter your domain into Semrush, Ubersuggest, or Ahrefs' free site explorer. Look at the organic keyword count and the branded vs non-branded traffic split. If the only organic keywords are the business name, the infrastructure isn't working yet.
None of these checks requires technical expertise. They take about 20 minutes across a five-page site. The results tell you whether you have a rendering problem, a schema problem, a crawler access problem, or a content structure problem—or all four.
Or—run the PRISM Platform Checker. If you'd rather not go through these checks manually, the PRISM Platform Checker audits your site's access layer in one pass—AI crawler access, robots.txt, sitemap, llms.txt, JavaScript rendering risk, and Core Web Vitals. Free, no login required.
As one Quora thread on vibe-coded sites concluded in March 2026: "AI-generated sites can rank, but only if the builder actively enforces professional SEO standards the AI will not apply by default."
The tools are fast. The infrastructure is still a specialist job.
How do I fix SEO on a vibe-coded website?
Fix the five structural issues in this order: (1) confirm core content is visible in the HTML source before JavaScript executes—if not, configure server-side rendering; (2) implement a connected entity graph with Person, ProfessionalService, Service, Article, and FAQPage schema, all linked via @id references; (3) update robots.txt to explicitly allow citation crawlers and optionally block training crawlers; (4) audit every schema block for correct @id linking; (5) restructure content so every page and section opens with a direct, citable answer in the first 40–60 words. Validate schema at Google's Rich Results Test before deploying.
Does Lovable or Bolt include SEO?
Lovable and Bolt handle surface-level SEO—meta titles, meta descriptions, and basic URL structure. They do not generate schema markup, configure server-side rendering for AI crawler compatibility, produce a correctly linked entity graph, or structure content for AI extraction. Lovable has a field where you can paste custom JSON-LD schema if you already know what to write. Bolt will generate schema if you specifically prompt it—but only if you know what to ask for and how to verify the output is correctly wired.
Why can't Google index my AI-built website?
The most common reason is client-side rendering. Most vibe coding tools generate React or Next.js applications where content loads via JavaScript after the initial page request. Google's first crawl pass reads the initial HTML only—if the content doesn't exist in that response, it goes into a delayed render queue that can take days or weeks for a new site. Disable JavaScript in your browser and reload the page: if the content disappears, this is your problem. The fix is configuring server-side rendering or static site generation so content is present in the initial HTML.
What is client-side rendering and why does it hurt SEO?
Client-side rendering means a webpage's content is built by JavaScript running in the user's browser after the page loads. The initial HTML file contains little or no visible content—just a shell and a JavaScript bundle. For human visitors using a browser, this is invisible. For search engine crawlers and AI systems that don't execute JavaScript, the page appears empty. Google has a two-wave indexing process that eventually renders JavaScript, but it creates indexing delays for new sites. AI crawlers—GPTBot, ClaudeBot, PerplexityBot—don't render JavaScript at all, making client-side rendered content invisible to them.
How do I check if my vibe-coded site has schema markup?
Go to search.google.com/test/rich-results and enter your URL. The tool shows which schema types are detected, which fields are present, and any errors or warnings. If nothing is detected, the site has no structured data. You can also view the page source (right-click → View Page Source) and search for "application/ld+json"—if that string doesn't appear, there is no JSON-LD schema on the page. Zero errors in the Rich Results Test is the baseline. Warnings are usually acceptable; errors mean the schema isn't being read correctly.
Can I add schema markup to a vibe-coded website?
Yes. Schema markup is JSON-LD code added to the head of each page—it's independent of the framework and can be added to any site. Lovable has a built-in SEO field where you can paste JSON-LD. In Next.js or React projects (which most vibe-coded sites use), schema is added as a script tag with type="application/ld+json" in the page head, or via a library like next-seo. The challenge isn't adding the code—it's knowing what to write. A correctly linked entity graph requires understanding which entities to declare, which fields each type requires, and how to connect them via @id references so the engine can follow the relationships.
Aimee Q Devlin is a Systems and Infrastructure Architect based in San Miguel de Allende, Mexico. She works with founders and operators of established businesses who are ready to rebuild their systems properly—including the infrastructure that makes those systems discoverable. The Infrastructure Audit is where most engagements begin.
→ Your Vibe-Coded Website Looks Great. Here's Why Nobody's Finding It.
→ AI Training vs AI Citation: The Crawler Decision Most Businesses Get Wrong
›Sources
- Are vibe coded websites SEO friendly?, Marketing Movement, May 2026
- Schema Markup for Founders, aimeeqdevlin.com
- AI Training vs AI Citation: The Crawler Decision Most Businesses Get Wrong, aimeeqdevlin.com