INNOVATE
04B2B SaaS·North America

Why their content team's traffic flatlined for 18 months — and what fixed it

A Series A B2B SaaS was publishing solid content into a void. The problem was never the content. It was a JS-heavy SPA that crawlers couldn't render, broken Core Web Vitals, and a sitemap that indexed 30% of submitted URLs. Eight months later: 3× organic traffic and Channel #1 by acquisition.

organic traffic growth

8 months, zero paid spend

Client

Series A B2B SaaS, ~80 employees

Timeline

8 months (3 month migration + build + 5 months active optimization)

Team

3 engineers, 1 SEO strategist, 1 designer

Engagement

Audit → migration → ongoing optimization retainer

01 — Challenge

The situation we walked into.

A well-funded Series A B2B SaaS had a strong content team that was producing consistently good material — buyer guides, comparison content, deep technical posts. None of it was performing. Organic traffic had been flat for 18 months. The marketing team was being asked hard questions by the board and was preparing to argue for a 5× content budget increase to 'force the issue.' The actual problem was technical, not editorial.

  • 01Organic traffic flat at ~25K/month for 18 consecutive months despite ~12 long-form pieces published monthly.
  • 02Built on Create React App — fully client-side rendered. Googlebot was rendering successfully ~80% of the time, other crawlers (Bing, AI bots) much less.
  • 03Core Web Vitals failing: LCP 4.2s, CLS 0.32, INP 380ms. PageSpeed score in the 30s on mobile.
  • 04Zero structured data on the site. No Organization schema, no Article schema on blog posts, nothing on product/feature pages.
  • 05Sitemap submitting ~3,000 URLs; Search Console reporting only ~900 indexed. Most exclusions were 'crawled — currently not indexed.'
  • 06Internal linking was a flat soup — every blog post linked to every other blog post, with zero topical clustering.
02 — Approach

What we actually did, in order.

We started with a hard rule: nothing gets shipped that we cannot measure the impact of. Every change had a hypothesis attached and a tracked metric. The order was — fix rendering first, fix performance second, fix discoverability third, fix architecture fourth.

01

Comprehensive technical audit

Two weeks of audit work: log file analysis, render diff against Googlebot, Lighthouse CI baseline, Search Console crawl-stats deep-dive, sitemap-vs-index reconciliation. Output: a prioritized backlog ranked by impact / effort with explicit success metrics for each item.

02

CRA → Next.js migration with hybrid SSR/SSG

Migrated the entire frontend to Next.js. Marketing pages and blog posts as SSG (cached at the edge), authenticated app shell as SSR. Component-by-component migration over 12 weeks with no marketing-page outage. New build pipeline with Lighthouse CI as a deploy gate.

03

Performance overhaul

Image and font optimization pipeline (next/image with AVIF, font subsetting, preconnect for third-party fonts). JS bundle splitting and route-based code splitting. Removed three third-party scripts that were costing ~800ms of LCP each. Result: LCP 1.1s, CLS 0.04, INP 180ms.

04

Comprehensive schema implementation

Schema.org JSON-LD across the site: Organization + WebSite globally; Article + BreadcrumbList on blog posts; Product + FAQPage on feature pages; SoftwareApplication on the homepage. Anchored on stable @id references so the entity graph stayed connected.

05

Indexation cleanup

Sitemap restructured by content type (marketing, blog, docs). Removed 800+ thin/duplicate URLs from the index. Implemented canonical strategy for tag/category pages. Submitted via Search Console and Bing Webmaster — within 6 weeks indexation rose from 30% to 92%.

06

Topical cluster architecture

Re-architected internal linking around 14 topic clusters identified from search demand. Each cluster has a pillar page with a defined supporting set of long-tail posts. Removed roughly 40% of legacy 'cross-link everything' anchor text in favor of topically-relevant links. This was the biggest single ranking driver in months 4–8.

03 — Stack

What it was built on.

Full technology stack
Next.js 15React 19TypeScriptVercel (Edge)CloudflareSchema.org JSON-LDLighthouse CISearch Console APIBing Webmaster APIAlgoliaSanity (CMS)Tailwind CSS
04 — Results

The numbers we will stand behind.

organic traffic growth

25K/mo → 78K/mo in 8 months

92%

sitemap indexation

up from 30%

240

keywords ranking in top 10

up from 47

−74%

LCP improvement

4.2s → 1.1s

55%

drop in blended customer-acquisition cost over 12 months

05 — Outcome

What changed for the business.

By month 6, organic became the largest acquisition channel by signups, displacing paid social. By month 9, it overtook paid search on revenue-attributed accounts. The content team's output stopped decaying — pieces published in months 1–3 of the engagement were still picking up new long-tail traffic 12 months later, because the topical clusters compounded instead of competing.

The board conversation flipped. The budget increase request was withdrawn, replaced with a request to invest in the systems that were already working — better analytics, expanded topical coverage, and an investment in their first-party Search Console data warehouse so future content decisions could be data-driven.

We continue to support the SEO work on a quarterly retainer. The technical foundation is stable; the ongoing work is content-strategy advisory and quarterly technical hygiene reviews.

06 — Timeline

How the engagement ran.

Our delivery process

01

Technical audit

2 weeks

Render diff, log file analysis, Lighthouse baseline, sitemap reconciliation, prioritized backlog.

02

Next.js migration

12 weeks

Component-by-component rebuild, hybrid SSR/SSG, build pipeline with Lighthouse CI as deploy gate.

03

Performance + schema

6 weeks

Image/font pipeline, JS bundle work, comprehensive schema implementation, third-party script audit.

04

Indexation cleanup

4 weeks

Sitemap restructure, canonical strategy, thin-content removal, Search Console + Bing resubmission.

05

Topical cluster architecture

8 weeks

Cluster identification from search data, pillar page creation, internal-link re-architecture, anchor-text cleanup.

07 — FAQ

What we get asked about this engagement.

Was the content team doing something wrong?+
No — they were doing the writing right and being failed by the platform underneath them. Once the platform problems were fixed, the same content quality started ranking. This is the most common pattern we see in B2B SaaS SEO engagements: marketing teams are blamed for technical problems they cannot fix and don't have visibility into.
Why migrate the framework instead of fixing CRA?+
The performance ceiling on a fully client-rendered React app is fundamentally lower than what a hybrid SSR/SSG approach can deliver, and the rendering inconsistency across crawlers was a structural issue. Patching CRA could have moved metrics 20%; migrating moved them 70%+. The cost differential was small relative to the impact.
How much of the result came from the content cluster work vs. the technical fixes?+
The technical fixes (rendering + performance + indexation + schema) drove most of the gain in months 0–4 — going from 'invisible' to 'visible.' The cluster architecture drove most of the gain in months 4–8 — going from 'visible' to 'authoritative.' Both were necessary; neither alone would have produced the result.
Could this work for a much smaller content footprint?+
The technical foundation work pays off the same way at almost any scale — the relative improvement is similar even with a 50-page site. The cluster architecture work needs a minimum amount of content to be meaningful, usually 30+ substantive pieces in the topic space.

Have a similar problem?

Most engagements start with a 30-minute discovery call. No pitch deck, no NDAs on day one — just an honest conversation about your situation.

Schedule a Call