Illustrative case study

A fictional business. The figures are a modelled scenario, not a client result.

SEO case studyTechnical SEO

Okeanos Diagnostics

Medical lab testing network · Thessaloniki

Getting 1,800 lab tests indexed after a JavaScript rebuild hid them from Google

City
Thessaloniki
Region
Europe
Plan
Signal
Duration
6 months
+342%organic test-page sessions
Specimen OK-0 · The challenge

A lab with 1,862 tests, and Google could see 64 of them.

A React single-page app rendered every test page client-side, so Google indexed only the homepage and a handful of blog posts.

The rebuild looked perfect in a browser. But each test page arrived as an empty shell and filled itself in from an API after load. Googlebot queues JavaScript for a second rendering pass, and on a site with thousands of near-identical shells that pass rarely came. Patients searching for a thyroid panel or vitamin D test in Thessaloniki found competitors, aggregators and forum threads — rarely the lab that could take their sample down the road.

What Googlebot received
<!doctype html>
<html lang="el">
  <head><title>Okeanos</title></head>
  <body>
    <div id="root"></div>
    <script src="/app.4f1c.js"></script>
  </body>
</html>
What it receives now
<h1>Ferritin blood test</h1>
<p>€9 · Results in 24 h · No fasting</p>
<script type="application/ld+json">
  {"@type":"MedicalTest",
   "usedToDiagnose":"Iron deficiency"}
</script>
Specimen OK-1 · Diagnosis

The audit, read like a lab report.

  • CriticalRaw HTML of 1,798 test pages contained no text content, title or canonical — only a JavaScript bundle.
  • CriticalSoft 404 shell returned 200 for every unknown /tests/ path, creating 9,000+ phantom URLs.
  • High72% of Googlebot hits went to ?sort=, ?filter= and session-tagged URLs.
  • HighNo sitemap entry for any test page; tests reachable only via a JavaScript search box.
  • MediumNo structured data, no reviewer byline, no preparation or turnaround details in HTML.
  • MediumSeven collection centres shared one location page with no per-branch hours.
Log-file analysisWhere Googlebot spent its visitsShare of monthly Googlebot requests hitting waste URLs vs. test pages
M0
72%
M1
66%
M2
41%
M3
27%
M4
19%
M5
15%
M6
13.7%
Waste: facets, redirects, API calls Test and hub pages
Specimen OK-2 · The treatment

Five fixes in the rack. Select a vial to read its result.

Built on our Signal technical SEO plan. The core tactics — JavaScript rendering, Log-file analysis, MedicalTest schema, Crawl budget — each fixed one reason Google could not reach, render or trust a test page. The fill level of each vial is how completely the fix landed by month 6.

SPECIMEN OK-011,790 / 1,862 tests rendered in HTML
Finding
Every /tests/:slug route shipped an empty <div id="root"> and fetched its content from the API after hydration. Googlebot's render queue reached the homepage and blog, then stalled.
Fix
Moved the test catalogue to server rendering with static generation and hourly revalidation, so price, preparation, turnaround and sample type arrive in the first HTML response.
Result
Indexable test pages rose from 64 to 1,790.
Specimen OK-3 · 6-month protocol

The protocol, month by month.

  1. Month 1Sample

    Audit and log capture

    • Rendered 1,862 URLs as Googlebot and compared raw vs rendered HTML
    • Pulled 30 days of CDN logs; classified 412k bot requests
    • Set a baseline: 64 indexed test pages, 21-day discovery

    210 indexed

  2. Month 2Prepare

    Server rendering for the catalogue

    • Moved test routes to static generation with hourly revalidation
    • Shipped titles, prices and preparation notes in first-byte HTML
    • Blocked faceted search parameters in robots.txt

    640 indexed

  3. Month 3Process

    Structured data and sitemaps

    • Generated MedicalTest markup from the lab system
    • Split sitemaps by category with true lastmod dates
    • Launched A–Z and body-system hub pages

    1,180 indexed

  4. Month 4Spin

    Crawl clean-up

    • Collapsed 3-hop redirect chains to single hops
    • Returned 404 for 140 retired panels; redirected 38 to successors
    • Linked related tests from every test page

    1,520 indexed

  5. Month 5Analyse

    Speed and depth

    • Deferred the booking widget; LCP down to 1.9 s
    • Added preparation FAQs to the 200 most-searched tests
    • Reviewed every page for the pathologist byline

    1,710 indexed

  6. Month 6Report

    Monitoring and handover

    • Weekly log diff alerts for crawl-waste regressions
    • Render tests in CI so a release cannot hide pages again
    • Handover playbook for the in-house web team

    1,790 indexed

Specimen OK-4 · Results

+342% organic test-page sessions in 6 months.

Modelled scenario for a fictional business — not a client result. Rankings and traffic are never guaranteed; see our Terms.

Assay 1

64 → 1,790

Indexed test pages

Assay 2

21 days → 2 days

Time to first index

Assay 3

+147%

Online test orders

Assay 4

−81%

Crawl waste

Indexed test pages64 → 1,790 of 1,862
05001,0001,5002,000M0M1M2M3M4M5M6
Organic test-page sessions+342%
M0
2,150
M1
2,480
M2
3,420
M3
5,160
M4
6,890
M5
8,340
M6
9,503

Median days to first index: 21 → 18 → 9 → 5 → 3 → 2 → 2

Before · M0 · position 1 for “ferritin test thessaloniki”

labcompare.gr › ferritin

Ferritin test price — compare labs

Compare 40 labs in Greece. Prices from €8…

Okeanos: not in top 100

After · M6 · position 1 for “ferritin test thessaloniki”

okeanos-diagnostics.gr › tests › ferritin

Ferritin blood test, Thessaloniki | Okeanos Diagnostics

€9 · Results in 24 h · No fasting needed · 7 collection centres in Thessaloniki.

Price €9Fasting: noTurnaround 24 h

Ranking panel

Modelled Google.gr positions, M0 vs M6
QueryMonthly searchesBeforeAfter
εξέταση θυρεοειδούς θεσσαλονίκη1,900—2
ferritin test thessaloniki720—1
εξέταση βιταμίνης D τιμή2,400643
γενική αίματος τιμή3,600484
HbA1c test price880—2
μικροβιολογικό εργαστήριο καλαμαριά590221
PSA εξέταση νηστεία1,300—5
έλεγχος σιδήρου προετοιμασία480813

Next specimen

Get a plan like this

If your site renders in the browser but not for Google, Signal starts with the same render and log audit — and ends with pages search engines can actually read.