Technical SEOIntermediate

Client-side rendering

Client-side rendering builds a page in the browser with JavaScript after a mostly empty HTML shell loads. It can delay or hide content from crawlers.

Also called: CSR

Client-side rendering is a way of building web pages where the server sends a minimal HTML document and a JavaScript bundle, and the browser then fetches data and builds the visible page. Single-page apps built with React, Vue or Angular often work this way by default. For SEO, the risk is that crawlers which do not run JavaScript, or run it later, see an empty or partial page.

How client-side rendering works

The first HTML response contains little more than a root element and script tags. The browser downloads the scripts, runs them, calls APIs for data, and inserts the content into the page. Navigation between pages often happens in the browser too, using the History API instead of new server requests.

<!doctype html>
<html>
  <head><title>Loading...</title></head>
  <body>
    <div id="root"></div>
    <script src="/assets/app.js"></script>
  </body>
</html>

What it means for search and AI crawlers

Google can render JavaScript, but rendering happens in a second step after crawling and depends on the scripts loading and running without errors. Titles, canonicals or noindex tags set by JavaScript may be read later than you expect, and content behind clicks or failed API calls is not seen at all.

Many other crawlers, including several AI crawlers, are reported to fetch HTML without running JavaScript, though vendors do not always document this. For them, a client-rendered page may look empty. Serving the important content in the initial HTML removes that uncertainty.

When client-side rendering is fine

Logged-in app screens, dashboards and settings pages do not need to rank, so client-side rendering suits them. Problems arise when marketing pages, docs or blog posts are built the same way because they share a codebase with the app. The usual fix is to render public pages on the server or at build time and keep CSR for the product itself.

Example

A docs site that looked empty to crawlers

Graphwick, an API monitoring tool, builds its docs as a React single-page app. URL Inspection's rendered HTML shows the content, but a plain HTML fetch returns only an empty div, and several AI assistants cannot quote the docs. Moving the docs to static site generation puts the full text in the first response without changing how the pages look.

Common mistakes

Setting the canonical or noindex with JavaScript only

Put indexing signals in the server HTML. If the raw HTML says noindex, Google may never render the page to see a script removing it.

Using click handlers instead of links

Crawlers follow a elements with href attributes. Navigation built on buttons or onClick handlers can leave pages undiscovered.

Questions

No. It is not a penalty. The risk is practical: content may be indexed late, partially or not at all if rendering fails, and crawlers that skip JavaScript see less.

Compare View Source (the raw HTML) with the rendered HTML shown in Search Console's URL Inspection tool. Anything that only appears in the rendered version depends on JavaScript.

Know the terms. Now win the searches.

We find the searches your buyers make, then build, publish and improve the pages that win them.