Your React site might be invisible to ChatGPT. Mine was.

Allowed in robots.txt, HTTP 200 for every bot, and still zero readable words. Why client-side rendering hides you from most AI crawlers, and how to fix it.

By Arsh Goyal, Growth Engineer 3 min read
Your React site might be invisible to ChatGPT. Mine was.

When we added a content check to our AI crawler checker, the first site I tested was my own portfolio. robots.txt allowed every crawler. Every bot got HTTP 200. Then the new check came back: zero readable words.

My portfolio is a React single-page app. This is roughly what any crawler receives when it asks for the homepage:

<title>Arsh Goyal</title>
...
<body>
  <noscript>You need to enable JavaScript to view this site.</noscript>
  <div id="root"></div>
</body>

Everything a person sees, the projects, the experience, the case studies, is built in the browser by JavaScript after the page loads. A crawler that doesn't run JavaScript sees a title and an apology.

Which crawlers run JavaScript

Vercel analysed crawler traffic across its network and found that none of the major AI crawlers render JavaScript: OpenAI's OAI-SearchBot, ChatGPT-User and GPTBot, Anthropic's ClaudeBot, Meta's crawler, ByteDance's Bytespider and PerplexityBot. They often download the JavaScript files, but as text. They don't run them.

Googlebot does render JavaScript, and Vercel found Applebot does too. So a React site can rank fine in Google, appear in AI Overviews, and still be a blank page to ChatGPT, Claude and Perplexity. That combination is why the problem hides for so long: Google traffic looks normal, so nobody checks.

Why it matters more every month

When someone asks ChatGPT "who builds X" or "what is the best tool for Y", the answer is assembled from pages the AI's crawler could read. If your page has no readable text, it can't be quoted, summarised or recommended. You aren't penalised. You simply don't exist in that conversation.

For a portfolio, that is a missed recruiter search. For a SaaS product or an app's website, it is missed customers.

How to fix it

I have done this migration before, during an engineering internship: content pages moved from hard-coded builds to CMS-driven Next.js pages with server-side rendering, mainly so non-developers could update content without a deploy. Crawlable HTML came along for free. The options, from most to least work:

  1. Server-side rendering. Next.js, Remix or Nuxt build the HTML on the server for each request, so crawlers get the full page.
  2. Static pre-rendering. If content doesn't change per user, render each route to HTML at build time. For a portfolio or marketing site this is usually the simplest answer.
  3. At minimum, real HTML for the essentials. Put the page title, a meta description, an H1 and a short summary paragraph in the static HTML, even if the rest stays client-side. It isn't a full fix, but it gives crawlers something true to read.

A <noscript> block with real content beats "You need to enable JavaScript", but don't rely on it as the only fix. Google's own JavaScript SEO guidance makes the same point for its crawler: server-side or pre-rendered HTML is faster and more reliable for every bot.

How to check your own site

Run curl -s https://yoursite.com and look for your actual words in the output. Or use the free AI crawler checker: it counts the words a crawler can read without JavaScript and flags JavaScript-only pages. On my portfolio it shows ChatGPT, Claude and Perplexity as "Reachable, but sees an empty page", while Google and Siri stay green because their crawlers render.

Pre-rendering my portfolio is next on my list, and I will add the before-and-after numbers here when it's done.

Questions people ask

Can ChatGPT read JavaScript websites?

Not reliably. OpenAI's crawlers fetch your HTML but don't execute JavaScript, so content rendered in the browser isn't visible to them.

Does Google see my React app?

Yes. Googlebot renders JavaScript, so client-rendered content can be indexed by Google, though server-rendered HTML is faster and more reliable.

What is the quickest fix for a React single-page app?

Pre-render your routes to static HTML at build time. If content changes per request, move to server-side rendering with a framework such as Next.js.

Want this mapped onto your product?

See how our GEO work runs, or send your store link and a founder will reply personally.