Research report

JavaScript SEO reality check: we crawled 103 funded SaaS marketing sites. 41% are not reliably indexable.

A rendered-vs-raw HTML diff across 103 funded SaaS marketing sites, three computed metrics (RDI, CBE, JSC) and a ten-issue indexability taxonomy.

JavaScript SEO study of 103 funded SaaS marketing sites
By Ritesh AgarwalReviewed Sep 21, 202620 min read

About these figures

The project observations below describe selected engagements and the reporting period stated in the methodology. They are not a representative industry survey or a forecast for your project. Client-level source records are not published with this article.

TL;DR

  • 32 of the 103 SaaS sites we crawled have empty body content before JS hydration. Google indexes them anyway, but with a delay measured in days and a much higher rate of partial indexing.
  • CSR-only React stacks underperform SSR / SSG stacks by 40-50 percentage points on indexed-page share. The gap is the dominant driver of organic search underperformance for funded SaaS.
  • The most common blocking issue is internal links rendered via onClick handlers (41% of sites). Crawlers can't follow them. Sites lose interlinking signal that compounds over months.

Funded SaaS startups invest heavily in marketing pages and product content. They also disproportionately deploy JavaScript-heavy stacks where what you see in the browser is not what crawlers see in the raw HTML. We wanted to put numbers on the gap.

We sampled 103 funded SaaS companies (recent Series A rounds via Crunchbase Discover), crawled their marketing surface (typically the homepage, ~10 product pages, and ~10 blog posts), and compared the rendered DOM against the raw HTML response. We cross-checked indexed-page share against Ahrefs index data and, where available, Search Console coverage reports. The render-vs-raw approach mirrors Google's own publicly-documented two-wave indexing model, per the Google Search JS SEO basics.

Three original metrics: Render-Dependent Indexability (RDI), Crawl Budget Efficiency (CBE), and JS-Stripped Coverage (JSC). All defined below with formulas.

Methodology

The 103-site sample was drawn from public Series A rounds in the last 18 months. Filters: B2B SaaS, English-language site, >100 indexable URLs in sitemap. We crawled the home, top product page, and a top blog post for each, captured both raw HTTP response and post-hydration DOM, and ran a structured diff. Indexed-page share comes from Ahrefs index counts compared to sitemap counts.

Finding 1: CSR-only stacks lose 40+ points of indexability

Chart 1, Render-Dependent Indexability (RDI) by stack

% of textual & link content present in raw HTML before JS hydration. 100 = body text present in the initial response; 0 = entirely JS-dependent. This does not establish indexing status.

StackSample (n)RDI
Next.js (SSR/SSG)3896%
Next.js (CSR only)1442%
React + Vite (SSG)1291%
React + Vite (CSR)1835%
Astro / 11ty (SSG)998%
WordPress595%
Webflow492%

Sources: Crunchbase Series A list; custom crawler comparing rendered DOM vs raw HTML; Google Search Console index coverage where accessible; Ahrefs index data. Figures rounded.

Stacks split cleanly into two groups. Server-rendered or statically-generated stacks (Next SSR/SSG, Vite SSG, Astro/11ty, WordPress, Webflow) sit at RDI 91-98%. Client-rendered stacks (Next CSR, React+Vite CSR) sit at RDI 35-42%. The gap is consistent across sample slices, vertical, site age, traffic volume.

Finding 2: RDI predicts indexed-page share with high confidence

Chart 2, RDI vs % of pages indexed by Google

X = RDI; Y = share of pages found in Google's index. Each dot = a stack.

StackRDI% indexed
Next.js (SSR/SSG)96%81%
Next.js (CSR only)42%38%
React + Vite (SSG)91%76%
React + Vite (CSR)35%31%
Astro / 11ty (SSG)98%88%
WordPress95%79%
Webflow92%72%

Sources: Crunchbase Series A list; custom crawler comparing rendered DOM vs raw HTML; Google Search Console index coverage where accessible; Ahrefs index data. Figures rounded.

RDI plotted against indexed-page share gives the cleanest correlation in the dataset. The break point is around RDI 70, below it, indexed share collapses fast. Above it, sites get most of what their sitemap promises into Google's index. This is the single most useful diagnostic in the report, measure RDI on your site before you debate any other technical SEO concern.

Finding 3: The top three issues are universal and fixable

Chart 3, Top indexability issues across 103 SaaS sites

