August 22, 2026

AI Crawlers Don't Run JavaScript. So Why Is Your Agency Selling GEO on a React Site?

A client asks why their site never appears in ChatGPT answers. An SEO audit comes back clean: good content, sensible keywords, decent authority, schema in place. Someone suggests publishing an llms.txt file and writing more FAQ sections.

Nobody opens the page source. If they did, they would find that the entire article body arrives as an empty div, and the text is injected by JavaScript after load.

ChatGPT never sees it. Not because the content is weak, but because of a rendering decision made by whoever built the site, probably two years ago, for reasons that had nothing to do with AI.

What the crawler logs actually show

In December 2024, Vercel and MERJ published an analysis of real AI crawler traffic across their network, covering roughly 1.3 billion AI crawler fetches. The headline finding has not changed since, and vendor documentation reviewed in mid 2026 still confirms it.

None of the major AI crawlers execute JavaScript. Not OpenAI's, not Anthropic's, not Perplexity's, not Meta's, not ByteDance's.

They do fetch JavaScript files. ChatGPT's crawler requested JS in 11.50% of its fetches. Claude's requested it in 23.84%. Neither runs it. The files are downloaded and discarded, which is worth understanding clearly: fetching a script is not the same as executing it, and only execution produces content.

Google is the exception. Gemini reads through Googlebot's infrastructure, which does render JavaScript, with a delay. AppleBot renders too. So a client-side rendered site can rank perfectly well in Google, appear in Google's AI Overviews, and remain completely invisible to ChatGPT, Claude and Perplexity at the same time.

That single fact reorganises the whole GEO conversation. If your client's site is a React or Vue single page application without server rendering, no amount of content strategy will fix it. The content does not exist at the moment the crawler reads the page.

The second leak nobody is auditing

The same dataset contains a figure that should alarm anyone running a technical retainer.

ChatGPT's crawler spent 34.82% of its fetches hitting 404 pages. Claude's spent 34.16%. ChatGPT burned a further 14.36% following redirects. For comparison, Googlebot spends 8.22% on 404s and 1.49% on redirects.

Roughly a third of the AI crawl budget arriving at these sites was consumed by URLs that no longer exist. Stale sitemaps, old redirect chains, links from migrations that were never cleaned up. Googlebot has decades of heuristics for working around that mess. The AI crawlers do not, and they are not going to build them for you.

This is not a content problem either. It is a redirect map, a sitemap, and a migration that was signed off as finished.

Meanwhile, the industry's flagship deliverable does nothing

While that is happening, the deliverable most agencies added to their GEO offer this year is llms.txt: a manifest file telling AI systems what your site contains.

MaxAEO tracked 2,400 domains between February and April 2026. 326 of them, 13.6%, published a valid llms.txt. Comparing 240 matched pairs, controlled for category, organic visibility and content volume, the citation rate was 11.8% with the file and 11.6% without. A difference of 0.2 percentage points, comfortably inside the measurement noise band. Fifty eight domains that deployed the file mid window moved less than the control group did.

The server logs explain why. Across 19 sites publishing llms.txt, the major AI crawlers made 41 requests to the file, against roughly 1.1 million requests to actual pages. A separate 90 day log analysis found 84 requests to /llms.txt out of more than 62,100 AI bot visits, about one tenth of one percent.

No major AI company has committed to consuming it. Google's John Mueller compared it to the keywords meta tag. OpenAI's crawler documentation points to robots.txt instead.

Put the two findings side by side and the picture is uncomfortable. Agencies are shipping a file that AI crawlers do not request, on sites those crawlers cannot read.

The build checklist that actually decides citation

