Can AI crawlers read React (create-react-app / Vite SPA) sites?
Client-rendered
AI crawlers see almost nothing by default.
v2 scoring Estimated on the four-pillar score. A default React (create-react-app / Vite SPA) install earns 0/35 for raw-HTML readability; schema depth, llms.txt and AI-crawler rules depend on your setup, so they start at 0. The Fix Kit supplies those three (up to 65 points) but cannot change how React (create-react-app / Vite SPA) renders.
A plain React SPA is close to invisible to AI crawlers: the served HTML is a near-empty div and everything else arrives via JavaScript they do not run.
What is actually happening
A Vite or CRA build ships an index.html containing a single mount point and a script tag. The browser fills it in; GPTBot, ClaudeBot and PerplexityBot do not. They read the shell, find nothing, and index nothing.
13 of the major AI crawlers — including GPTBot, OAI-SearchBot, ChatGPT-User — fetch your HTML and parse it without running a JavaScript engine. Anything your page adds after hydration is not part of what they read.
What to do on React (create-react-app / Vite SPA)
- 01Prerender the routes at build time — vite-plugin-ssr, react-snap or a headless-Chrome prerender step writes real HTML per route.
- 02For a content-heavy site, migrate the public pages to a framework that server-renders and keep React for the app behind the login.
- 03If prerendering is not possible, serve a server-rendered version to crawlers specifically. This is not cloaking as long as the content matches exactly.
- 04Verify with `curl`, never with the browser — view-source is the only view that matches what a crawler gets.
What trips people up
- react-helmet sets the title after hydration, so it never reaches a non-rendering crawler.
- Google can render JavaScript, which is why a site can rank in Google Search and still be absent from AI answers. The two are not the same pipeline.
- Adding structured data via JavaScript has the same problem — inject it server-side or not at all.
Where the files go on React (create-react-app / Vite SPA)
Put llms.txt and robots.txt in the /public folder so they are copied to the build output root.
Stop guessing where your site sits
The baseline above is the platform. The free scan measures your actual site: how many words a crawler reads, whether your pages come back as empty shells, and which crawlers your robots.txt lets in.
Scan my React (create-react-app / Vite SPA) siteFurther reading
- How to Make React Apps Crawlable for AI Search: SSR, Prerendering and Dynamic Rendering
Google can render React; ChatGPT, Claude and Perplexity crawlers can't. Code for Vite SSR, Next.js and Astro prerendering, dynamic rendering, and a curl check.
- What GPTBot Actually Sees When Your Site Relies on Client-Side JavaScript
AI crawlers like GPTBot and OAI-SearchBot fetch raw HTML without executing client-side JS. Here is what they actually extract from SPAs.
- Why AI Search Engines Can’t Read Client-Side Rendered (CSR) Sites
Most AI crawlers fetch raw HTML and never run your JavaScript. Here's what they actually see on a client-rendered site, how to test it, and how to fix it.
- What is Generative Engine Optimization (GEO)? The Complete 2026 Guide
How ChatGPT Search, Perplexity and Claude find, read and cite pages, why that differs from Googlebot, and what the research says actually improves AI visibility.