% of sample affected. Bar colour = severity (3 catastrophic / 2 blocking / 1 cosmetic).

Issue% affectedSeverity
JSON-LD added post-hydration47%2
Internal links rendered via onClick41%3
Image src lazy-injected via JS only39%2
Heading hierarchy collapsed in raw HTML36%2
Body content empty without JS32%3
Meta description set client-side28%2
Pagination/infinite scroll JS-only26%3
Canonical missing or incorrect24%3
Title tag injected by JS22%3
Hreflang only after hydration19%2

Sources: Crunchbase Series A list; custom crawler comparing rendered DOM vs raw HTML; Google Search Console index coverage where accessible; Ahrefs index data. Figures rounded.

Most-affected issues:

  1. JSON-LD added post-hydration (47%) depends on successful rendering. Google supports this implementation, but clients that do not execute JavaScript will not see it. Test the rendered URL before treating the markup as missing.
  2. Internal links via onClick (41%), clicking a div with a router push doesn't produce a crawlable href. Internal linking equity evaporates.
  3. Images src lazy-injected via JS (39%), image search and image alt-text contributions are missed; CLS impacts Core Web Vitals on top.

How we score render-dependence and indexability

1. Render-Dependent Indexability (RDI)

RDI = (Tokens in raw HTML body / Tokens in rendered DOM body) x 100

This measures how much text is delivered before JavaScript runs. A lower score indicates a stronger rendering dependency; it does not establish whether Google has indexed the page.

2. Crawl Budget Efficiency (CBE)

CBE = Indexed pages / Pages requested per month by Googlebot

Use the same URL population and reporting period when comparing indexing and crawl data. Repeated crawls, canonicalisation and pages intentionally excluded from indexing affect the ratio, so it is a diagnostic measure rather than a universal health threshold.

3. JS-Stripped Coverage (JSC)

JSC = (Working internal links with JS off / Working internal links with JS on) x 100

The interlinking-equity proxy. Below 60 means most internal navigation depends on JS, which depresses both crawl reach and link equity.

Four counterintuitive patterns

  1. Indexed-page share decays over time on CSR sites even when the sitemap is clean. We tracked 8 sites over 6 months, CSR sites lost an average of 11% indexed-page share without any change to content.
  2. Validate structured data in the rendered page. Server rendering can simplify delivery and testing, but Google also supports JavaScript-generated JSON-LD. An organic traffic change cannot be attributed to schema alone without suitable controls.
  3. Hreflang errors compound silently when set client-side. International SaaS sites with hreflang only after hydration index correctly in en-US but lose signal in regional locales.
  4. The pagination / infinite scroll JS-only pattern is the worst-leverage issue. 26% of sample sites; almost all blog post indexing depends on it. Switching to crawlable pagination is the highest-ROI fix in the issue table.

Recommendations

For SaaS founders

Move marketing pages off CSR. The product app can stay CSR if it must, search engines don't index app routes meaningfully, but marketing surfaces (home, pricing, blog, docs, comparison pages) should be SSR or SSG. The traffic lift is significant and the migration is bounded. Our companion structured-data guidecovers suitable JSON-LD types, current search-feature support and measurement. And once you're indexed, indexing decay is the discipline that keeps you there.

We run this work as part of our technical SEO for SaaS engagement: prerender or SSR the marketing surface, audit and fix the issue list above, monitor indexation recovery for 90 days post-deploy.

For engineers building new SaaS

Default to SSR or SSG on the marketing surface. Next App Router with PPR, Astro, or Vite SSG with a prerender step all work. We recommend delivering the main content, canonical, metadata and internal links in the initial response where practical, then verifying what search engines can actually render. We bake this into every SaaS web app development engagement we ship.

Limitations

The 103-site sample is biased toward English-speaking, VC-funded SaaS. Bootstrapped SaaS, regional SaaS, and enterprise software in Java/.NET stacks have different shapes. Index counts from third-party tools approximate Google's real index, verify with Search Console for your own site.

The single highest-impact JS SEO fix

Run an RDI check on your own marketing site this afternoon. Open it with JavaScript disabled. If the body is empty, the metadata is missing, or the internal links don't work, you're on the wrong side of a 40-point indexability gap. Fixing it is the highest-leverage technical SEO move available to most funded SaaS sites.

If you want a private RDI / CBE / JSC report on your own site, send the URL, we'll run the same crawler and send the report back free.

The two companion SEO studies, what makes Google drop pages, and which schema types actually move rankings:

