Case study · 2026

Saadiyat Marina — Bilingual Property Publication

German-first Next.js publication on Abu Dhabi's Saadiyat Island — 54 URLs with a complete hreflang cluster, built in 7 working days.

  • Next.js 15
  • TypeScript
  • JSON-LD
  • hreflang
  • Open Graph
  • Nodemailer
  • Vercel
Saadiyat Marina website homepage

Context

German-speaking buyers researching Abu Dhabi property. German serves at /, English at /en/. Many readers browse from the UAE, so language can't be guessed from location.

Constraints

  • Both languages must be indexed separately by Google
  • Editorial rules: no unofficial pricing; prices only where a release is verified
  • Tight timeline — launched in 7 working days

System design

            Request
               │
     ┌─────────▼──────────┐
     │  middleware.ts     │  acts on "/" only:
     │  sm_lang cookie?   │  en → 302 /en/ ; else German
     └─────────┬──────────┘
               │
   ┌───────────▼────────────┐        ┌──────────────────────┐
   │ app/(de)/…  app/(en)/en│◄───────│ content/*.ts  (DE+EN │
   │ one View per page type │        │ copy, typed)         │
   └───────────┬────────────┘        │ data/*.json (projects│
               │                     │ market, sources)     │
   ┌───────────▼────────────┐        └──────────────────────┘
   │ lib/seo                │
   │  routes.ts  URL contract (DE⇄EN pairs)
   │  metadata.ts canonical + hreflang + OG
   │  schema.ts  JSON-LD graph
   │  definePageSeo() → { metadata, graph }
   └───────────┬────────────┘
               ▼
   sitemap.xml (with xhtml:link alternates) · robots.txt · /og image route
               │
   api/enquiry → validation + honeypot → email / CRM webhook

Key decisions

  • One descriptor per page returns both head metadata and JSON-LD, so they cannot disagree.
  • No Accept-Language redirect. It was the reason /en/ wasn't indexing: Googlebot sends that header, so / redirected to /en/ on crawls and the hreflang cluster contradicted itself. Replaced with an explicit cookie set by the language switch.
  • 302, not 301, for the language redirect — browsers cache 301s forever, trapping users who switch back.
  • No IP geolocation — it would serve English to exactly the German readers in the UAE.
  • Editorial rules enforced in code, not just documented.

Results

  • Complete de / en / x-default hreflang on all 54 URLs
  • 36-project catalogue with Residence, ItemList, FAQPage, Article and BreadcrumbList structured data
  • Generated Open Graph images per page
  • Live on Vercel; delivered for the Dubai Haus group through KohzadTech

More projects

Rehan Khan face Picture

Let's work
together

Version
2026 © Edition
Local time
Get in touch