Prooflytics
SEO9 min read

JavaScript CSR Pages Are Invisible to AI Search Crawlers: What to Fix

AI answer engines including ChatGPT, Perplexity, and Google AI Overviews use bots that do not execute JavaScript. If your pages use client-side rendering, AI crawlers see an empty shell -- not your content. Here is how to diagnose the problem and what server-side rendering fixes it.

JavaScript code on screen representing client-side rendering and web development

JavaScript CSR Pages Are Invisible to AI Search Crawlers: What to Fix

AI answer engines (ChatGPT, Perplexity, Google AI Overviews) crawl pages with bots that do not execute JavaScript. A page built with client-side rendering (CSR) -- where the server sends a mostly empty HTML shell and the browser runs JavaScript to populate the content -- appears completely blank to these crawlers. The content quality, the schema markup, the FAQ section, the statistics you spent hours sourcing: none of it is visible. This is not a niche edge case. Most modern marketing websites built with React, Next.js in CSR mode, Angular, or Vue in default configuration have this problem.

Key takeaways

  1. GPTBot (ChatGPT), PerplexityBot, ClaudeBot (Anthropic), and Google-Extended all crawl pages without executing JavaScript -- CSR content is invisible to all of them.
  2. A page that renders content via JavaScript after the initial load returns only an empty HTML shell to AI crawlers, regardless of content quality or schema markup.
  3. Server-side rendering (SSR) or static site generation (SSG) are the two reliable fixes; Next.js App Router with React Server Components is SSR-native and resolves the problem by default.
  4. You can diagnose CSR vs SSR for any page by using curl to fetch the raw HTML and checking whether the primary content appears in the response or is absent.
  5. AI citation potential is zero for CSR-only pages -- fixing rendering is the prerequisite for any other AI search optimization effort, including schema markup, FAQ sections, or key-takeaway formatting.

How AI crawlers read pages

Client-side rendering (CSR): a web page architecture where the server sends a minimal HTML file (often just <div id="app"></div> and JavaScript bundles) and the browser executes JavaScript to build the page content. The content visible to a human reader is generated in the browser after the JavaScript runs.

Server-side rendering (SSR): an architecture where the server processes the page and sends complete HTML with all content already present in the response. The browser receives a fully readable page; JavaScript may then add interactivity through hydration.

Static site generation (SSG): content is rendered to HTML files at build time rather than per-request. The output is complete HTML files served directly, identical in behavior to SSR from a crawler's perspective.

AI crawlers operate like early-generation web scrapers: they send an HTTP request, receive the server's HTML response, and parse that response for content. They do not run a JavaScript engine. What you see when you do View Source on a page in a browser is approximately what an AI crawler sees -- not what the rendered DOM shows after JavaScript has run.

The ICP problem: invisible content despite good optimization

The operational problem this creates for SEOs and content marketers: a team invests in AEO-optimized content (direct-answer leads, FAQ sections, key takeaways, schema markup) and sees no improvement in AI citation rates. Root-cause analysis reveals the page was never readable by the AI crawlers to begin with.

This happens frequently with:

  • Marketing sites built on SPAs (single-page applications) using React, Angular, or Vue in default CSR mode
  • Blog systems built on headless CMS platforms where the frontend rendering layer is CSR-only
  • Landing pages generated by marketing tools that produce JavaScript-heavy output
  • Legacy pages that were migrated to a new JS-based framework without verifying SSR status

What the data shows about AI crawler behavior

By the platform-stable technical finding documented in the Prooflytics knowledge base (sourcing AI Crawlers and JavaScript Rendering from technical AEO research): AI answer engines (ChatGPT / GPTBot, Perplexity / PerplexityBot, Anthropic / ClaudeBot, Google AI Overviews / Google-Extended) crawl pages with bots that do not execute JavaScript.

If a page is built with CSR -- where the server sends a mostly empty HTML shell and the browser runs JavaScript to render content -- AI crawlers see only the empty shell. The actual content is invisible to them.

The decision rule is direct:

  • If a page needs to be cited, quoted, or referenced by AI answer engines: its primary content must be present in the server-rendered HTML (SSR or static HTML)
  • CSR-only pages: invisible to GPTBot, PerplexityBot, ClaudeBot, and Google-Extended -- zero AI citation potential regardless of content quality
  • Hybrid approaches (SSR with client-side hydration) are acceptable provided the primary textual content is in the initial server response

