Skip to content
Codedock
ServicesHow we workInsightsCase StudiesCareerContact
Back to case studies
The Clinic PrahaCase Study3 weeks7 min read

Dental clinic migration from Laravel to Next.js + .NET 9 — 6 languages, 1,333 URLs, zero SEO drop

The Clinic Praha is a reputable dental clinic with an international client base. Their legacy Laravel site offered only 2 languages, had broken meta descriptions and minimal structured data. We delivered a full rewrite: a Next.js 16 public website, a React admin portal and a .NET 9 backend — all in a single Docker image on Azure. In 3 weeks and 116 commits.

I want a similar solutionThe Clinic Praha

6 languages

including RTL Arabic

CS · EN · DE · FR · RU · AR

1,333

URLs in sitemap

3× more than the old site (539)

97.6%

redirect coverage

no loss of SEO rankings

3 weeks

from first commit to handover

116 commits

The legacy Laravel site was blocking expansion to foreign patients

The Clinic Praha serves patients from Germany, France, Russia and the Arab world, but the old site only spoke Czech and English. On top of that, technical SEO problems were holding back organic growth — missing structured data, broken canonical URLs and fallback meta descriptions reading "Page not found" on treatment detail pages. The migration could not damage existing Google rankings or backlinks.

Site languages

only 2 (CS, EN)


Meta descriptions

fallback "Page not found"


Canonical URL

contained /public/ prefix


Structured data

only homepage JSON-LD


Hreflang coverage

incomplete, CS + EN only


Content updates

required a developer


Starting point

in 2 languages, no rich snippets, no self-service CMS

539 indexed URLs

Monorepo in a single Docker image: Next.js 16 + .NET 9 + React admin

We built the entire system from scratch. One .NET 9 process hosts the backend API, serves the static admin SPA and, via a YARP proxy, routes the root to Next.js SSR. Fewer containers, simpler ops, one CI/CD pipeline.

.NET 9 + EF Core + PostgreSQL backend

ASP.NET Core 9 REST API on Azure-managed PostgreSQL. The host app also serves the static admin and uses a YARP proxy to forward requests to the Next.js SSR process. Everything in a single Docker image from Azure Container Registry.

Public website — Next.js 16 + React 19 + Tailwind 4

Full SSR across all 6 languages (25 page types × 6 locales). Per-locale slugs, dynamically generated OG images on the Edge runtime and in-memory redirect cache for zero DB load on every request.

AI-assisted translation pipeline

Every entity has source Czech content and N translation records. A Czech edit triggers a TranslationBackgroundJob that issues a batch request to the Anthropic Claude API, polls asynchronously and applies the results to the database. A translation audit dashboard shows editors what is still missing.

AI sitemap matcher + redirect system

An LLM compared 536 URLs from the old site with 1,333 on the new one and proposed redirects for 97.6% of cases. A redirect database with 12-month retention, chain flattening (no A→B→C hops) and automatic redirects when an editor changes a slug. Middleware caches 308 redirects with a 3-minute TTL.

E-commerce-grade SEO

17 JSON-LD types: MedicalOrganization, Physician, MedicalProcedure, FAQPage, JobPosting, BreadcrumbList and more. AggregateRating from imported Google reviews drives star ratings in SERPs. Full hreflang for 6 languages plus x-default on every URL.

Admin portal with 14 CRUD sections

React 19 + Vite 8 + Material-UI 7. Doctors, treatments, branches, pricing, Q&A, academy, news, books, careers, reviews (auto-imported from Google), translations, redirects, CDN files, users. Google OAuth 2.0 with email allowlist plus audit trail with point-in-time recovery.

Analytics for PPC performance campaigns

Google Tag Manager with Consent Mode v2 (GDPR). Conversion events newsletter_signup, phone_click, email_click and booking_click carry CZK values for Google Ads Smart Bidding. Cookie banner and legal pages in 6 languages.

Solution Architecture

The whole system runs as one Docker container — a .NET 9 process hosts the API, the static admin and uses a YARP proxy to route the root to Next.js SSR. The database is Azure-managed PostgreSQL, media live in Cloudflare R2. Traefik handles reverse proxy and TLS, Cloudflare CDN + WAF absorbs attacks. Azure Pipelines automate CI/CD.

Solution Architecture

Integrations

Anthropic Claude APICloudflare R2Google Places APIGoogle OAuth 2.0EcomailGoogle Tag ManagerAzure DevOps CI/CD

Results

3× larger indexed footprint in Google

1,333 URLs in the sitemap versus 539 on the old site. New language variants open up rankings on Google.de, Google.fr, Google.ru and Arabic-speaking markets.

Rich snippets ready

17 JSON-LD structured data types verified in Google Rich Results Test. AggregateRating from imported Google reviews brings star ratings straight to the search results.

Migration without SEO loss

The AI matcher proposed redirects for 97.6% of old URLs. Chain flattening ensures redirects never chain up and link equity stays intact.

6 languages including RTL Arabic

Full SSR across 25 page types in 6 languages — including correct RTL layout for Arabic. Hreflang and x-default on every URL.

Self-service admin across 14 sections

The client manages content without a developer. AI translations into 6 languages run asynchronously in the background, audit trail provides point-in-time recovery, slug changes auto-create redirects.

PPC-ready analytics

Google Consent Mode v2 and value-based conversion events in CZK for Google Ads Smart Bidding. Cookie banner and legal pages localized into all 6 languages.

Technologies

  • .NET 9
  • ASP.NET Core
  • EF Core
  • C#
  • Next.js 16
  • React 19
  • TypeScript
  • Tailwind 4
  • Material-UI 7
  • Vite 8
  • PostgreSQL
  • Docker
  • Azure
  • Azure Container Registry
  • Azure DevOps Pipelines
  • Cloudflare R2
  • Cloudflare CDN
  • Traefik
  • Anthropic Claude API
  • Google Places API
  • Google OAuth 2.0
  • Ecomail
  • Google Tag Manager
  • Consent Mode v2

More case studies

MessyPlay.cz

MessyPlay.cz

Custom e-commerce instead of Shopify — 80% lower operating costs

E-commerceIntegrationAzure
Read more
Fotopast.cloud

Fotopast.cloud

SaaS platform for trail cameras — cloud photo storage and device management as a PWA

SaaSCloudAzure
Read more
JUST CS spol. s r. o.

JUST CS spol. s r. o.

Full replacement of an MLM sales network management system in 3 months

EnterpriseSystem replacementAzure
Read more

Want a similar solution?

Send us a message — we respond within one business day and schedule an intro call.

Get in touch

Architecture, cloud and integration for complex systems. A senior architect on every project.

Navigation

ServicesHow we workInsightsCase StudiesCareerContactAgency vs. freelancer vs. us

Services

DevelopmentCloudDevOpsAI & DataConsultingDelivery

Contact

CodeDock s.r.o.

Zlenická 863/9, 104 00 Praha 22

Czech Republic

info@codedock.com

Company ID: 14292769

VAT ID: CZ14292769


© 2026 Codedock

ContactPrivacy Policy
Book a call