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.

    Mar 24, 2026Updated May 10, 202620 min readBy Ritesh
    JavaScript SEO study of 103 funded SaaS marketing sites

    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

    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

    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

    Most-affected issues:

    1. JSON-LD added post-hydration (47%) — Schema markup invisible to crawlers that don't execute JS. Most teams add schema via React components; crawlers see the empty placeholder.
    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) × 100

    The single best diagnostic. RDI 90+ is a clean SSR / SSG site. RDI under 60 is a CSR app pretending to be a marketing site.

    2. Crawl Budget Efficiency (CBE)

    CBE = Indexed pages ÷ Pages requested per month by Googlebot

    Read from log files or Search Console crawl-stats. CBE 0.8+ is healthy. Below 0.4, Google is spending crawl budget on pages that never make the index.

    3. JS-Stripped Coverage (JSC)

    JSC = (Working internal links with JS off ÷ Working internal links with JS on) × 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. The single biggest indexability win is moving JSON-LD into raw HTML. Three of our client engagements saw 14-22% organic traffic lift from this change alone.
    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 Schema.org A/B study covers the second-order question: once your raw HTML contains the body, which JSON-LD types actually move CTR. 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. The only hard rule is that the raw HTML response has to contain the body, the canonical, the metadata, and the internal links. 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.

    ■ Related research

    Related research

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

    Ritesh — Founding Partner, Appycodes

    About the author

    RiteshFounding Partner, Appycodes

    LinkedIn

    Co-authored with Soumodip Mukherjee, Technical SEO Lead

    Ritesh runs engineering at Appycodes; Soumodip leads the technical-SEO practice and operates the crawler used for this 103-site study. Recent client audits include a Series A B2B SaaS that recovered 14% organic traffic after we fixed the issues in finding 3, and a developer-tools company whose marketing surface had a render-dependent table of contents. The Skindays integration story in our companion WordPress performance study touches the same render-vs-raw question on a hybrid stack.

    Reviewed by Swati Agarwal, Founding PartnerLast reviewed: May 10, 2026

    Full stack web and mobile tech company

    Taking the first step is the hardest. We make everything after that simple.

    Let's talk today