Technical Setup

SSR vs Client-Side Rendering: Impact on AI

Published: 2026-03-2211 min readv1.0

Key Takeaways

  • Most AI crawlers (GPTBot, PerplexityBot, ClaudeBot) do not execute JavaScript — they see only the raw HTML your server delivers
  • Server-side rendering (SSR) delivers complete content in the initial HTML response, making it immediately visible to all AI crawlers
  • Client-side rendering (CSR) delivers an empty HTML shell — AI crawlers that cannot run JavaScript see no content at all
  • Use SSR or static site generation (SSG) for all content pages you want AI to discover and cite
  • Hybrid rendering is the practical ideal: SSR for content pages, CSR only for interactive features AI does not need to see

Can AI crawlers see your JavaScript content? Run a free scan to check what AI bots actually see on your pages.

The Rendering Problem for AI Crawlers

When an AI crawler like GPTBot requests a page from your website, it receives an HTTP response containing HTML. What happens next depends on your rendering strategy:

With server-side rendering, the HTML response already contains your complete page content — headings, paragraphs, images, structured data, everything. The AI crawler reads this HTML and understands your content immediately.

With client-side rendering, the HTML response contains a minimal shell — typically a <div id="root"></div> — and a JavaScript bundle. The actual content is generated when the browser executes the JavaScript. The problem: most AI crawlers do not execute JavaScript. They see the empty shell and move on.

This is not a minor issue. A website built entirely with client-side rendering (a common pattern with React, Vue, or Angular SPAs) can be completely invisible to ChatGPT, Perplexity, Claude, and Copilot. The site looks beautiful to human visitors but is an empty page to AI.

For a deep dive into JavaScript rendering issues, see our JavaScript rendering and AI crawlers guide.

SSR: What AI Crawlers See

Server-side rendering generates the complete HTML on the server before sending it to the client. When an AI crawler requests an SSR page, the server processes the request, fetches any necessary data, renders the component tree to HTML, and sends the full document.

What GPTBot sees with SSR

<!DOCTYPE html>
<html>
<head>
  <title>Best CRM Tools for Startups in 2026</title>
  <meta name="description" content="Compare the top 10 CRM tools...">
  
</head>
<body>
  
    <h1>Best CRM Tools for Startups in 2026</h1>
    <p>Choosing the right CRM can make or break a startup's sales process...</p>
    
  
</body>
</html>

Every heading, paragraph, list item, table, and structured data element is present in the initial HTML. The AI crawler can immediately extract, understand, and potentially cite this content.

SSR advantages for AI SEO

  • Complete content delivery — All text, structure, and metadata available without JavaScript
  • Faster response times — No client-side rendering delay; content available in the first response
  • Schema markup visible — JSON-LD structured data is in the HTML, not injected by JavaScript
  • Consistent with semantic HTML — Server-rendered HTML typically follows better semantic HTML patterns

CSR: The AI Visibility Gap

Client-side rendering defers HTML generation to the browser. The server sends a minimal HTML document with a JavaScript bundle, and the browser builds the page content by executing the script.

What GPTBot sees with CSR

<!DOCTYPE html>
<html>
<head>
  <title>My App</title>
</head>
<body>
  <div id="root"></div>
  <script src="/bundle.js"></script>
</body>
</html>

This is what most AI crawlers see — an empty page. No content, no headings, no structured data, no information to cite. Your 3,000-word product comparison guide exists only after JavaScript execution, which the AI crawler cannot perform.

The Google exception

Googlebot is the notable exception. Google has invested heavily in a JavaScript rendering service (WRS) that can execute JavaScript and index the resulting content. However, this rendering happens in a separate queue with potential delays. For AI Mode specifically, Google may prefer pre-rendered content over content that requires its rendering pipeline.

Which AI crawlers execute JavaScript?

| Crawler | Executes JavaScript | Impact | |---|---|---| | GPTBot | No | CSR pages are invisible | | OAI-SearchBot | No | CSR pages are invisible | | PerplexityBot | No | CSR pages are invisible | | ClaudeBot | No | CSR pages are invisible | | Googlebot | Yes (delayed) | CSR pages eventually indexed | | Bingbot | Limited | CSR pages may be partially visible | | Applebot | Limited | CSR pages may be partially visible |

Rendering Comparison Table

| Factor | SSR | CSR | SSG | ISR | |---|---|---|---|---| | AI crawler visibility | Excellent | None/poor | Excellent | Excellent | | Initial HTML content | Complete | Empty shell | Complete | Complete | | JavaScript required | For interactivity only | For all content | For interactivity only | For interactivity only | | Response speed | Fast (server-rendered) | Slow (requires JS + API) | Fastest (pre-built) | Fast (cached) | | Content freshness | Real-time | Real-time | Build-time | Configurable | | Server load | Higher (renders per request) | Lower (static files) | Lowest (pre-built) | Medium (periodic) | | Best for | Dynamic content pages | App dashboards | Blog posts, docs | Product pages, listings |

SSG = Static Site Generation (HTML built at deploy time) ISR = Incremental Static Regeneration (static pages rebuilt on a schedule)

What do AI crawlers actually see on your site?

AImetrico renders your pages as AI bots see them — with and without JavaScript.

