Server-side renderingSSR

nounalso called JavaScript rendering or prerendering

Definition

Server-side rendering (SSR) is the practice of generating a page’s full HTML on the server before sending it, so crawlers that don’t run JavaScript — which includes most AI crawlers — can read the content in the first response.

Updated 6 min read6 cited sources

On this page8 sections

Why it matters for founders and small teams

If your site is a JavaScript app, Google may still read your content while ChatGPT, Claude and Perplexity see an empty page — and nothing gets cited from an empty page. For a small team this is the rare technical fix with an outsized payoff: one rendering change can make every article you’ve already published readable to the AI engines your buyers ask.

How does server-side rendering work?#

Server-side rendering works by running the page’s code on the server, per request or at build time, so the HTML that arrives already contains the text, links and metadata — instead of an empty shell that JavaScript fills in later in the browser.

In a client-side rendered (CSR) app, the server sends a near-empty HTML document plus a bundle of JavaScript; the browser runs the script, fetches the data and builds the page. A person never notices. A crawler that reads only the first response sees the shell. Server rendering moves that work to the server, and the browser then hydrates the page — attaches the JavaScript that makes it interactive — without changing what the HTML already said.

ApproachWhen the HTML is builtWhat a non-rendering crawler sees
Client-side rendering (CSR)In the browser, after JavaScript runsAn empty shell, often a single <div>
Server-side rendering (SSR)On the server, for each requestThe full page
Static generation (SSG)At build time, served as filesThe full page
Incremental regenerationAt build time, then rebuilt on a schedule or on changeThe full page, as of the last rebuild
Prerendering for botsBy a headless browser, cached and served to crawlersThe full page, if the cache is current

Frameworks such as Next.js, Nuxt, SvelteKit, Astro and Remix support server rendering or static generation out of the box, and traditional platforms like WordPress and Shopify build HTML on the server. The risk sits mainly with single-page apps built on plain React, Vue or Angular, and with pages that load their main copy through a widget or API call after the page arrives.

Do AI crawlers render JavaScript?#

Most AI crawlers do not render JavaScript: OpenAI’s, Anthropic’s and Perplexity’s bots read the raw HTML response, so text that appears only after scripts run is invisible to them. Googlebot, which also feeds Gemini and AI Overviews, does render JavaScript, and so does Applebot.

None

of the major AI crawlers executed JavaScript in a study of Vercel's network — OpenAI, Anthropic, Meta, ByteDance and Perplexity included

Vercel & MERJ, Dec 2024

23.84%

