JAVASCRIPT SEO · RENDERING & INDEXATION CASE STUDY

JavaScript SEO Case Study: 8,000 React SPA Pages Indexed, & 8.2K Organic Visits

8,000+
Programmatic Pages Published
8.2K
Organic Visits / Month
161
Pages Already Ranking

Property: linkscope.io · Discipline: JavaScript SEO — SPA rendering (React), prerender/SSG & indexation at scale · Data: Ahrefs, as of 8 Jul 2026

The Challenge: A Site Google Couldn't Read

linkscope.io is a React single-page application. Like most modern SPAs, the server returns an almost-empty HTML shell and JavaScript paints the page in the browser afterwards. For a human visitor that is fine. For a search crawler that does not fully execute and wait on JavaScript, the initial HTML is a blank <div id="root"></div>: no title per route, no meta description, no body copy, nothing to index.

Behind that empty shell sat the entire opportunity. LinkScope runs on an inventory database of 8,000+ guest-posting and link-building sites, each of which could be its own landing page targeting the exact things agencies search for: a specific site's name, a niche, a metric filter, "sitemap.xml guest posting sites," and thousands of long-tail variants. Every one of those pages was a potential entry point, and every one of them was invisible to Google as long as it rendered client-side.

This is the technical-SEO problem that never shows up in a keyword tool: the content strategy was sound, but the rendering pipeline silently zeroed it out. Fixing it was not a content project. It was a rendering, crawl, and indexation project, executed across thousands of URLs at once.

The constraint that shaped everything: growth had to come from organic search. A marketplace with thousands of long-tail, low-competition queries is exactly the surface where programmatic organic compounds — but only if the pages are genuinely crawlable and indexable. Get the rendering wrong and 8,000 pages rank for nothing.

The Result Verified in Ahrefs · 8 Jul 2026

8,000+ prerendered pages took linkscope.io from roughly zero to 8.2K organic visits a month in about eight weeks

Moving the programmatic routes from client-side rendering to prerendered HTML made the whole inventory indexable. 161 pages are already ranking, several in positions #1 to #9 for keywords with up to 75K monthly searches.

Inventory DB 8,000+ sites Prerender / SSG one template · per record title · meta · canonical Static pages + XML sitemap index, follow Google Index 8.2K organic / mo 161 pages ranking
8,000+
Pages published
8.2K
Organic visits / mo
161
Pages ranking
#1
Best position

The Strategy: Render Real HTML, Then Scale It

The plan came down to three moves, in order. Rendering had to be solved first, because nothing else matters if Google receives a blank shell. Then the opportunity had to be scaled with a template. Then the whole set had to be made discoverable so it would actually get crawled and indexed.

Prerender the SEO-critical routes

The foundation

Move every route that needs to rank from client-side rendering to prerendered / statically generated HTML, so the title, meta description, canonical, robots directive, Open Graph and Twitter tags, and the body content all ship in the raw HTML at build time. React still hydrates on top for interactivity, but the crawler never has to run JavaScript to see the page. Vite + a custom Node/Puppeteer prerender pipeline

One template, one page per record

The multiplier

Generate a page for every row in the inventory database from a single, well-structured template: /websites/[slug]/ for each site and /niches/[type]/ for each category. Each page derives its own title, meta, canonical and on-page content from the record, so 8,000 database rows become 8,000 targeted, internally consistent pages without writing 8,000 pages by hand.

Make all of it discoverable

The discovery layer

Publish XML sitemaps that list every generated URL, plus directory / hub pages that link the set together, and keep index control clean: robots: index, follow and self-referencing canonicals on every page. Thousands of well-linked, sitemapped URLs get crawled and indexed far faster than orphaned client-rendered routes.

Is JavaScript Hiding Your Pages?

Our technical SEO service finds the rendering and indexing gaps keeping your pages out of Google.

See the Technical SEO Service

What We Shipped

The clearest proof is in view-source. Before, a route returned a generic shell with an empty #root. After, the same class of route ships a complete, route-specific <head> before a single line of JavaScript runs. Anyone can verify this live at view-source: linkscope.io/niches/sitemap.xml.

before · client-rendered route empty shell
<body>
  <div id="root"></div>   <!-- no title, no meta, no content until JS runs -->
  <script type="module" src="/assets/index-9ocsUNuT.js"></script>
</body>
after · prerendered route (actual source) indexable
<title>Sitemap.xml Guest Posting Sites – Linkscope</title>
<meta name="description" content="Browse verified sitemap.xml guest posting sites on Linkscope. Filter by DA, DR, traffic & language. Permanent DoFollow backlinks."/>
<link rel="canonical" href="https://linkscope.io/niches/sitemap.xml"/>
<meta name="robots" content="index, follow"/>
<meta property="og:title" content="Sitemap.xml Guest Posting Sites – Linkscope"/>
<meta property="og:image" content="/niches/Browse Guest Posting Sites by Niche.webp"/>
<meta name="twitter:card" content="summary_large_image"/>
<!-- full per-route metadata, present in the raw HTML -->

That single change is what turned an inventory database into a crawlable surface. Everything else built on top of it:

  • A data-driven page template generating /websites/[slug]/ and /niches/[type]/ routes, each with its own title, description, canonical and Open Graph / Twitter tags derived from the record.
  • XML sitemaps covering the full set — /websites/sitemap.xml lists the 8,000+ site pages, with a matching /niches/sitemap.xml for categories.
  • Directory / hub pages that internally link the programmatic set, so pages are discovered through navigation as well as the sitemap.
  • Clean index controlrobots: index, follow and self-referencing canonicals to prevent the near-duplicate risk inherent in large templated sets.
  • Measurement in place — Google Tag Manager, Cloudflare, and tracking of indexation and clicks in Ahrefs and Google Search Console.
  • Performance & structured data — a Core Web Vitals pass across the template LCP/INP/CLS before → after: FILL and Schema.org markup on the programmatic pages JSON-LD type: Product + FAQPage ).