This is a binary issue for AI citation potential. A page is either readable by AI crawlers or it is not. There is no partial credit for good content that arrives after JavaScript executes.

Prooflytics blog pages are built with Next.js App Router using React Server Components, which is SSR-native. The full article content is present in the server response before any JavaScript executes. This is a prerequisite for the AEO optimizations (key takeaways, FAQ sections, direct-answer leads) to have any effect.

Prooflytics

Connect search to the rest of the picture

Every channel in one brief, so search isn't measured in a silo.

14 days free · no credit card

How to diagnose your rendering method

Method 1: View Source in the browser

Right-click any page on your site and select "View Page Source" (not "Inspect Element" -- that shows the rendered DOM). Search for a sentence you know appears in the main body of the page. If it is present in the source: SSR or SSG. If it is absent: CSR.

Method 2: curl the page directly

From a terminal:

curl -A "Mozilla/5.0" https://yoursite.com/your-page | grep -o "<h1>.*</h1>"

If the H1 content appears in the output: SSR or SSG. If the output shows only a shell (<div id="root"></div> or similar): CSR.

Method 3: Disable JavaScript in Chrome DevTools

Open DevTools (F12), go to Settings, find "Disable JavaScript" under the Debugger section, then reload the page. If the page content disappears or shows a blank page: CSR. If the content remains fully readable: SSR or SSG.

Method 4: Check Google Search Console's URL Inspection tool

For any URL, the Crawled As Googlebot view in URL Inspection shows what Googlebot saw when it crawled the page. If the content section shows less text than the rendered page, the page has rendering issues that affect Google -- and the same issue affects AI crawlers.

What rendering method to use

Next.js App Router (recommended for new builds): Server Components are the default. Every component that is not explicitly marked with "use client" renders on the server. Content in Server Components appears in the HTML response. This is the pattern Prooflytics uses for its blog and marketing pages.

Next.js Pages Router with getServerSideProps or getStaticProps: SSR and SSG respectively. Both produce complete HTML responses. getStaticProps (SSG) is preferred for content that does not change per-request (blog posts, landing pages) because it is faster and does not require server computation per request.

React without Next.js: CSR by default. Adding a rendering layer (React DOM server-side rendering) or switching to a meta-framework (Next.js, Remix, Gatsby) is required to serve content in the initial HTML response.

Vue.js / Angular: CSR by default. Nuxt.js (Vue) and Angular Universal provide SSR/SSG options. The same principle applies: content must be in the initial server response to be readable by AI crawlers.

Headless CMS with separate frontend: depends entirely on the frontend rendering layer. The CMS being headless does not determine rendering behavior -- the frontend framework does. A Contentful + Next.js setup with getStaticProps is SSG (readable by AI crawlers). A Contentful + React CRA setup is CSR (invisible to AI crawlers).

How to fix a CSR page without a full rebuild

If migrating to SSR is not immediately feasible, three partial mitigations provide some improvement:

Prerendering (dynamic rendering): a proxy layer (Prerender.io, Rendertron) detects bot user-agents and serves a pre-rendered HTML snapshot instead of the CSR shell. This is a workaround, not a solution -- it requires correct bot detection and may produce stale snapshots. It does not handle AI real-time browsing.

Static export for key pages: if only a subset of pages need AI visibility (blog posts, landing pages), export those pages as static HTML even if the rest of the site uses CSR. Most frameworks support hybrid rendering where individual routes can be statically generated.

Dynamic meta tags with content summary in static HTML: as a minimum viable approach, ensure the most important content (H1, first paragraph, FAQ section) is rendered in the initial HTML response even if secondary content loads via JavaScript. This requires server-side template logic to inject the primary content before the JavaScript bundle loads.

