CHAPTER · RENDERING

Rendering for SaaS: how Google sees your marketing pages

Written by Olayinka Olayokun·Published ·Updated ·Verified

Rendering for SaaS is the decision of where each marketing URL's HTML is generated — server-side at request time (SSR), at build time (SSG), or in the browser after fetch (CSR) — and the consequences each choice has for indexation and ranking.

SUMMARY

Summary and key takeaways

Googlebot renders JavaScript, but with a delay and a budget — and on commercial templates (pricing, comparison, feature pages) the delay is enough to silently break indexation. SSR or SSG those templates; CSR is acceptable only behind a login wall. The single most common SaaS rendering bug is a Next.js or Vite app that ships marketing pages as 'use client' by default.

Key takeaways
  • Googlebot renders JavaScript in a deferred second pass — never assume parity with what Chrome shows.
  • Server-render or static-generate every marketing template; reserve client-side rendering for authenticated app surfaces.
  • URL Inspection → View tested page → Rendered HTML is the only reliable verification of what Google sees.
  • Hydration mismatches in Next.js / Remix / Vite leak server HTML and client HTML disagreements straight into Google's index.
  • Third-party scripts (chat widgets, A/B tools) that mutate the DOM before Googlebot's render budget expires are a top cause of empty-shell bugs.

In plain English ·Rendering for SaaS is the template-level decision of whether each marketing URL is server-rendered, static-generated, or client-rendered. SSR or SSG is required for commercial templates because Googlebot's two-pass JavaScript rendering introduces delay and failure modes that CSR pages cannot reliably survive.

BY THE NUMBERS
2-pass
Googlebot's JavaScript rendering model — initial HTML first, then deferred JS render
Google Search Central
5 commercial templates
Pricing, comparison, feature, integration, landing — the only ones rendering work is worth on
SERPNAUT playbook
Day 12
Day Invoicemonk's pricing page entered the index after switching from CSR to SSR
Invoicemonk
COMPARISON

How this compares

Rendering modeGenerated whenIndexation reliabilityUse for
SSG (static)Build timeHighest — plain HTMLMarketing pages with stable content
SSR (server)Each requestHigh — plain HTML per requestPersonalised pricing, geo content, A/B
CSR (client)In the browser after JS loadLow — Googlebot may miss contentAuthenticated app surfaces only

Rendering for SaaS is the decision of where each marketing URL's HTML is generated — server-side at request time (SSR), at build time (SSG), or in the browser after fetch (CSR) — and the consequences each choice has for indexation and ranking.

A SaaS pricing page that renders correctly in Chrome and loads in 1.2s on a fast laptop can be silently invisible to Google. The cause is almost always rendering: 'use client' applied as the framework default, hydration that depends on a network fetch, or a third-party script that overwrites content after Googlebot's render budget expires. Fixing the rendering decision once at the template level usually moves more pages out of 'Crawled — not indexed' than a quarter of content work does.

What this chapter covers: render mode, hydration, render budget, rendered html view, per-route choice.

Why Googlebot's two-pass render is the trap

Googlebot processes pages in two passes: the initial HTML pass (immediate) and the JavaScript render pass (deferred, sometimes by days). The first pass is what indexes the page; the second pass updates what's indexed if it ever runs.

Googlebot processes pages in two passes: the initial HTML pass (immediate) and the JavaScript render pass (deferred, sometimes by days). The first pass is what indexes the page; the second pass updates what's indexed if it ever runs. Pages that rely on the JS pass for their H1, product copy, or CTA enter the index missing those elements — sometimes permanently.

This is not a bug Google plans to fix. The render queue exists because rendering JavaScript at web scale is expensive, and it always will be. Treat the deferred render as an optimization tier, not a base case.

Which pages to SSR/SSG (and which not to)

The five SaaS templates that have to be SSR or SSG: home page, pricing page, comparison/alternative pages, feature pages, integration pages. These are the pages that earn ranking and that lose the most when rendering breaks.

The five SaaS templates that have to be SSR or SSG: home page, pricing page, comparison/alternative pages, feature pages, integration pages. These are the pages that earn ranking and that lose the most when rendering breaks.

Blog and documentation: SSG is the default and the right choice — static, cacheable, fast. SSR is overkill unless you personalise content per-visitor.

Authenticated app surfaces: CSR is fine and often preferable. Google doesn't index logged-in screens regardless of how they render, so render mode is purely a UX decision there.

How to verify rendering for any URL

Open Search Console → URL Inspection → enter the URL → 'Test live URL' → 'View tested page' → Rendered HTML tab. Read the actual HTML Googlebot constructed after its render pass. If the H1, product copy, pricing table, or CTA is missing, the page is broken for Google.

Open Search Console → URL Inspection → enter the URL → 'Test live URL' → 'View tested page' → Rendered HTML tab. Read the actual HTML Googlebot constructed after its render pass. If the H1, product copy, pricing table, or CTA is missing, the page is broken for Google.

Compare against the rendered HTML in Chrome DevTools (Elements panel). Differences between the two are the bugs — usually a script that runs in Chrome but times out in Googlebot's render environment, or content that mounts after a network fetch Googlebot didn't wait for.

Hydration mismatches and third-party scripts

Next. js / Remix / Vite warn loudly about hydration mismatches in development but ship them silently to production. A common SaaS pattern: the server renders the pricing table with a default currency, the client re-renders it with a geo-detected currency, and Googlebot indexes one version while users see another.

Next.js / Remix / Vite warn loudly about hydration mismatches in development but ship them silently to production. A common SaaS pattern: the server renders the pricing table with a default currency, the client re-renders it with a geo-detected currency, and Googlebot indexes one version while users see another.

