WHA Docs
Measurement

Migration & SEO Continuity

How search and analytics carried through the rebuild — what stayed, what changed, the fixes an audit of the live setup turned up, and what to watch after cutover.

This page records how search and analytics carried across that website refresh: what was preserved, what changed, what the launch audit flagged, and the post-launch checks that confirm it held.

What the migration preserved

  • URL structure/services/, /providers/, /locations/, life-stage and article paths are intact. Slug changes are handled with 301s via the Redirection plugin, so old URLs don't 404.
  • Titles and meta descriptions — preserved (the homepage title and description are identical between old and new).
  • Tracking infrastructure — FreshPaint → GA4, Meta and Google Ads, plus the first-party event layer, are live in production.
  • Production-only indexing — staging and dev are auto-noindex by environment, so there's no duplicate non-production site competing in search.

What changed

  • Structured data — the theme produces its own structured data and has guardrails in place preventing it conflicting with other schema tools.
  • How events are tracked — the events that feed analytics used to be matched on page markup (CSS selectors set up in FreshPaint); the theme now emits them directly in code. This is the change that needs the most attention, and most of this page is about it.

Structured data

Three tools can output schema: the theme, Yoast and Schema Pro. To avoid duplicates, each schema type has a single source:

  • The theme is authoritative for the medical entities: MedicalOrganization (home), Physician (providers), MedicalClinic (locations). The organization lists every location as a department; each clinic references the org via parentOrganization, so the multi-location group reads as one entity.
  • Yoast schema is disabled — Yoast handles meta, Open Graph and sitemaps only.
  • Schema Pro keeps everything except the global Organization — it still emits WebSite, breadcrumbs and anything configured (FAQ, service pages). Only its Organization is suppressed, in favor of the theme's richer, linked one.

See SEO → Structured data for the full breakdown of which tool handles what. Validate output with Google's Rich Results Test after a cache purge.

Analytics audit

The event change is what needs the most attention.

Destinations (Snapshot from 2026-06-01)

FreshPaint forwards to three integrations. Delivery over the audit's 7-day window:

DestinationDelivered (7d)
Google Analytics 4 (Proxy)42,000
Facebook Conversions API58,000
Google Ads900

The Google Ads number is the giveaway: far below GA4 and Meta because most Ads conversions were tied to events that no longer fire (see below).

Events

Two layers of tracking run side by side: the named events the theme emits in code and the legacy events configured in FreshPaint that are based on CSS selectors and URL rules. Most events are fine, but a handful of legacy events need adjustments.

What needs attention

Several of these collapse into the booking funnel: the theme's schedule_an_appointment_start / _step / _complete / _abandon events, which carry the appointment type (type_id / subtype_id), step, provider_id and location_id as properties. Where the table says use the funnel, it means define the conversion on those events and filter by property (e.g. "gynecology appointment" = schedule_an_appointment_complete filtered to its type_id), instead of maintaining a separate CSS/URL-matched event for each appointment type.

EventActionWhat to do
Finalize Appointment – MyHealthEditRepoint the Ads conversion to schedule_an_appointment_complete
Schedule a Gynecology / Wellness AppointmentSupersededUse cta_click or the booking funnel
Appointment Refinement – Gynecology / WellnessSupersededUse the funnel (appointment type is a property)
Conversion Refinement – Common ConcernSupersededUse the funnel
Schedule Office / Wellness VisitSupersededUse cta_click or the funnel
Click Blog Library (Blog/Articles nav link)SupersededBlog/articles traffic already shows in page_view; retire it
wizard_start / wizard_stepRemoveReplaced by schedule_an_appointment_*

Conversions to define in FreshPaint

Some intent and SEM conversions the theme doesn't emit still need defining in FreshPaint. Each is a FreshPaint event (a URL or href rule). The SEM conversions also need a transformation to send them to Google Ads — see Conversions → Making an event a Google Ads conversion.

ConversionTriggerDefine as
Find a ProviderURL /providers/Event + Google Ads transformation (SEM)
Find a LocationURL /locations/Event + Google Ads transformation (SEM)
View Check InsuranceURL /check-accepted-insurance/Event
MyHealth LoginURL /my-health-login/Event
Article Views — Gynecology / Pregnancy / WellnessURL /gynecology/*, /pregnancy/*, /wellness/*Event
Click Careershref applicantpool.comEvent

Match on path or named event, never full URL. Exact full-URL matches ($current_url Equals …) silently exclude paid traffic carrying ?gclid= / UTM params. Define the URL rules above on path, not the full query string.

  • Conversions — how events become GA4 key events and Ads conversions, and the full conversion inventory
  • Event Tracking — the named-event layer in detail
  • SEO — structured data and how the sources are split
  • SEO Strategy — audience, intent and KPIs

On this page