Project · 2026

Dra. Débora Mausolff — Site & SEO

Website for Dr. Débora Mausolff (Clínica Mithie, Canoas, Brazil) — a local-SEO engine in React: 113 URLs, 86 model-generated city × service pages, 18 structured-data types, a blog and WhatsApp booking that knows which city she attends in. Prerendered and deployed on Azure.

A clinic website built as a local-SEO engine: each of the 113 pages exists to be found on Google in the right city — and to convert into a WhatsApp booking, message already written.

Screenshot of Dra. Débora Mausolff's site home: cream-toned hero with the facial and body harmonization headline, booking buttons and the highlights strip.

Professional website for Dr. Débora Mausolff (Clínica Mithie), an advanced-aesthetics physician who attends at 5 clinics in 4 cities of southern Brazil — Canoas, Esteio, Tapes and Sertão Santana. The goal is strong organic presence: being found in local searches (Botox, facial harmonization, cryolipolysis… in the right city) and converting into bookings. Built in public since January 2026: 126 commits in 8 months.

It is a local-SEO engine by construction. A model with 16 services (Botox, facial, lip and gluteal harmonization, collagen biostimulators, cryolipolysis, rhinomodeling, dark circles, microneedling, spider veins…) crossed with the cities generates 86 programmatic landing pages — each with its own title, description, canonical and content. Together with 11 blog URLs, 3 procedure pages and the institutional ones, that is 113 URLs in the sitemap, with lastmod stamped at build time.

Real clinic structured data: 18 JSON-LD types per route — MedicalBusiness and MedicalClinic, Service with Offer, Person with Occupation and professional credential (EducationalOccupationalCredential), FAQPage with Question/Answer, BlogPosting, BreadcrumbList, ItemList, ImageObject, Organization and WebSite. Plus robots, sitemap and an llms.txt for AI discovery. The SEO routine is part of every change, not a step afterwards.

An SPA search engines can read: a lightweight post-build prerender (esbuild) generates, for every indexable route in the sitemap, the HTML with a complete head — title, description, canonical, robots, Open Graph, Twitter and JSON-LD, marked so react-helmet adopts them without duplicating — and a body with H1 and content. A crawler without JavaScript sees the real page; the visitor sees the React app take over on mount.

Conversion that knows the schedule: the booking CTA opens a modal to pick the city and clinic, and WhatsApp opens with the message pre-filled per city and service. A blog with 7 articles answering real questions (how long Botox lasts, preventive Botox, when to start, does cryolipolysis work?, how many sessions, spider-vein care), a results gallery with 25 images, testimonials and the Botox Club page.

A React front organized in MVC — 17 models (data, copy, SEO, consent), 8 controllers (hooks) and 45 pages with 18 components — on a custom design system: 32 tokens, warm palette (cream and brown), Nunito and an editorial serif (Cormorant / EB Garamond). 33 images in WebP.

LGPD that actually blocks: Google Analytics and the Meta Pixel only load after consent in the banner; Privacy Policy, Terms of Use and Data Deletion pages. A build that defends itself: source maps removed and verified absent before prerendering. Continuous deployment on Azure Static Web Apps via GitHub Actions, with SPA fallback and a custom 404.

By the numbers

113
URLs in the sitemap
86
City × service pages
16
Services modeled
5
Clinics in 4 cities
18
JSON-LD types
7
Blog articles
45
React pages (views)
33
WebP images
0
Source maps in production
126
Commits since Jan 2026

Engineering decisions

  1. 01

    SEO is part of the task, not an extra step

    Every page change already updates title, canonical, Open Graph, JSON-LD, sitemap and internal links — the SEO routine is built into the workflow. The sitemap gets lastmod stamped at build time, and the llms.txt describes the site for AI agents.

  2. 02

    86 landing pages from a single model

    Instead of writing page by page, a model with 16 services crossed with the cities served generates the 86 city × service pages — each with its own title, description, canonical and content, capturing local search intent without pointless duplication. Change the model, all of them change.

  3. 03

    An SPA search engines can read

    No framework migration: a lightweight post-build prerender, with esbuild, generates for every indexable route the HTML with a complete head (marked so react-helmet adopts it without duplicating) and a body with H1 and content. A crawler without JavaScript sees the real page; the visitor sees React take over on mount.

  4. 04

    Real clinic structured data

    18 JSON-LD types per route: MedicalBusiness and MedicalClinic, Service with Offer, Person with Occupation and professional credential, FAQPage with questions and answers, BlogPosting, BreadcrumbList and ItemList. Google understands she is a physician, what she does, where and for how much — not just a pretty page.

  5. 05

    Booking that knows where she attends

    She attends at 5 clinics in 4 cities. The CTA opens a modal to pick the city and clinic, and WhatsApp opens with the message pre-filled per city and service — whoever arrives via the cryolipolysis-in-Esteio page sends the right message, to the right place.

  6. 06

    LGPD that actually blocks

    The consent banner is not decorative: Google Analytics and the Meta Pixel only load after acceptance, driven by a consent model and controller. Privacy Policy, Terms of Use and Data Deletion pages close the loop.

  7. 07

    A build that defends itself

    The build pipeline strips source-map references and then verifies none remain before prerendering — source code never ships to production by accident. WebP images, cache headers and a custom 404 configured on Azure Static Web Apps.

  8. 08

    MVC architecture on the front

    17 models (data, copy, SEO, consent), 8 controllers (hooks) and 45 pages with 18 components. Data and copy separated from logic and screens: services, cities and articles scale without turning into a mess — and a 32-token design system keeps everything consistent.

Architecture

Models

Data · copy · SEO

17 models: services, cities and clinics, blog, per-route SEO, consent.

Controllers

8 hooks

Booking, consent, navigation and screen state.

Views

45 React pages

Home, procedures, 86 city × service pages, blog, club and institutional pages.

SEO por rota

react-helmet-async

Title, canonical, OG and 18 JSON-LD types; sitemap, robots and llms.txt.

Prerender

Light SSG with esbuild

HTML with head and content per indexable route; React takes over on mount.

Conversão

WhatsApp

City-and-clinic modal + message pre-filled per service.

LGPD

Consent gating

GA and Meta Pixel only after consent; Privacy, Terms and Data Deletion.

Azure SWA

GitHub Actions

CI build with no source maps, SPA fallback, custom 404 and caching.

Stack

ReactReact Routerreact-helmet-asyncJSON-LDesbuildAzure Static Web AppsGitHub Actions