Third-party scripts (Intercom, Drift, Optimizely, Hotjar) that mutate the DOM after page load are the most common cause of empty-shell bugs on otherwise well-built SaaS sites. Defer them past Googlebot's render window or load them conditionally on user interaction.

BEFORE YOU SHIP

The checklist for this chapter

  • Every commercial template (home, pricing, comparison, feature, integration) verified in URL Inspection rendered-HTML view
  • No 'use client' on marketing route components in Next.js App Router
  • Hydration warnings in dev treated as production bugs, not noise
  • Third-party DOM-mutating scripts deferred past initial render or loaded on interaction
  • Render mode chosen per template, not as a framework default
  • SSR/SSG decision documented so framework upgrades don't silently change it
  • Quarterly spot-check of 5 commercial URLs via rendered-HTML view
HOW THIS CONNECTS

Where this chapter sits in the guide

most of the 'Crawled — currently not indexed' bucket on a SaaS site. Read the saas indexation: why your pages aren't in google chapter →

Core Web Vitals — render mode affects LCP, INP, and CLS directly. Read the core web vitals for saas: field data, not lab scores chapter →

frontend performance — render mode is about who builds the HTML; performance is about how fast it loads. Server-side rendering

URL Inspection rendered-HTML view, not by visual inspection in Chrome. Google Search Console

Google's two-pass JavaScript rendering model, the official documentation for how Googlebot handles JS. JavaScript SEO basics (Google)

ANSWERS

Quick answers about javascript rendering for saas: ssr, ssg, and the empty-shell bug

Can Googlebot render JavaScript on SaaS pages?
Yes, in a deferred second-pass render — but with a render budget and known failure modes. Pages that depend on JavaScript to insert the H1, product copy, or pricing table routinely lose those elements when Googlebot's render budget expires. SSR or SSG those templates; never rely on the JS pass for commercial copy.#
SSR or SSG for a SaaS marketing site — which should I pick?
SSG when the content rarely changes (homepage, feature pages, comparison pages) — fastest and cheapest. SSR when the page composes per-request data (logged-in state, geo pricing, A/B variants). Mixed in the same app is normal; Next.js, Remix, and Astro all support per-route choice.#
How do I verify Google sees the same HTML I see?
Open Search Console URL Inspection → enter the URL → 'Test live URL' → 'View tested page' → Rendered HTML tab. If the H1, product copy, or call-to-action is missing there, the page is broken for Google regardless of how it looks in Chrome. This is the only diagnostic that matters.#
Can I run my SaaS marketing site as a single-page React app?
Technically yes; in practice it consistently underperforms a server-rendered equivalent. SPAs leak indexation issues that compound: missing H1s after hydration, scripts that fail under Googlebot's CPU constraints, third-party widgets that overwrite content after render. If you're starting fresh, choose Next.js, Astro, Remix, or TanStack Start — not a Vite SPA — for the marketing site.#
COMMON QUESTIONS

Questions about javascript rendering for saas: ssr, ssg, and the empty-shell bug

  • Yes, in a deferred second pass. But the render budget is finite, the queue is sometimes days deep, and content that depends on the JS pass routinely enters the index missing. Server-render anything that must rank.
SOURCES
  1. Google's documentation of JavaScript SEO basics and the two-pass render model. Google Search Central — JavaScript SEO basics
  2. URL Inspection rendered-HTML view as the ground-truth check. Google — URL Inspection tool
  3. Next.js rendering documentation (Static, Dynamic, Streaming). Next.js — Rendering
FROM PLAYBOOK TO YOUR SITE

This chapter is one node in the founder-led playbook. To see which nodes your specific URLs are bleeding traffic from, get a founder-grade SEO audit of your URLs. Same six disciplines, applied to the pages you actually own.

NEIGHBOURING CONCEPTS

Adjacent entities this chapter touches on. Each is a separate concept worth knowing even if it isn't a chapter on its own.

Hydration
The client-side process of attaching React (or similar) state to server-rendered HTML. Hydration mismatches leak two versions of the page to Google.
Edge SSR
Server-rendering executed at a CDN edge node rather than an origin server. Cuts LCP for global SaaS traffic without changing render mode.
Dynamic rendering
Serving pre-rendered HTML to bots and SPA HTML to users. Deprecated by Google in 2022 as a long-term recommendation.
Streaming SSR
Sending HTML to the browser in chunks as it's generated, reducing time-to-first-byte. Supported by Next.js App Router and Remix.
REVISION HISTORY

What's changed on this page

  1. First published with the SSR/SSG/CSR decision table and the five-commercial-templates rule.
  2. Added the Invoicemonk day-12 indexation result after switching from CSR to SSR and a hydration-mismatch section.
  3. Bound rendering to Google's two-pass JS render documentation and added neighbouring-concept block (hydration, Edge SSR, Web Worker).
WHO WROTE THIS

Olayinka Olayokun

Founder, SERPNAUT and Invoicemonk

Written by Olayinka Olayokun. I run SERPNAUT, a founder-led SEO service for B2B SaaS, and Invoicemonk, the SaaS I grew from zero to 300+ organic visits and a paying customer in 28 days using the same playbook. Everything below is what worked on my own URLs and on the audits I've shipped since.

Rendering is upstream of indexation, which is upstream of everything. A SaaS site that ships SSR or SSG on its commercial templates rarely has the indexation gaps the previous chapter diagnosed. The next chapter covers Core Web Vitals — the user-experience signal that turns a correctly rendered page into one Google ranks above its peers.

See the full guide at technical seo for saas: the founder's checklist. The commercial bridge above is the canonical path from this chapter to your URLs.