See What AI Sees

Free scan shows JavaScript-dependent content issues

Framework-Specific Guidance

Next.js (React)

Next.js supports all rendering modes. For AI SEO:

  • Use getServerSideProps for pages with frequently changing content (product pages, pricing)
  • Use getStaticProps / generateStaticParams for content that changes infrequently (blog posts, docs)
  • Use ISR (revalidate option) for pages that need periodic updates without full rebuilds
  • Avoid client-only data fetching with useEffect for any content you want AI to see

Nuxt.js (Vue)

Nuxt provides SSR by default:

  • Use useAsyncData or useFetch in setup for server-side data fetching
  • Use nuxt generate for static site generation
  • Enable ISR with routeRules for hybrid approaches
  • Avoid onMounted data fetching for SEO-critical content

Angular (with Angular Universal)

  • Use Angular Universal for server-side rendering
  • Use @angular/ssr (Angular 17+) for modern SSR integration
  • Without Angular Universal, Angular apps are purely CSR and invisible to AI crawlers

Astro

Astro is SSR-first by design — HTML is rendered at build time by default:

  • Content components render to static HTML automatically
  • Interactive "islands" use client-side JavaScript only where needed
  • Excellent default behavior for AI SEO

Plain React / Vue / Svelte SPAs

If you are using a bare framework without SSR (e.g., Create React App):

  • Add SSR using a framework like Next.js, Remix, or Nuxt
  • Use pre-rendering to generate static HTML for content pages
  • As a last resort, implement dynamic rendering (see next section)

Static Site Generation (SSG)

Static site generation is the gold standard for AI SEO performance. Pages are built as complete HTML files at deploy time, meaning:

  • Zero server rendering time — Pages are served as pre-built files
  • Maximum caching — CDNs serve static files with near-zero latency
  • Complete HTML — All content, schema markup, and metadata baked into the file
  • No JavaScript dependency — Content exists in HTML regardless of JavaScript execution

Use SSG for content that does not change between page views: blog posts, documentation, landing pages, about pages, and knowledge base articles.

For dynamic content (product inventory, real-time pricing), use SSR or ISR instead.

Dynamic Rendering as a Workaround

Dynamic rendering serves pre-rendered HTML to bot user agents while serving the normal CSR experience to human visitors. The server detects the user agent, and if it matches a known bot (GPTBot, PerplexityBot, etc.), it serves a pre-rendered version.

When to use dynamic rendering

Only as a temporary workaround when migrating to SSR is not immediately feasible. Dynamic rendering adds infrastructure complexity and can be flagged as cloaking if the pre-rendered content differs significantly from the client-rendered version.

How it works

  1. Incoming request arrives
  2. Server checks user agent against known bot list
  3. If bot: serve pre-rendered HTML (from a headless browser or pre-render service)
  4. If human: serve normal CSR application

Tools for dynamic rendering

  • Rendertron (open source, by Google)
  • Prerender.io (commercial service)
  • Puppeteer with caching (custom implementation)

Google has stated that dynamic rendering is acceptable but is not a long-term solution. Migrating to SSR or SSG is the recommended path.

Testing What AI Crawlers See

curl test (no JavaScript)

curl -A "GPTBot/1.2" https://yoursite.com/ | grep -c "<p>"

If the paragraph count is zero or very low, your content requires JavaScript and is invisible to AI crawlers.

Compare with and without JavaScript

Use a tool that renders with and without JavaScript and compare the output. If the JavaScript-disabled version shows your content, AI crawlers can see it.

Google's Mobile-Friendly Test

Enter your URL in Google's Mobile-Friendly Test — it renders with JavaScript and shows you the result. Compare this against the raw HTML source to identify content that depends on JavaScript.

For comprehensive testing methods, see our verifying AI crawler access guide.

Frequently Asked Questions

Can AI crawlers execute JavaScript?

Most AI crawlers (GPTBot, PerplexityBot, ClaudeBot) do not execute JavaScript. They see only raw HTML. Googlebot can execute JS but with delays. CSR pages are invisible to most AI crawlers.

Is SSR better than CSR for AI SEO?

Yes. SSR delivers complete HTML to AI crawlers without requiring JavaScript execution. CSR delivers an empty shell. For AI SEO, SSR or static generation is strongly recommended.

Does Next.js work well for AI SEO?

Excellent, when using getServerSideProps or getStaticProps. Client-only pages using useEffect for data fetching will be invisible to most AI crawlers.

What about hybrid rendering approaches?

Hybrid rendering is ideal: SSR/SSG for content pages, CSR only for interactive features. This gives AI crawlers full access to content while maintaining rich interactivity for users.

Can pre-rendering solve CSR problems for AI?

Pre-rendering (SSG) solves the problem completely. Dynamic rendering (serving pre-rendered HTML to bots) is a viable workaround but adds complexity. Full SSR or SSG is preferred.

Is JavaScript hiding your content from AI?

AImetrico checks what AI crawlers actually see on your pages — with and without JavaScript rendering.

Check My Site Free

Trusted by 2,400+ websites

SSR AI SEOclient-side rendering AIserver-side rendering AI crawlersNext.js AI SEOJavaScript rendering AI

Related Articles