SEO·AEO·GEO

SEO by platform · Updated

React SEO: making a React app crawlable

A React app rendered only in the browser sends crawlers an almost empty HTML page. Google can usually render it, with delays; AI crawlers can't at all. The fix is rendering on the server or at build time, which is why React's own docs recommend starting with a framework.

Aalhad, Founder, SEO·AEO·GEO

Founder, SEO·AEO·GEO

Builds SEO·AEO·GEO and writes the crawler, schema, and citation research published here.

How React serves pages to crawlers

Plain client-side React (for example an app created with Vite's React template) ships a <div id="root"></div> and fills it with JavaScript. Frameworks such as Next.js and React Router's framework mode render the same components to HTML on the server or at build time.

Why client-side React is a problem

Google renders JavaScript pages in a second phase, after crawling, using a headless browser. It works, but it can be delayed, and errors or blocked resources leave the page empty. Google's own guide recommends server-side rendering or pre-rendering. AI crawlers such as OAI-SearchBot, ClaudeBot and PerplexityBot don't run JavaScript, so they see only the empty shell.

Your options

OptionEffortResult
Use a framework with SSR or SSG (Next.js, React Router framework mode)Medium for existing apps, low for new onesFull HTML for every crawler
Pre-render static routes at build timeLow to mediumFull HTML for those routes
Keep marketing pages separate (static site) and the app client-sideLowThe pages that need to rank are crawlable
Stay client-side onlyNoneGoogle may index it; AI crawlers can't read it

React's documentation recommends a framework for new apps, and Create React App was deprecated in 2025.

Checklist for any React site

  • Titles and meta descriptions per route, in the server HTML. In React 19 you can render <title> and <meta> inside components and React moves them to the head.
  • Real <a href> links for navigation (router Link components render them).
  • One URL per view, with history-based routing, not hash routing.
  • Real 404 status codes for missing pages, which needs a server or framework.
  • Content, not just a loading spinner, in the first HTML response.
  • Check robots.txt allows the AI search crawlers you want: OAI-SearchBot (ChatGPT search), Claude-SearchBot, PerplexityBot. See the AI crawler list and the robots.txt generator.
  • Check your host's or CDN's bot protection doesn't block them even when robots.txt allows them.
  • Make sure the main text is in the HTML the server sends. AI crawlers don't run JavaScript.
  • Avoid nosnippet and tiny max-snippet values on pages you want quoted; they also keep pages out of Google's AI Overviews.

Check it on your own site

What the free audit tests for this

  • Raw HTML visibility
  • Internal links
  • Title tag
  • Soft 404

One URL, about 20 seconds, no login. You get the result of every check and the exact fix for the top three issues.

Audit your website free

FAQ

Is React bad for SEO?+

React itself isn't; rendering only in the browser is. With server rendering or static generation, React sites are fully crawlable.

Can Google index a React SPA?+

Usually, because Google renders JavaScript, but it can be slower and less reliable. Other search engines and AI crawlers may not render it at all.

Do I need React Helmet?+

Not in React 19, which supports <title> and <meta> in components. Frameworks such as Next.js have their own metadata APIs.

Sources

  1. Creating a React App — React Docs
  2. Understand JavaScript SEO basics — Google Search Central
  3. <title> — React Docs