Dra. Marcia Babo

Dra. Marcia Babo — Website, SEO and conversion for a medical practice

The website of a general practitioner and hematologist trained in Integrative Functional Medicine, based in Curitiba, seeing patients in person and by telemedicine. Someone searching for a health topic on Google lands on a page dedicated to it, and booking is one tap away on WhatsApp. Behind the scenes, the site measures where those taps come from.

YEAR
2025 — present
TYPE
Real client · In production
ROLE
Full-Stack Developer
DRA. MARCIA BABO: o site no computador e no celular
76
URLs in the live site's sitemap
55
condition and symptom pages, generated from content files
10
blog articles
6
service pages, by specialty, city and online consultation

Problem.

A private practice depends on being found by people who search and on turning the visit into a WhatsApp conversation. That takes many pages, one for each topic people look up, loading fast on mobile, with reliable contact measurement and within medical advertising rules, which limit what the site can claim.

Solution.

A Next.js 14 (App Router) site with pages per condition and per symptom, service pages by specialty and city, an online consultation page and a blog. Content lives in typed files, with a script-generated registry and a dedicated share image for every page. The WhatsApp button opens a message that already carries context and is tracked as a conversion, and a protected panel lets the doctor update the video section without redeploying the site.

Result.

Live at dramarciababo.com.br, with 76 URLs in the sitemap, a video panel, WhatsApp contact tracking, and technical and Google Ads audits documented in the repository itself.

The hard part.

Every project has a point where the obvious solution doesn't cut it. Here, it was these.

Measuring conversion without paying for it in speed

Google Tag Manager and the tags it brings blocked the main thread for about 2.8 s in mobile Lighthouse. Instead of dropping measurement, loading was deferred to the first interaction, with a 4 s maximum wait and a last attempt when the tab is closed. Because the dataLayer is created in the head, no click is lost along the way: events queue up and GTM processes them on start. Button tracking is a single inline click listener in the head, and the button components stay Server Components, with no client JavaScript.

Dozens of content pages without a CMS

Each condition, symptom, service and article is a TypeScript file with its own type. A script scans the folders and generates the registry, so creating a page means writing a file and running a command. Drafts never reach the sitemap, not even in previews, and lastmod comes from the content's review date. For share images, Next's generator (next/og) broke the project's build, so each page gets a static JPG produced by a sharp script, which also removes server cost.

Third-party reviews without depending on a third party

Public Doctoralia reviews are fetched on the server, parsed with cheerio and cached for 24 hours. Without the cache, every visit would fire up to four external requests and the home page would depend on the other site's uptime. If the fetch fails, the section falls back to a placeholder text. The route that exposes the same data limits the pages it accepts and uses edge caching, so it doesn't become an open scraping gateway.

A health site has limits on what it can say

Medical advertising is regulated, and the site's copy has to respect that. On the technical side this became structure: content versioned in files, a review date on every page, drafts separated from what is published, and a tracking and privacy audit documented alongside the code, with risks prioritized by effort.

What I did.

  • Site architecture in Next.js 14 and implementation of the home, condition, symptom, service and blog pages
  • A content model in typed files, with one script generating the page registry and another generating each page's share image
  • Sitemap and robots generated at build time, with drafts kept out of the sitemap and a review date on every page
  • Doctoralia reviews section fetched on the server and cached
  • Video panel with login, YouTube link import and storage on Vercel Blob
  • WhatsApp click tracking, deferred Google Tag Manager loading and real-user Core Web Vitals sent to GA4
  • Lighthouse audit script over every sitemap URL, on mobile and desktop
  • Documentation of the Google Ads plan and of the technical and campaign audits

Stack.

Next.js 14ReactTypeScriptTailwindVercel BlobGoogle Tag Manager

Have a similar project?

Tell me the problem — I answer personally.