8,000+
Pages from one template
2 route types
/websites/ · /niches/
Full meta
Per-route in raw HTML
index, follow
+ self canonicals

Results: Indexation & Traffic

Organic traffic sat at effectively zero from February through mid-May 2026. Once the prerendered programmatic layer was live and Google began indexing it, both the number of ranking pages and organic traffic inflected sharply within weeks — a classic indexation-compounding curve, not a slow content grind.

Ahrefs Top pages for linkscope.io: organic traffic climbing from near zero to about 8.2K per month with 161 ranking pages

The step-change is unmistakable. Organic pages climbed from the low dozens toward ~180, and organic traffic rose to a peak near 10K before settling at 8.2K organic visits a month across 161 ranking pages (Ahrefs, 8 Jul 2026). The timing lines up with the prerendered set becoming crawlable: publish → index → rank, compounding as more of the 8,000 pages entered the index.

~0 → 8.2K
Organic visits / mo
161
Pages earning traffic
~10K
Peak organic traffic
~8 wks
Launch to inflection

Results: Page-Level Rankings

Aggregate traffic is only convincing if individual pages hold real positions. They do. These are single programmatic /websites/[slug]/ pages, each ranking for its target site's branded and navigational queries — including page #1 for a keyword with 75K monthly searches.

Programmatic page Top keyword Volume Position Traffic / mo
/websites/estoturf-turf-com/ estoturf .fr 75.0K #9 2,310
/websites/dedicatedideas-com/ dedicatedideas com 14.0K #6 1,228
/websites/financeboar-com/ financeboar com 8.7K #4 818
/websites/acrylicgross-com/ acrylicgross co (+5 kw) 1.2K #1 768

Traffic is concentrated in the head, exactly as expected. The top handful of pages carry a large share of the 8.2K, with a long tail of pages each adding smaller amounts — the natural shape of a healthy programmatic set as more pages mature into the index.

Read the traffic honestly: Ahrefs reports $0 traffic value because these are branded and navigational queries with low commercial intent. That is reach and discoverability, not revenue — the right way to read a marketplace inventory play, and worth stating plainly.

Want Your React Pages Indexed Like This?

8,000 pages went from invisible to indexed on prerendering and clean crawl paths alone. Our technical SEO service runs the same diagnosis and fix on your site.

Explore Our Technical SEO Service

Why It Worked

Four principles did the heavy lifting, and they transfer to any JavaScript site with a real database behind it.

Prerendered HTML makes an SPA crawlable

The foundation

Google can index what is in the raw HTML without executing JavaScript. Baking the title, meta, canonical and content in at build time removed the single biggest barrier between the content and the index. No amount of keyword work matters until this is true.

One template turns a database into a ranking surface

The multiplier

8,000 rows became 8,000 targeted pages from a single component. Programmatic generation reaches a scale and consistency manual content never will, and it makes every new inventory record an automatic new landing page.

Sitemaps and internal links drive fast, complete discovery

The moat

Thousands of URLs surfaced through XML sitemaps and hub-page linking get crawled and indexed far faster than orphaned routes. Discovery, not just rendering, is what let indexation compound over weeks instead of months.

Winnable queries first

The accelerant

Branded and navigational site queries are low-competition and quick to rank, so newly indexed pages converted into positions fast. That is why the curve inflected in weeks: the pages were pointed at demand they could actually capture.

The Honest Caveats

We report what the data actually shows, including the parts a polished case study usually rounds away:

Traffic is not revenue.

These queries are branded and navigational, so Ahrefs values the traffic at $0. It is real reach into the exact audience the marketplace wants, but it should be read as discoverability, not sales.

A performance snapshot, not a controlled experiment.

The timing strongly ties the growth to the prerendered launch, but the window also includes normal crawling, seasonality and other changes. It is not a clean isolated before-and-after.

161 of 8,000+ pages rank so far.

Most of the set is still indexing and maturing, and not every programmatic page will ever rank. That is the normal shape of a large templated build, and the ranking count is expected to keep climbing as indexation continues.

Ahrefs is a third-party estimate.

Traffic and position figures are Ahrefs estimates as of 8 Jul 2026. Google Search Console impressions and clicks are the source of truth and are marked as a placeholder until pulled.

Key Takeaways

1

An SPA is invisible until you render HTML for crawlers.

A client-rendered app hands Google an empty shell. Confirm what is actually in the raw HTML with view-source before touching keywords or content.

2

Prerender or SSG the routes that must rank.

Ship title, meta, canonical, robots and content at build time, then hydrate for the app. This is the single highest-leverage change on any JavaScript site.

3

A clean template plus a real database is a ranking surface.

Programmatic pages let a genuine data asset scale into thousands of targeted entry points that no manual content plan could match.

4

Discovery is a lever, not an afterthought.

XML sitemaps and internal linking across the set are what let 8,000 pages index quickly instead of trickling in over many months.

5

Point pages at demand they can capture.

Starting with low-competition branded and navigational queries turned indexation into rankings in weeks, and the traffic keeps compounding as more pages mature.

Is Your JavaScript Site Invisible to Google?

We diagnose SPA rendering, prerender the routes that matter, and build programmatic pages that actually rank — crawl and indexation handled end to end. Data-driven, and we show our work.

Get a Technical SEO Audit