01Glowlight
The Glowlight plugin
The clinic’s site was missing the fundamentals: per-page titles and descriptions, structured data, a robots.txt Googlebot would honor, and a sitemap that matched the site. On every service page, the only h1 in the markup belonged to a promotional popup, so Google read each service page as a page about a coupon.
The site runs Elementor, where content edits live in a page builder and get overwritten. Anything typed into an admin field is one careless save away from gone.
So none of the fixes went into the admin. They went into a plugin that rewrites the output server-side, module by module, every change under version control and reversible one file at a time.
Titles and meta
Per-page titles and meta descriptions for every indexable page, generated with fallbacks rather than hand-entered.
Structured data
A complete graph: organisation, local business, services, providers and breadcrumbs, plus FAQ schema on the service pages.
Star ratings
SERP star ratings via AggregateRating, backed by the clinic’s real reviews.
The headline fix
Real per-page h1 elements for Googlebot, server-side, without touching a single Elementor template.
Locations
A locations hub with its own page for each clinic.
Measurement
Microsoft Clarity with a guard that masks patient fields on the page, plus a GA4 event when a booking completes.
I shipped the first version before I was hired. Each later change went out as its own narrow deploy, so its effect could be read on its own in Search Console. Most of the queries I tracked moved up, several from page two to page one, and the weight-loss pages I targeted first held the top spots while the wider set of local weight-loss searches climbed. The plugin got me hired, and the booking rebuild came with it.
02Desert Sun
The Desert Sun audit
A search audit of the sister brand, run against the live site’s raw HTML rather than rendered pages, and against sixteen months of Search Console data. Every finding was checked against the live site and Chrome’s field data before it went in the report, and two of my own earlier flags did not survive that check.
- Held upPage-level SEO
- The gapStructural: a salon in dozens of towns and no location pages, so it could only rank locally through its homepage and its Google listings
- WonSearches for its own name plus a city
- Nearly invisibleThe service-plus-“near me” searches where most of the volume is
- Put firstConversion tracking and campaign tagging, ahead of most of the on-page work, because without them no channel’s return could be measured
I have since built the location pages as a WordPress plugin, one page per salon, generated from data pulled out of the site’s own store locator.
03Local search
Making local search measurable
Clicks from the brands’ Google Business listings were landing in analytics as direct traffic, so the biggest local channel a multi-location business has could not be measured.
- Every listing retagged across the three brands, each pointed at its own canonical location page with campaign tags
- A custom analytics channel group, so those clicks report as their own source
- A minimal bulk upload. Re-uploading Google’s own export flags phantom changes to addresses and categories and can trigger re-verification, so the sheet carried only the columns being changed
- Booking checkout events wired into GA4, so organic search’s share of bookings is measured instead of guessed
Verified three ways before it counted as done.
- A column diff proving only the website field changed
- HTTP checks that the tags survived every redirect and that each listing reached the right store
- A real click-through on a live listing