CSR vs SPA for SEO: Why Client-Side Rendering Hurts Rankings
Client-Side Rendering and Single Page Applications hurt SEO. Learn why CSR and SPA sites struggle with Google indexing and what to do instead.

Quick Answer
Client-Side Rendering (CSR) and Single Page Applications (SPAs) hurt SEO because they send empty HTML to search engines. Google must run JavaScript to see your content, which causes indexing delays, missing pages, and poor Core Web Vitals. Server-side rendering or static site generation solves these problems by delivering complete HTML on the first request.
If your website is built with a JavaScript framework like React, Vue, or Angular and you deployed it as a CSR or SPA, there is a good chance Google is not seeing all of your content. The SEO impact of Client-Side Rendering is well documented, and it remains one of the most common technical SEO mistakes in 2026. This post breaks down exactly why CSR and SPA architectures cause ranking problems and what you can do about it.
Not sure if your site has CSR indexing issues? We can run a free check and show you exactly what Google sees.
Key Takeaways
- CSR sends an empty HTML shell to search engines, forcing them to render JavaScript
- SPAs are an architecture pattern that almost always uses CSR by default
- Google's two-wave indexing creates hours or weeks of delay for CSR pages
- SSG and SSR produce complete HTML that search engines index immediately
- Core Web Vitals suffer under CSR due to large JavaScript bundles and slow paint times
What CSR and SPA Actually Mean for SEO
These two terms get used interchangeably, but they describe different things. Client-Side Rendering (CSR) is a rendering strategy. The server sends a minimal HTML file (usually just a <div id="root"></div> tag), and the browser downloads JavaScript that builds the entire page. Nothing is visible until the JS finishes running.
A Single Page Application (SPA) is an architecture pattern. Instead of loading a new HTML page for every URL, the browser handles all routing internally. Clicking a link swaps content without a full page reload. SPAs almost always use CSR as their default rendering method.
The SEO problem is the same for both: search engine crawlers receive an empty HTML document. There are no headings, no paragraphs, no meta descriptions, no structured data, and no internal links in the raw response. Everything depends on JavaScript execution.
Why Both Are Bad for Search Rankings
The core issue is that Googlebot and other crawlers see a blank page on their first pass. Here is what goes wrong:
Empty HTML means no content to index. The raw HTML of a CSR page contains almost nothing. Title tags may be hardcoded, but meta descriptions, Open Graph tags, and structured data are often injected by JavaScript. If the crawler does not execute JS, those elements do not exist.
JavaScript dependency creates a single point of failure. If any API call fails, if a third-party script throws an error, or if the JS bundle exceeds the render timeout, the page stays blank. Google gives each page a limited rendering budget.
Crawl budget gets wasted. Google allocates a crawl budget to every site. When Googlebot visits a CSR page and gets empty HTML, it still uses crawl budget. The rendering step happens later in a separate queue. For large sites, this means Google may crawl thousands of pages but only render a fraction of them.
Core Web Vitals suffer. CSR forces the browser to download, parse, and execute a large JavaScript bundle before any content appears. This results in poor First Contentful Paint (FCP) and Largest Contentful Paint (LCP). Since Google uses Core Web Vitals as ranking signals, slow paint times directly hurt your position.
If you are concerned about your site's performance and Core Web Vitals, these rendering problems are often the root cause.
Want to know if CSR is costing you rankings? Book your free session and get 3 months free and we will show you the gaps.
How Google Handles JavaScript Rendering
Google uses a two-wave indexing process for JavaScript-heavy pages:
Wave 1: HTML crawl. Googlebot fetches the raw HTML. For server-rendered pages, this HTML contains all content, and indexing happens immediately. For CSR pages, the HTML is nearly empty. Google notes the page needs rendering and moves on.
Wave 2: JavaScript rendering. Google places the page in a render queue. A headless Chromium instance executes the JavaScript and captures the final DOM. This rendered HTML is then sent back to the indexing pipeline.
The problem is the gap between Wave 1 and Wave 2. That gap can be hours, days, or even weeks depending on how busy the render queue is and how large your site is. During that entire period, your content is invisible in search results.
Real-World SEO Problems Caused by CSR and SPA
Here are the most common issues businesses encounter with CSR/SPA sites:
- Missing pages from Google's index. You publish 200 pages but only 40 appear in Search Console. The rest were never rendered.
- Blank or generic meta tags. The title says "React App" and the description is empty because JavaScript did not run.
- No structured data. FAQ schema, product schema, and organization schema injected by JS are invisible to the initial crawl.
- Broken internal link discovery. Google finds links by parsing HTML. If your navigation and internal links are generated by JavaScript, the crawler may miss entire sections of your site.
- Stale content in search results. Google caches the rendered version. If your content changes but Google does not re-render the page, search results show outdated information.
These are not edge cases. They are the default behavior of CSR/SPA sites that do not implement server-side rendering. Our indexing and monitoring service catches exactly these kinds of gaps before they become ranking problems.
CSR vs SPA vs SSG vs SSR: SEO Comparison
| Metric | CSR | SPA (default) | SSG | SSR |
|---|---|---|---|---|
| Crawlability | Poor (empty HTML) | Poor (empty HTML) | Excellent (full HTML) | Excellent (full HTML) |
| TTFB | Fast (tiny HTML) | Fast (tiny HTML) | Very fast (static files) | Moderate (server processing) |
| FCP / LCP | Slow (JS must execute) | Slow (JS must execute) | Fast (HTML ready) | Fast (HTML ready) |
| Indexing Speed | Days to weeks | Days to weeks | Immediate | Immediate |
| Core Web Vitals | Poor (large bundles) | Poor (large bundles) | Excellent (minimal JS) | Good (hydration cost) |
| Structured Data | JS-dependent | JS-dependent | In source HTML | In source HTML |
| Internal Links | JS-dependent | JS-dependent | In source HTML | In source HTML |
| Best For | Dashboards, apps | Dashboards, apps | Blogs, marketing sites | Dynamic content sites |
What to Use Instead: SSG, SSR, and Hybrid Approaches
The solution to CSR SEO problems is moving rendering to the server or the build step. Here are your options:
Static Site Generation (SSG) pre-renders every page to HTML at build time. The result is a collection of static files served from a CDN. No server processing happens at request time. This is the fastest and most SEO-friendly approach for content that does not change frequently.
Server-Side Rendering (SSR) generates HTML on the server for every request. This works well for pages with dynamic data that changes frequently, like search results or personalized content. The trade-off is higher server costs and slightly slower TTFB compared to SSG.
Incremental Static Regeneration (ISR) is a hybrid approach. Pages are pre-rendered at build time, but they can be regenerated in the background after a set time interval. This gives you the speed of SSG with the freshness of SSR.
Hybrid rendering lets you mix strategies within the same application. Use SSG for blog posts and landing pages. Use SSR for product pages with live inventory. Use CSR only for logged-in dashboard features.
How vaza.ai's Approach Solves These Problems
At vaza.ai, we build with Next.js using static export. Every page is pre-rendered to complete HTML at build time. When Googlebot (or any AI search engine) crawls the site, it receives full content, structured data, meta tags, and internal links in the initial response. No JavaScript execution is required for indexing.
This approach, combined with Cloudflare Pages CDN delivery, produces sub-second TTFB globally and excellent Core Web Vitals scores. Our modern website service uses this architecture by default for every client site.
The static HTML also means AI search engines like ChatGPT, Perplexity, and Gemini can extract and cite your content without running a browser. As AI-powered search grows, having crawlable HTML becomes even more important.
When CSR and SPA Are Acceptable
CSR is not always wrong. It is the right choice when SEO does not matter for a specific page:
- Internal admin dashboards that only employees access
- Logged-in application interfaces behind authentication
- SaaS product UIs where users arrive through login, not search
- Interactive tools embedded within a server-rendered page (hybrid approach)
The key rule: if users find the page through a search engine, it needs server-rendered HTML. If users find the page through a login screen or a direct link, CSR is fine.
- CSR and SPA send empty HTML to search engines, causing indexing delays and missing content
- Google's two-wave indexing means CSR pages may wait days or weeks before appearing in results
- Core Web Vitals suffer because large JavaScript bundles slow down FCP and LCP
- SSG produces the best SEO results for content pages by delivering complete HTML from a CDN
- Use CSR only for pages that do not need search engine visibility, like dashboards and logged-in apps
If your website runs on a CSR or SPA architecture and you are seeing indexing problems or ranking drops, the rendering strategy is likely the cause. Moving to a server-rendered or statically generated setup fixes the root issue rather than patching symptoms.