Bottom line

  • AI crawlers do not execute JavaScript; CSR pages are invisible to GPTBot, PerplexityBot, ClaudeBot, and Google-Extended regardless of content quality.
  • Diagnose your rendering method with View Source or curl -- if your content is absent from the raw HTML, fix the rendering before optimizing anything else.
  • Next.js App Router with Server Components is the default-correct choice for new builds; it is SSR-native with no additional configuration required.
  • For existing CSR sites: prerendering services provide partial mitigation; static export of key pages provides stronger coverage for content-heavy URLs.
  • No other AEO optimization (key takeaways, FAQ schema, direct-answer leads) has any effect on a CSR page -- rendering is the prerequisite, not a finishing step.
  • You can read independent reviews of Prooflytics on G2 and compare it to alternatives in the marketing analytics category.

Frequently asked questions

Why do AI crawlers not execute JavaScript?+

AI crawlers are designed for high-volume crawling at scale. Executing JavaScript requires a full browser engine (Chromium-level compute) per page. At the scale AI companies need to crawl billions of pages, running JavaScript on every request is computationally impractical. Google can afford headless Chrome rendering at scale because it has the infrastructure; most AI search companies use simpler HTTP-request-based crawlers that do not support JS execution.

Does Google also have trouble with CSR pages?+

Google's Googlebot does execute JavaScript, but with a delay. Google uses a two-pass crawl: first fetching the raw HTML, then queuing the page for JavaScript rendering (which may happen days or weeks later). For AI Overviews specifically, Google-Extended (the AI-training crawler) may or may not use the JavaScript-rendered version. For reliable AI Overview inclusion, SSR is still the safest approach.

Does this affect Perplexity's real-time web search?+

Yes. Perplexity uses a crawling approach that fetches pages at query time for its web search feature. If the page is CSR-only, Perplexity reads the empty shell and cannot cite your content -- even if the query is directly about your topic and your page would otherwise be the best answer. This is distinct from Perplexity's indexed knowledge (which was crawled during training) -- real-time web search is also affected by CSR.

How do I know if my Next.js site is using CSR?+

Next.js with the App Router defaults to Server Components (SSR) unless you add "use client" at the top of a component file. Components marked with "use client" render in the browser -- their content is not in the initial HTML. Check your main page component and layout: if the content is in a Server Component, it is SSR. If it is in a Client Component ("use client"), the content depends on JavaScript execution and is invisible to AI crawlers.

Can schema markup help AI crawlers if the page is CSR?+

No. Schema markup in <script type="application/ld+json"> blocks embedded in the JavaScript bundle is invisible to AI crawlers for the same reason as body content -- it requires JavaScript execution to appear in the DOM. Schema markup placed directly in the server-rendered HTML (in the <head> section of the server response) is readable. If your site is CSR, schema markup in the JS bundle provides zero AI visibility benefit.

Prooflytics

Connect search to the rest of the picture

Every channel in one brief, so search isn't measured in a silo.

14 days free · no credit card

Continue reading

SEO· 9 min read

Mobile-First Indexing: Why Content Hidden on Mobile Is Missing from Google's Index

Since 2023, Google crawls and ranks all sites using the mobile version of the page. Content that exists on desktop but is hidden or absent on mobile is not indexed. If your rankings underperform relative to your content investment, a desktop/mobile content parity gap may be the cause. Here is how to diagnose and fix it.

SEO· 9 min read

Robots.txt vs Noindex: What Each Controls and When to Use Which

Robots.txt blocks crawlers from reading a page. Noindex prevents a page from appearing in search results. They are not interchangeable -- using the wrong one can cause pages to surface in SERPs despite your intent. This guide clarifies which control to use for SEO, AI crawlers, and staging environments.

SEO· 9 min read

llms.txt: How to Make Your Marketing Site Readable by AI Agents

Google added llms.txt to Lighthouse agentic audits in May 2026, making it a measurable signal for how well sites expose their content to AI crawlers. llms.txt is a plain-text file at the root of your domain that tells AI agents what content is available, how to use it, and what is off-limits -- a robots.txt for the agentic web. Here is what to put in it.

Strategy· 8 min read

AI Visibility in 2026: Why Transactions Are the New Citations

Late June 2026, Chrome auto-browse rolls out to 200 million Android devices. AI visibility is no longer about whether your site gets cited in ChatGPT or Perplexity. It is about whether an agent can complete a booking or purchase on your site without human help. Eight specific failure modes will silently block those transactions.