We A/B tested 14 schema markup patterns against ChatGPT. Here's what won.
Over the back half of 2025 we ran 14 schema markup variants across a controlled set of client sites and measured the ChatGPT recommendation rate. The results changed how we ship schema.

Over the back half of 2025, our engineering team ran a controlled experiment across 28 client sites in three categories — restaurants, professional services, multi-location retail. We tested 14 schema markup variants and measured the recommendation rate from ChatGPT for category-relevant queries.
The results changed how we ship schema.
The setup
Each client site got assigned to one of two variants, randomly within category. We held everything else constant: same content, same domain age, same Google Business Profile signals, same review counts. Only the schema differed.
We measured recommendation rate as: % of probe queries (a fixed set per category, 32 queries each) where the client's name appeared in ChatGPT's response, using the AI Mention Tracker's standard probing methodology. We ran scans weekly for 16 weeks.
This is not a peer-reviewed study. It is a real-world test on real client domains. We're sharing the results because the directional findings are useful even if the magnitudes won't generalize cleanly.
The 14 variants
In rough order of how much we expected each to matter:
- Baseline
LocalBusinessonly LocalBusiness+aggregateRatingLocalBusiness+Service(each service marked up individually)LocalBusiness+Service+OfferlinkedLocalBusiness+Person(practitioners marked up)LocalBusiness+Person+sameAs(LinkedIn, professional directories)LocalBusiness+FAQPageLocalBusiness+Review(individual reviews, not just aggregate)LocalBusiness+MenuSection/MenuItem(restaurants only)LocalBusiness+OpeningHoursSpecificationwith explicit holiday handlingLocalBusiness+Brand+Organizationlinkage- Full graph: all of the above, internally linked via
@idreferences - Full graph +
BreadcrumbList - Full graph +
BreadcrumbList+WebPageper page withmainEntityset
What won
The ranked findings, with effect sizes (recommendation rate delta vs. baseline at week 16):
1. Full graph with @id linkage (variant 12): +24 percentage points. This was the biggest single win. Connecting entities via @id references — so the parser can see that Service X is offered by Organization Y performed by Person Z — meaningfully outperformed any individual schema type added in isolation. The connections matter more than the volume.
2. Person schema with sameAs (variant 6): +18 percentage points. Particularly strong in professional services and any category with named practitioners. Marking up the human behind the service, with verified external links, lifted recommendations more than we expected.
3. Individual Review markup (variant 8): +14 percentage points. Not aggregateRating — that's been baseline for years. Marking up specific, attributed reviews with Review schema produced a clear lift. Caveat: this only works for genuine, FTC-compliant reviews; do not invent these.
4. Service-level pages with full schema (variants 3-4): +11 percentage points. Granular Service markup outperformed broad service descriptions on a single page. Each service deserves its own URL and its own schema.
5. MenuSection / MenuItem for restaurants (variant 9): +9 percentage points within restaurants. Restaurant-specific finding, but worth noting because most restaurant CMSs ship menu pages with no schema at all.
The variants that didn't move the needle in our test: baseline aggregate rating only, FAQ schema (counterintuitive — we expected this to win), explicit holiday opening hours, breadcrumbs alone.
What we changed in our pipeline as a result
Three things, effective Q4 2025:
- Every site now ships full graph schema with
@idlinkage from launch day. No more incremental rollout. The graph is the unit of work. Personschema is mandatory for any client with named practitioners. Previously optional. Now baseline.Reviewmarkup is included by default, with a curated rotation of recent verified reviews. Compliance review by client legal where applicable.
Caveats and what we don't claim
This was 28 sites over 16 weeks. We did not test on Claude, Gemini, or Perplexity in the same controlled setup, though anecdotally we see similar but not identical patterns there. We ran category-level queries; long-tail tests would likely produce different magnitudes.
We're not claiming "this is the schema strategy." We're claiming "based on our data, here's what moved the metric we measured."
What to do this week
If you have schema, audit whether your entities are linked via @id or just thrown on a page in isolation. The linkage was the biggest single finding in our study. Most schema implementations we audit miss this entirely.
If you don't have schema, you have a more fundamental conversation to have first. Start with Why we shipped schema before "AI SEO" had a name.



