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
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.
<!doctype html>
<html lang="el">
<head><title>Okeanos</title></head>
<body>
<div id="root"></div>
<script src="/app.4f1c.js"></script>
</body>
</html><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>The audit, read like a lab report.
- CriticalRenderingRaw HTML of 1,798 test pages contained no text content, title or canonical — only a JavaScript bundle.
- CriticalRenderingSoft 404 shell returned 200 for every unknown /tests/ path, creating 9,000+ phantom URLs.
- HighCrawl72% of Googlebot hits went to ?sort=, ?filter= and session-tagged URLs.
- HighCrawlNo sitemap entry for any test page; tests reachable only via a JavaScript search box.
- MediumContentNo structured data, no reviewer byline, no preparation or turnaround details in HTML.
- MediumLocalSeven collection centres shared one location page with no per-branch hours.
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.
- 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.
The protocol, month by month.
- 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
- 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
- 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
- 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
- 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
- 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
+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
Median days to first index: 21 → 18 → 9 → 5 → 3 → 2 → 2
labcompare.gr › ferritin
Ferritin test price — compare labs
Compare 40 labs in Greece. Prices from €8…
Okeanos: not in top 100
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| Query | Monthly searches | Before | After |
|---|---|---|---|
| εξέταση θυρεοειδούς θεσσαλονίκη | 1,900 | — | 2 |
| ferritin test thessaloniki | 720 | — | 1 |
| εξέταση βιταμίνης D τιμή | 2,400 | 64 | 3 |
| γενική αίματος τιμή | 3,600 | 48 | 4 |
| HbA1c test price | 880 | — | 2 |
| μικροβιολογικό εργαστήριο καλαμαριά | 590 | 22 | 1 |
| PSA εξέταση νηστεία | 1,300 | — | 5 |
| έλεγχος σιδήρου προετοιμασία | 480 | 81 | 3 |
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.