Two services that map exactly to the issues in this report:

Frequently asked questions

Does Google reliably index JavaScript-rendered content in 2026?
Google can render and index JavaScript. Rendering errors, blocked resources, response codes, canonicalisation and content quality can still affect the result. A raw-versus-rendered HTML comparison identifies a dependency on JavaScript; it does not by itself prove a page is unindexable.
What is the highest-ROI JS SEO fix on a React or Next.js site?
Start with the issue preventing useful pages from being crawled, rendered or indexed. Check response codes, robots directives, canonical URLs, internal links and rendered content before prioritising structured data. Google supports JavaScript-generated JSON-LD when it is accessible in the rendered page.
Why does indexed-page share decay on CSR sites even without content changes?
Investigate changes in indexing with Search Console and server logs. Rendering failures, canonical changes, duplicate content, crawling restrictions and search-system changes can all contribute. An observed correlation with client-side rendering does not identify the cause.

Our clients

UK · Europe · Worldwide

Selected case studies

What we built, how it works and the results for our clients.

Creoate product interface01
B2B commerce

Eight years behind a wholesale marketplace

Next.js storefront, Python ingestion pipelines, DynamoDB data layer and AWS infrastructure.

8+ yearsdevelopment and support
Ontick product interface02
Event technology

Ticketing owned by the event team

Multi-organiser commerce, Stripe instalments and two native apps in one connected platform.

£2M+ticket sales processed
Easyship product interface03
Global logistics

Helping shippers compare their options

Rate, tax and duty calculators, server-rendered courier pages and a custom MongoDB CMS.

550+couriers in the calculator
TEFL.ie product interface04
Education & training

Connecting course sales to the classroom

WordPress and WooCommerce, a Moodle LMS, Stripe deposits and Zoho CRM, tied together with Zapier automation.

Since 2017development and support
All White Laser product interface05
Medical aesthetics

From equipment finance to clinic support

A lead-to-billing system on GoCardless Direct Debit, provider certification, and a React Native app for machine owners.

9 yrsdevelopment and support
Decofetch product interface06
Luxury commerce

A custom home for designer furniture

Server-rendered Next.js commerce over a Laravel API, bespoke operations tooling and re-architected AWS infrastructure.

0→livemarketplace development
BA Engine Room product interface07
AI operations

Connecting discovery, contracts and delivery

Discovery briefs, e-signed contracts, Stripe deposits, delivery milestones and time tracking in one operational system.

0→1custom platform development
PlusHeat product interface08
Home services

Helping customers choose their boiler cover

Custom plan configuration, postcode-qualified lead journeys, CRM synchronisation and campaign landing pages.

5 yrswebsite development and support
Léonia product interface09
Beauty commerce

Shopify shaped around a beauty brand

Custom theme, customer accounts, loyalty rewards, referrals and gift-with-purchase offers.

5 yrsShopify development and support
Shutters 365 product interface10
Home improvement

From window measurements to a priced order

A seven-step product builder with live previews, sample orders and supplier tools.

7-stepproduct configurator
Bloc Ads Manager product interface11
Advertising

From targeted ads to venue check-ins

Campaign creation, audience targeting, in-app ads and reporting linked to venue check-ins.

check-inscampaign attribution
Bloc product interface12
Social events

Four years across the app and operations

Mobile app, backend, advertising tools, a digital marketplace and website.

4+ yrssupport across five codebases
Zonely product interface13
Social mobile

Two apps, one real-time conversation marketplace

Customer and buddy apps with per-minute billing, wallets, moderation and admin tools.

2 appsfor iOS and Android
Player Profile Hub product interface14
Grassroots football

Helping grassroots players get discovered

Verified profiles, video highlights, coach discovery and safeguarding on web and mobile.

0→1custom platform development
DeepSpatial product interface15
Geospatial AI

Connecting clients, investors and emerging talent

Corporate and investor pages, the Xploor talent platform and ongoing releases on AWS Amplify.

2 yrsdevelopment and support
Yippee Malta product interface16
Travel

A booking journey the tour team owns

A multilingual website connected to the booking API, with deposits, coupons and affiliate tracking.

6languages across the booking journey
Professional Energy product interface17
Energy brokerage

Tenders, contracts and accounts brought together

Supplier tenders, contract management, brokerage accounting and client records.

100+suppliers per tender

Tell us what you are trying to build.

A thirty-minute call with the engineer who would run it.

Discuss your project