Gleam Structured-Data Audit
SEO Believer prospect audit. Enter hub password to continue.
That's not right. Try again.
Gleam's schema is valid and clearly says "med spa." It just leaves its 639 reviews off the label.
Re-verified in a real browser against Google's own Rich Results Test: Gleam Medical Spa passes with zero errors and is correctly read as a Denver medical spa. There is exactly one high-value gap. Gleam's 639-review reputation is not bound into an AggregateRating in the schema, so unlike its competitor RESTOR, Gleam earns no gold stars in search. A handful of minor on-page items round out the list. This is a days-to-ship code fix, not a rebuild.
1. First, the good news: the schema is there and it is valid
An earlier draft of this audit was built on a blocked page fetch and got the headline wrong. Re-run cleanly in a real browser, here is the accurate picture, straight from Google's own tool.
Gleam Medical Spa already has structured data, and Google accepts it. The homepage emits a complete Rank Math schema graph: a Place, a combined HealthAndBeautyBusiness + Organization business node (with name, phone, address, hours, price range, geo coordinates, founding year, and social links), a WebSite, a WebPage, and an image. Google's Rich Results Test reports "2 valid items detected" with zero errors, and validator.schema.org agrees.
And Gleam clearly identifies as a medical spa. The page title is "#1 Laser Hair Removal & Medical Spa In Denver | Gleam Med Spa," the H1 is "#1 Medical Spa Denver," and the schema name is literally "Gleam Medical Spa." There is no ambiguity. Google knows exactly what this business is.
So this is not a "no schema" or "Google can't tell what they are" problem. Gleam's foundation is solid. The opportunity is essentially one field the schema leaves on the table, and it is worth real money. A few smaller on-page items follow it, but they are polish, not the story.
2. Quick refresher: what "structured data" does
Plain English, no jargon. So the one real gap below makes sense.
Structured data (also called "schema markup") is a hidden block of code on a web page that spells out, in a language search engines understand, exactly what the business is and what people think of it. A human reading Gleam's homepage instantly sees a Denver medical spa with five-star reviews and a list of treatments. Google's crawler leans on the structured-data block to confirm those facts, in effect reading: "This is a medical business named X. It is rated 4.9 stars from 175 reviews. It offers Botox, fillers, and laser."
When the rating is spelled out, Google can show rich results: the gold star ratings and review counts that appear directly in search and the map pack. Gleam's block correctly states who and where the business is. What it does not yet state, in a way Google can read, is how highly it is rated. That single omission is the whole ballgame.
3. The one real gap: 639 reviews, zero stars in search
If you read nothing else on this page, read this. Of everything in Gleam's structured data, exactly one thing is costing real money, and it is the highest-value, lowest-effort change available to Gleam right now.
Gleam's 639 reviews are not bound into an AggregateRating
Gleam is, by review volume, one of the most-reviewed med spas in the set. But that reputation is not wired into the structured data. The only rating element on the page is a decorative Elementor star widget (schema.org/Rating, value 5) with no reviewCount and no link to the business entity. It is paint, not a real AggregateRating.
The result: Gleam is not review-snippet eligible. No gold stars can appear under its listing in search, even though the 639 reviews genuinely exist. Its competitor RESTOR has real, bound AggregateRatings (4.9 from 175, 5.0 from 98, 4.8 from 142) and earns the stars. Gleam's single greatest asset is the one thing Google cannot currently see.
This is the fix. Binding the genuine review average and count into the business entity is a configuration change measured in hours, and it is the one item on this page that directly changes what a searcher sees. Everything else below is secondary on-page polish.
4. Both pass Google's test. The difference is the stars.
Both homepages were run through Google's Rich Results Test on the same days. Both are valid. The meaningful difference is not "broken vs working," it is that RESTOR's many valid items include review snippets (gold stars) and Gleam's do not. Tap either screenshot to open it full size.
Gleam Medical Spa
Google Rich Results Test, gleammedspa.com
- ✓Local businessValid. "Gleam Medical Spa," with NAP, hours, price range, geo.
- ✓OrganizationValid business identity.
- ✓Identifies as a med spaTitle, H1, and schema name all say "Medical Spa."
- ★Review snippetsNot eligible. The 639 reviews are not bound into an
AggregateRating. This is the one real gap. - ★Minor: business
@typeGeneric "Health & Beauty" rather than a medical type. A small polish item, not a categorization problem (the Google Business Profile category is already "Medical spa").
RESTOR Medical Spa
Google Rich Results Test, restormedicalspa.com
- ★Review snippetsBound
AggregateRatingper location: 4.9/175, 5.0/98, 4.8/142. Star-eligible. - ✓Local businessesEach location as its own
MedicalClinic. - ✓Medical type + specialty
MedicalBusiness+medicalSpecialtydeclared. - ✓Organization, Product, ArticleBroader markup footprint.
- ×Service / Offer markupRESTOR has none. Gleam's deep service pages actually win here.
5. Field by field: what Gleam has, and the one that matters
A line-by-line breakdown of the structured-data signals each site sends. Both were inspected at their live homepage source. Notice how much Gleam already has. Only one row, the bound rating, is worth real money.
| Schema signal | Gleam | RESTOR (benchmark) |
|---|---|---|
| Valid structured dataPasses Google Rich Results Test | Yes2 valid items, 0 errors | Yes22 valid items |
| Identifies as a med spaTitle, H1, schema name | Yes"Gleam Medical Spa" | Yes"RESTOR Medical Spa" |
| Name, address, phone (NAP)Core local-business details | YesAddress, phone, hours, geo | YesPer-location NAP |
| Price range | Yes$$ | Yes$$$ |
Social profiles (sameAs) | YesFacebook, Instagram | YesFacebook, Instagram |
| Service / Offer markupNamed treatments as offers | YesOn deep service pages (Botox, laser): Service + Offer | NoRESTOR ships no Service schema |
| Bound AggregateRating (stars)Powers the gold stars in search · THE GAP | MissingOnly a cosmetic Rating widget, no reviewCount, not bound | Present4.9/175, 5.0/98, 4.8/142 across locations |
Medical @type + specialtyMinor polish, not a categorization problem | MinorGeneric HealthAndBeautyBusiness; but the GBP category is already "Medical spa" | PresentMedicalBusiness + MedicalClinic + specialty |
@type row below it is genuine but minor: Gleam's Google Business Profile is already categorized as "Medical spa," which is the lever that actually drives the local pack, so the website @type is polish rather than a real categorization gap. And on Service markup, Gleam actually does something RESTOR does not.
6. The actual code on each page
For the technically curious: this is the real JSON-LD structured data from each live homepage. Gleam's block is genuine and complete. The amber comment marks the one field that matters, the bound AggregateRating.
// gleammedspa.com -- the live business node (valid) { "@type": ["HealthAndBeautyBusiness", "Organization"], "name": "Gleam Medical Spa", "url": "https://gleammedspa.com", "telephone": "+1-303-507-7823", "email": "[email protected]", "priceRange": "$$", "foundingDate": "2015", "openingHours": [ Mon-Thu 10-19, Fri-Sat 09-17 ], "address": { ...Denver, CO 80209... }, "geo": { 39.7111, -104.9423 }, "sameAs": [ facebook, instagram ] // THE GAP: no bound "aggregateRating" -- the 639 // reviews are not in schema, so no gold stars. // (Minor polish: a more specific medical @type // would be nicer, but the GBP category is // already correctly "Medical spa.") }
// restormedicalspa.com -- a clinic node { "@type": "MedicalClinic", "name": "RESTOR Medical Spa - Central Park", "telephone": "+1-720-585-3378", "priceRange": "$$$", "medicalSpecialty": [ "Dermatology","Medical Weight Loss","Medical Spa" ], "address": { ...Denver, CO 80238... }, "aggregateRating": { "@type": "AggregateRating", "ratingValue": "4.9", "reviewCount": "175" } } // Bound rating -> RESTOR is star-eligible. // (RESTOR ships no Service schema; Gleam's deep // service pages DO emit Service + Offer.)
7. Minor on-page polish (clearly secondary)
Everything in this section is genuinely minor, separate from the review-schema gap above, and ships in days. None of it changes what a searcher sees the way bound stars do. It is grouped here, with the raw evidence, precisely so it does not get mistaken for the headline. The deep service pages themselves are clean.
@type The website schema uses the generic local-business type
Gleam's homepage schema declares ["HealthAndBeautyBusiness","Organization"], the generic local-business type, rather than the more specific MedicalBusiness / MedicalClinic that RESTOR uses.
Why this is minor, and honest about it: Gleam's Google Business Profile category is already correctly set to "Medical spa," and the GBP category, not the website @type, is the lever that actually drives the local pack. So this is a small consistency polish, not a real categorization problem. Tightening the website @type to a medical type and adding a medicalSpecialty is a nice-to-have that makes the on-page signal match the (already correct) GBP signal.
@type and name on gleammedspa.com. Tap to open full size.The title leads with "Laser Hair Removal" before "Medical Spa"
The homepage <title> reads "#1 Laser Hair Removal & Medical Spa In Denver." For a business positioning as a full medical spa, leading with the single laser service ahead of "Medical Spa" slightly undersells the brand. A simple reorder puts "Medical Spa" first. Cosmetic, easy.
Two <h1> tags ship in the homepage source
The homepage source contains two <h1> tags, both reading "#1 Medical Spa Denver", a desktop copy and a mobile copy emitted by Elementor's responsive pattern. Only one renders per viewport, so a visitor never sees both on screen at once. But a page should have exactly one <h1>, and Google's crawler reads the source, where both are present. That makes it a small on-page SEO defect worth cleaning up by demoting one to a styled <h2> or hiding it from the accessibility tree.
<h1> tags present in the source (desktop + mobile copies). Tap to open full size./services hub page The /services hub page ships zero structured data
The deep service pages carry good Service + Offer markup, but the hub that links them (gleammedspa.com/services/) has no structured data at all. Google's Rich Results Test returns "No items detected" on that page, even though it crawled successfully. Adding basic business schema (and the dedicated phone number, currently footer-only) to that hub is easy polish.
/services hub. Tap to open full size.8. The precise fix list
Gleam already runs WordPress with the Rank Math SEO plugin, which is what generates the current (valid) schema. So most of this is configuration on top of a working setup, not custom development. Fix 1 is the one that moves the needle; everything after it is secondary polish.
Bind a real AggregateRating
Add an aggregateRating object to the business entity with Gleam's genuine average rating and reviewCount (the real 639-review reputation). This is what unlocks gold stars in search and the map pack. Highest value, lowest effort, and the only fix here that changes what a searcher sees.
Tighten the website @type
Optionally change the website type from generic HealthAndBeautyBusiness to MedicalBusiness / MedicalClinic and add a medicalSpecialty. Nice-to-have consistency only: Gleam's Google Business Profile category is already "Medical spa," which is the signal that actually drives the local pack.
Tidy the homepage on-page items
Reorder the title to lead with "Medical Spa," collapse the duplicate source <h1> to a single one, and add basic schema plus NAP to the schema-empty /services hub page.
Verify and monitor
Re-run the Rich Results Test to confirm the review snippet now registers, then watch click-through in Google Search Console.
OngoingThe bottom line
Gleam Medical Spa has valid structured data and Google clearly understands it is a Denver medical spa. This is not a missing-schema crisis, and it is not a rebuild. The foundation is solid: NAP, hours, price range, geo, social links, and real Service markup on the deep treatment pages (something the competitor RESTOR does not even have).
The opportunity is narrow and specific. There is essentially one gap worth real money: Gleam's 639-review reputation is invisible to Google's star ratings because it is not bound into an AggregateRating, so Gleam earns no gold stars in search while RESTOR does. Bind those genuine reviews into the schema and that changes. Everything else is minor on-page polish, a more specific website @type (Gleam's Google Business Profile is already correctly categorized as "Medical spa," so this is consistency, not a categorization problem), a title reorder, collapsing a duplicate source <h1>, and adding schema to the /services hub.
The good news: the headline fix is among the cheapest, fastest wins in local SEO. The reviews, the reputation, and the valid schema already exist. Gleam's single strongest asset simply is not labeled yet in a way Google can read. This is a days-to-ship code and configuration fix, not a content rewrite.
Prepared as an SEO Believer local-SEO structured-data diagnostic for Gleam Medical Spa (Denver / Cherry Creek). Re-verified June 2026 in a real Chromium browser. Screenshots captured live from Google's Rich Results Test (search.google.com/test/rich-results); schema payloads inspected from each site's live homepage source and confirmed against validator.schema.org. Benchmark competitor: RESTOR Medical Spa. This corrected analysis supersedes an earlier draft built on a blocked page fetch. · ← Hub