of Claude's crawler requests downloaded JavaScript files it then didn't run (ChatGPT's: 11.50%)

Vercel & MERJ, Dec 2024

~28%

GPTBot, Claude, Applebot and PerplexityBot's combined fetches as a share of Googlebot's volume

Vercel & MERJ, Dec 2024
EngineCrawler that reads your pageRuns JavaScript?
Google Search, AI Overviews, AI Mode, GeminiGooglebotYes — queued, with a 2 MB HTML limit
ChatGPT searchOAI-SearchBot, ChatGPT-UserNo — undocumented by OpenAI, none observed
ClaudeClaude-SearchBot, Claude-UserNo — Anthropic’s fetch tool doesn’t support JavaScript-rendered sites
PerplexityPerplexityBot, Perplexity-UserNo — failed on client-rendered pages in tests
AppleApplebotYes — a browser-based crawler

In August 2025 Glenn Gabe tested ChatGPT, Claude and Perplexity against client-rendered URLs and all three failed to read them, while server-rendered pages worked. Google hedges too: its own JavaScript guide says server-side or pre-rendering “is still a great idea” because “not all bots can run JavaScript.” See AI crawlers for what each bot is for.

Worked example

The Raw-HTML Visibility Ratio

A quick way to put a number on how much of a page non-rendering AI crawlers can read: compare the words in the raw HTML with the words a reader sees, then check the facts that matter. The inputs below are illustrative, for a fictional project-management app called Plannora — run the same steps on your own templates.

  1. 1

    Count the words a reader sees

    Open Plannora’s pricing page in a browser and count the visible body copy: plan names, prices, the feature list and the FAQ.

    1,200 words

  2. 2

    Count the words in the raw HTML

    Fetch the page with curl and strip the tags. The shell holds the navigation, the footer and a loading message; the pricing table and FAQ arrive by JavaScript after load.

    180 words

  3. 3

    Check the facts a buyer verifies

    Search the raw HTML for five facts: starting price, free-tier limit, per-seat price, trial length and refund policy. Only the refund policy, linked in the footer, is there.

    1 of 5 facts

  4. =

    Visibility ratio

    180 ÷ 1,200 — the share of the page ChatGPT, Claude and Perplexity can read. The fact ratio is 20%.

    15%

The result: Anything under 100% on a page you want cited is a rendering bug, not a content problem. Moving Plannora’s pricing template to server rendering lifts both ratios to 100% without changing a word of copy — and only then does the page compete on what it says. Run the check once per template, and again after every front-end release.

Free to use and adapt. If you cite it, link to rankbox.xyz/glossary/server-side-rendering.

Server-side rendering vs client-side rendering: what's the difference for SEO?#

Client-side rendering asks every crawler to execute JavaScript before it can read the page, while server-side rendering hands over finished HTML. For Google the gap is speed and reliability, because rendering is queued; for most AI engines it is the difference between being readable and not existing.

Googlebot crawls a URL, then queues it for rendering in an evergreen, headless Chromium. Google says a page “may stay on this queue for a few seconds, but it can take longer than that,” and the renderer is stateless: it clears local storage and session data between requests. Copy that depends on a cookie-banner click, a logged-in state or a scroll event may never appear to it.

Two limits apply even to Google. Googlebot fetches only the first 2 MB of a page’s HTML, and bytes past the cut-off are “not fetched… not rendered… not indexed.” And a noindex in the initial HTML can stop rendering entirely, so JavaScript written to remove it may never run.

The practical split: keep interactive widgets client-side if you like, but make sure the server HTML already carries everything a crawler needs — the title tag, meta description, canonical tag, robots meta, the main text, internal links as real <a href> elements, visible dates and any JSON-LD.

How do you check whether a page is server-side rendered?#

Check server-side rendering by fetching the raw HTML the way a non-rendering crawler does — with curl or View Source, not the browser’s inspector — and searching it for a sentence from the page’s main content. If the sentence is missing, AI crawlers can’t see it either.

bash
# What ChatGPT's search crawler receives. Use a real bot user agent:
# a firewall can serve bots something different from browsers.
curl -s -A "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; OAI-SearchBot/1.4; +https://openai.com/searchbot" \
https://yoursite.com/pricing | grep -c "Plans start at"
 
# The same check as Claude's live fetcher
curl -s -A "Claude-User" https://yoursite.com/pricing | grep -c "Plans start at"
 
# 0 = the text is rendered client-side, or a WAF served a challenge
  1. Use View Source, not Inspect. The element inspector shows the page after JavaScript ran; view-source: shows what a crawler receives.
  2. Disable JavaScript in your browser’s developer tools and reload. What’s left is roughly what a non-rendering bot reads.
  3. Compare with Google’s view in Search Console: URL Inspection → View crawled page shows the rendered HTML Googlebot indexed.
  4. Test each template, not one page. Blog posts, pricing, docs and comparison pages often take different rendering paths.

Common mistakes with server-side rendering#

The most common server-side rendering mistakes are assuming Google’s rendering covers every engine, serving prerendered pages only to bots, and server-rendering the body while still injecting canonicals, schema and links with JavaScript.

Myth

Google renders JavaScript, so SSR no longer matters.

Reality

Google does, with a queue and a 2 MB limit. ChatGPT, Claude and Perplexity don’t — so a client-rendered page can rank on Google and still never be cited by them.

Myth

If the body text is in the HTML, the job is done.

Reality

Canonicals, robots meta, JSON-LD and navigation added by a script or tag manager are just as invisible to non-rendering bots. Google can read injected JSON-LD; a bot that runs no scripts can’t.

Myth

A server-rendered page is always what the bot gets.

Reality

A CDN challenge or bot-protection rule can hand AI crawlers an interstitial instead. Test with their user agents, and check your firewall’s AI-bot settings.

Myth

Rendering fixes are a one-time project.

Reality

A redesign, a new CMS block or a framework upgrade can quietly move copy back to the client. Re-run the raw-HTML check after every front-end release.

Sources

  1. 1.Understand the JavaScript SEO basicsGoogle Search Central · developers.google.com
  2. 2.Dynamic rendering as a workaroundGoogle Search Central · developers.google.com
  3. 3.Inside Googlebot: demystifying crawling, fetching, and the bytes we processGoogle Search Central Blog · developers.google.com
  4. 4.Web fetch toolClaude Developer Platform · platform.claude.com
  5. 5.The rise of the AI crawlerVercel · vercel.com
  6. 6.AI search and JavaScript renderingGSQi (Glenn Gabe) · gsqi.com

Know someone who’d find this useful? Send it their way.

Written by

Rankbox Team

The team behind Rankbox. We study how ChatGPT, Perplexity, Gemini, and Google AI Overviews choose their sources, and publish what we learn so you can put it to work.

See which AI answers cite you today

Enter your site to see how often ChatGPT, Perplexity, Gemini, and Google cite your brand, and exactly what to publish next.

No credit card required · Free 7-day trial