SEO-optimised healthcare marketing site with Schema.org structured data and perfect Core Web Vitals

Akku Healthcare is a US-facing revenue cycle management company that needed a clinic marketing site — not a portfolio piece, but something a practice manager would find at 11 PM when searching for billing support. The brief said: fast, trustworthy, findable. What the brief did not specify was how to be trustworthy to Google's health-content algorithms, and that gap is where the interesting engineering happened.
The default move is to drop in a component library, add some <meta> tags, and ship in three days. I held off on that for long enough to understand why it was wrong for this context. Healthcare search is subject to YMYL — Your Money or Your Life — scrutiny. Google applies different quality signals to medical content than to SaaS or e-commerce. The structured data layer is not optional decoration here; it is the machine-readable document that tells the crawler what kind of entity the site represents, which services it offers, and whether the physicians listed are real licensed people. Skipping that layer in favour of speed would have capped organic reach before the site ever indexed. The stakes of the wrong default are invisible until the site is live and not ranking.
So I mapped the Schema.org medical vocabulary before writing the first component. Four entity types: MedicalOrganization for the clinic, Physician for each provider, MedicalSpecialty for each discipline, and Service for offered procedures. Each entity cross-links to the others — the Physician entities reference the MedicalOrganization as worksFor, the Service entities reference both. It is a small graph, but a coherent one, and coherence is what the Rich Results validator rewards.
The site runs on Next.js 16.1.6 with React 19. App Router throughout, React Server Components for every page without interactivity — which is most of them. The lead-capture contact form is the only client component, isolated by design. This keeps the main bundle trim and the Time to First Byte low even on cold starts, which matters when page speed is a proxy for clinic professionalism in the visitor's mind.
The CSS decision took more thought than the framework choice. A component library is the obvious default for a five-day engagement: reach for shadcn, compose cards and sections, ship. I asked whether that was optimal for a healthcare brand with a defined visual identity. The answer was no. Design-system libraries carry visual opinions tuned for SaaS dashboards. A clinic trying to signal medical authority does not want to fight against those opinions in every override. Tailwind CSS v4 utilities, zero component primitives on top, every layout piece hand-authored. The resulting CSS is lean, specific to this brand, and has no runtime overhead.
The contact form follows the same logic: a Next.js server action, basic validation on both sides, no form library. For a single contact form on a marketing site, pulling in react-hook-form adds more surface area than it eliminates.
The metadata layer is a typed generateMetadata utility that every route imports. It produces Open Graph tags, canonical URLs, and the JSON-LD script block from a single source of truth per page. No page can accidentally ship without a canonical. The OG image URL is always an absolute path — something that silently breaks on a surprising number of Next.js sites when deployed behind a CDN.
Five days, twelve commits, 5,937 lines of code. The honest framing: this is a compact project. A capable junior developer with enough time could build the same structure. What the five days bought was knowing which SEO decisions mattered before opening the codebase — understanding that medicalSpecialty is the field that drives Google's classification of what the clinic treats, rather than the more prominent healthcareReportingData field that looks important but signals less. That distinction is not in any tutorial. It comes from reading the Schema.org spec carefully and testing with the Rich Results tool until every entity returns green.
The deliverable is a site that passes Core Web Vitals on both mobile and desktop, carries machine-readable structured data a crawler can validate without guessing, and routes leads without a third-party form service touching the data. The infrastructure — the JSON-LD generation pattern, the metadata utility, the server action form — is reusable. The TypeScript types enforce structured data correctness at compile time so a stale entity field does not silently degrade search visibility over time.
The question worth asking before every healthcare web engagement is: does the structured data graph tell the complete story, or does it just pass the validator? Those are different bars, and the gap between them is where organic performance diverges.
JSON/Markdown data-driven agency website with Splitting.js text animations and ScrollOut scroll effects
Next.js blog with Hygraph GraphQL, a hand-rolled AST renderer, and AdSense monetisation
XState-driven PMS for real property deployment
Did this resonate?