None of this is exotic engineering. It is standard production work that GEO conversations skip because they are held between marketers rather than builders.

  • 1. Render the content server side. SSR, static generation or incremental regeneration, so the main content exists in the HTML before any script runs. Verify it correctly: open view-source, not the DevTools element inspector. The inspector shows the DOM after JavaScript has run, which is exactly what the crawler never sees. If your text is not in view-source, it does not exist for ChatGPT.
  • 2. Fix the 404 and redirect surface. Regenerate the sitemap, collapse redirect chains to a single hop, remove dead URLs still being advertised. On a site where a third of AI crawl budget is wasted, this is the cheapest visibility gain available.
  • 3. Front-load the answer. AI systems extract passages, not pages. The direct answer belongs in the first two sentences under its heading, not after four paragraphs of context. This is a writing and layout decision made at build time, in the template.
  • 4. Put structured data in the initial HTML. Article, FAQPage, Organization, Product. If the schema is injected by a tag manager after load, it lands in the same blind spot as everything else. It has to be server rendered like the rest.
  • 5. Check crawler access explicitly. GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended. Many robots.txt files still carry blanket blocks added in 2023 during the scraping panic, and nobody revisited them. Decide deliberately whether you want the traffic, then configure it deliberately.
  • 6. Keep the heading hierarchy honest. One H1, logical H2 and H3 nesting, headings that state what the section answers. Extraction relies on document structure. A page where every heading is a styled div is a page with no structure to extract.
Where design carries as much weight as code

The half of this that gets ignored is layout. If a page answers a question inside a tabbed component, an accordion collapsed by default, or a carousel, that answer is frequently either injected by JavaScript or buried below the extractable region.

Designing for citation means something specific: one question per section, the answer immediately under the heading, comparison data in a real HTML table rather than a styled grid of divs, definitions in prose rather than in an image. None of that makes the page uglier. It does mean the design system has to be built with extraction in mind, which is a decision taken in Figma, not in a content calendar.

What this means commercially

An agency cannot sell GEO it cannot build. That sounds obvious and it is currently being ignored at scale, because the offer is being written by strategy teams while delivery sits with a developer who was never asked about render paths.

The agencies handling this well are doing something simple. They audit before they sell. A short technical pass on the client's site, view-source check, 404 and redirect surface, schema location, robots.txt, heading structure. That audit becomes the first paid deliverable, and it tells you whether the retainer you were about to sell is deliverable at all.

It also protects you. Selling twelve months of GEO on a client-side rendered site is a refund conversation waiting to happen.

Where Genesis Digital Factory fits

We build. That is the whole position. Across twenty years and 85,000 projects, the work has always been the production layer: render strategy, template architecture, structured data, performance budgets, accessibility. AI visibility has quietly turned that layer into the thing that determines whether a client gets cited.

Agencies increasingly send us the technical half of a GEO engagement: the render migration, the redirect cleanup, the schema implementation, the template rebuild. They keep the strategy, the client relationship and the reporting. We do the build, in white label, under their brand.

Frequently asked questions

Does this mean React and Next.js are bad for AI visibility? No. Next.js renders server side by default and is completely fine. The problem is client-side-only rendering, which is a configuration choice, not a framework choice.

We rank well in Google. Are we safe? Not necessarily. Googlebot renders JavaScript, so Google sees your content. ChatGPT, Claude and Perplexity do not. Strong Google rankings and zero AI citations can coexist perfectly well.

Should we remove our llms.txt file? There is no evidence it helps and no evidence it harms. Keep it if you like, but do not sell it as a deliverable, and do not let it stand in for the build work that actually moves citation.

How do we check a site in five minutes? Open view-source on the most important page and search for a sentence from the body copy. If it is not there, the content is invisible to AI crawlers. That one check answers most of the question.

Can this be fixed without a rebuild? Often, yes. Prerendering, a hybrid rendering setup, or moving the key templates to server rendering will usually address it without touching the rest of the stack. A rebuild is sometimes right, but it is rarely the only option.

Want to know whether a client site is actually readable by AI crawlers? Send us one URL. We will run the render check, the 404 and redirect surface, the schema location and the heading structure, and send you the findings with what it would take to fix. No charge, results in 48 hours. See our technical services, or how we work with agency partners in white label.

Genesis Agency Insight: The check we run first on any inherited build takes about thirty seconds. Open view-source, copy a sentence from the visible body copy, search for it in the raw HTML. If it is not there, nothing else in the audit matters until the render path is fixed, because every other finding is downstream of that one.
Genesis Digital Factory Team
Corporate

The Genesis Digital Factory editorial team: designers, developers and digital marketers sharing insights from 20+ years of digital production.