What Is Client-Side Rendering?

Flavio AmielWritten byFlavio Amiel Founder, Roborank
Updated July 15, 2026

Client-side rendering (CSR) is an approach where the server sends a near-empty HTML shell plus JavaScript, and the browser builds the page’s content by modifying the DOM after the script runs. The visible page exists only after JavaScript executes, so search engines must render the page themselves before they can see and index that content.

Key Takeaways

How Client-Side Rendering Works

In client-side rendering, defined by the Chrome team as “rendering an app in a browser, using JavaScript to modify the DOM,” the server’s job is minimal. It returns a bare HTML document — often little more than a <div id="root"> and a <script> tag — and the browser does the rest. It downloads the JavaScript bundle, parses and executes it, fetches any data the app needs from an API, and only then constructs the DOM the user sees. The page you view is assembled in place, milliseconds or seconds after the HTML arrives.

This model is the default for single-page applications built with frameworks like React, Angular, and Vue. It has real strengths: after the initial load, navigation between views feels instant because the app updates the DOM without round-trips to the server, and the server itself stays cheap because it isn’t generating HTML per request. The tradeoff is front-loaded. Time to first byte is fast, but First Contentful Paint is slow, because a user stares at a blank shell until the bundle finishes running. On low-end mobile devices, a heavy bundle also pushes out Time to Interactive, the point at which the page actually responds to input.

For search, CSR reframes the whole indexing question. The content a crawler wants doesn’t exist in the server response — it exists only after the crawler renders the page. Googlebot does render JavaScript, but in a deferred queue, which introduces both delay and the possibility that the render comes back incomplete. That is the entire reason JavaScript SEO exists as a discipline.

Why CSR Complicates Indexing

Three failure modes recur with client-side rendered sites:

Example of Client-Side Rendering

The canonical documented account of CSR and its costs comes from “Rendering on the Web,” the reference article by Google engineers Addy Osmani and Jason Miller, first published in February 2019 and maintained since. It lays out the rendering spectrum from fully server-rendered to fully client-rendered and is explicit about where CSR sits. The article defines client-side rendering as building the app in the browser via JavaScript, and it documents the specific performance shape: CSR tends toward a fast TTFB but a slower FCP and, with large bundles, a worse TTI, because “getting large JavaScript payloads” to run is what gates interactivity.

The article’s SEO framing is the load-bearing part for practitioners. It notes that client-side rendered content “works but needs testing,” because crawlers have limitations, while server-rendered HTML “delivers a complete experience to crawlers.” That is not a company case study with invented numbers; it is the documented consensus position from the team that builds Chrome, and it is why the same guidance recommends moving work back toward the server — through server-side rendering, static rendering, or hydration — whenever content needs to be reliably discoverable. The generalizable lesson is simple: CSR optimizes for the returning, JavaScript-capable user, and search engines are neither of those things by default.

The thing people get wrong

The trap with client-side rendering isn’t that Google can’t handle it — it’s that CSR makes every page depend on a second, deferred event that you don’t control the timing of. In server-rendered HTML the content is a fact the moment the response arrives. In CSR the content is a promise that the browser, or the crawler, will run your bundle successfully and soon. Most of the time that promise is kept and nobody notices. The failures are quiet and specific: a slow render queue that indexes the empty shell, a bundle that errors on Googlebot’s Chromium, an API call blocked in robots.txt so the render comes back hollow. I don’t tell teams to never use CSR — I tell them that if the content matters for search, don’t make its existence conditional on JavaScript you can’t guarantee runs. Put the important markup in the initial response and let JavaScript enhance it.

Client-Side Rendering vs Server-Side Rendering

Client-Side Rendering Server-Side Rendering
Where HTML is built In the browser, via JavaScript On the server, per request
What the server sends A near-empty shell plus a JS bundle Fully-formed HTML
First Contentful Paint Slower — waits for JS to run Faster — content arrives ready
Time to first byte Faster Slower — server does the work
Crawler visibility Requires the crawler to render Content is in the response
Main cost Indexing risk, slow FCP on mobile Higher server compute

The two are ends of a spectrum, not enemies. Many production sites use server-side rendering or prerendering for the first paint and then hydrate into a client-side app for subsequent interactions, capturing most of the SEO safety of SSR with the navigation feel of CSR.

Frequently Asked Questions

Is client-side rendering bad for SEO?
Not inherently, but it adds risk. CSR content only appears after a search engine renders the page, which Googlebot does in a deferred queue. If rendering is delayed, a script errors, or a resource is blocked, the crawler may index an empty shell. Server-side or static rendering avoids that dependency.
What is the difference between CSR and SSR?
In client-side rendering the server sends a minimal HTML shell and the browser builds the content with JavaScript. In server-side rendering the server produces the full HTML and sends it ready to display. SSR shows content sooner and is safer for crawlers; CSR shifts the work to the browser.
How do I make a client-side rendered site indexable?
Ensure real links use href attributes, keep canonical and robots tags in the initial HTML, avoid returning soft errors with a 200 status, and don’t block script or API resources in robots.txt. Better still, add server-side or static rendering so key content ships in the HTML.
Does client-side rendering affect Core Web Vitals?
It can. CSR often has a fast time to first byte but a slower First Contentful Paint because nothing shows until JavaScript runs, and large bundles push out Time to Interactive on mobile. These delays can hurt loading and interactivity metrics if the bundle isn’t tightly managed.

The Bottom Line

Client-side rendering hands the browser an empty stage and a script, and trusts it to build the scene. It keeps servers cheap and interactions snappy once loaded, but it makes the content conditional on JavaScript running — for users on slow devices and for crawlers rendering in a queue. When search visibility matters, the safer pattern is to deliver meaningful HTML from the server and use client-side JavaScript to enhance it, not to produce it from scratch.

Sources

  1. Rendering on the Web (Osmani & Miller)web.dev (Google)
  2. Understand the JavaScript SEO basicsGoogle Search Central

Rank & Cash — the weekly SEO breakdown

One practical teardown a week on ranking in search and getting cited by AI. No fluff.