FIG. 04 — Case study

zemITis

A client-rendered React SPA rebuilt as a static Astro site: every page pre-rendered HTML, SEO guarded by a build gate, leads brought in by three price calculators.

Client
Zemitis Advisory Kft. — infosec consultancy
Year
2025–26
Role
SPA rebuild + SEO/AEO machinery + lead calculators
Status
Live Visit site ↗
Stack
AstroReact islandsGTMJSON-LDCoolify

The challenge

Search engines saw an empty page.

Zemitis Advisory is an information-security consultancy: NIS2 compliance, ISO 27001, outsourced security officers — exactly the topics clients research in search engines and, increasingly, AI assistants. The previous site, however, ran as a client-rendered React/Babel SPA export: the browser assembled the content, and crawlers saw practically none of it.

So the rebuild had two jobs. One: make the content genuinely readable — for Google and for AI search alike. Two: turn visitors into leads, because nobody buys a compliance service on impulse — first they want to know what it costs.

The system — 01 · Foundation

From SPA to static HTML

The site was rebuilt on Astro 5: every page is produced at build time as finished, pre-rendered HTML, with no JavaScript by default — React runs only as islands where real interaction is needed. What used to assemble in the browser now arrives from the server, ready.

The rest of the foundation is equally owned: self-hosted fonts, content-hash cache busting, Hetzner + Coolify hosting. A Hungarian-language, light, fast site.

FIG. 04.A — ZEMITIS.HU · HOME

The system — 02 · Findability

Content written for machines too

Structured data runs through the whole site: Organization, Service, FAQPage, BreadcrumbList and BlogPosting JSON-LD schemas describe the services to search engines. The blog is an Astro content collection — every post passes through the same schema and SEO layer.

AI search got its own layer: an AI-crawler-friendly robots.txt and an llms.txt generated dynamically at build time, so language models can consume the content as well. OG images are also generated per page at build time, with astro-og-canvas.

The system — 03 · Leads

A price calculator as lead magnet

Three service landing pages, each with its own interactive price calculator: NIS2 compliance, an outsourced information-security officer, and ISO 27001. The calculators run as React islands inside the static pages — the visitor gets a realistic price range instantly, the client gets a warmed-up lead.

The lead path is measured end to end: the calculators store UTM and gclid attribution and push a generate_lead event to the dataLayer; forms run on Formspark; tracking goes through GTM with Consent Mode v2 and a per-category cookie banner — everything denied by default.

FIG. 04.C — NIS2 PRICE CALCULATOR · LEAD MAGNET

The system — 04 · Build gate

SEO that cannot break

The weakest link in SEO is the human who forgets a meta description once. Here quality is guarded not by a checklist but by the build itself: every deploy passes through this chain, and if anything is missing, the site does not build.

  1. ASTRO BUILD

    Every page becomes HTML

    Astro renders every route to finished HTML at build time. Hydration JavaScript ships only for the React islands — not a byte anywhere else.

    ✓ all routes pre-rendered

  2. CHECK-SEO.MJS

    The gate

    A custom script combs the generated pages: a missing title, description, canonical or OG tag fails the build. Broken SEO physically cannot reach production.

    ✓ SEO check — 0 violations

  3. ASTRO-OG-CANVAS

    An OG image per page

    Every page gets its own share image at build time — link previews that never need manual upkeep.

    ✓ OG images generated

  4. LLMS.TXT

    What the machines read

    The build regenerates llms.txt from the current content, next to the AI-crawler-friendly robots.txt — AI search always gets a fresh map of the site.

    ✓ llms.txt refreshed

  5. COOLIFY

    Deploy with content hashes

    Assets ship as content-hashed files, so cache busting is automatic. The finished build runs on Hetzner, under Coolify.

    ✓ deploy done — hashed assets

FIG. 04.D — THE BUILD GATE, STEP BY STEP

Results

SEO here is not a checklist — it's a build condition.

pages shipped as pre-rendered HTML
100%
JS by default — islands only where needed
0
price calculators, each a lead source
3
JSON-LD schema types
6+
build gate — an SEO violation fails the build
1

This list is about the system built — traffic and lead figures belong to the client and are not public.