Vouch

Book a demo

All articles

AI search & GEO

·

11 min read

Schema markup for reviews & local business: a GEO primer

Schema.org structured data — Review, AggregateRating, LocalBusiness, FAQPage, Organization, BreadcrumbList — is machine-readable metadata that tells search engines and AI answer engines exactly what a page means, not just what it says. Get it right and you become easy to cite. Get it wrong — especially by marking up your own self-serving ratings — and you can lose rich results entirely.

Analytics dashboard on a computer screen

Key takeaways

Structured data doesn't create trust; it makes trust legible to machines. The reviews and ratings still have to be real, visible on the page, and compliant with the FTC Fake Review Rule.

Google will not show rich review snippets for self-serving Organization or LocalBusiness ratings — reviews of your own business, marked up on your own site, about your business as a whole. AggregateRating is safe on Product, LocalBusiness list pages, and third-party review sites; it is explicitly restricted for a business rating itself.

The exact JSON-LD you'd ship for a Google rich result is the same object an LLM's retrieval layer parses to answer 'is this place good?' — AI answer engines lean on structured data because it is unambiguous, unlike prose it has to infer meaning from.

Missing required fields (author, datePublished, reviewRating with a bestRating) is the single most common reason markup fails validation and never surfaces anywhere.

Why structured data is a GEO fundamental, not just an SEO checkbox

Generative Engine Optimization (GEO) is often framed as a content problem — write clearer answers, get cited by AI Overviews and Perplexity. That's true, but it skips a layer. Before an AI answer engine can cite a claim, something has to extract it, and extraction is dramatically easier from a typed, unambiguous JSON object than from a paragraph of prose it has to parse and infer.

This is exactly what Schema.org vocabulary, embedded as JSON-LD, provides. A Review node with a reviewRating, an author, and a datePublished is not a guess an LLM has to make from surrounding text — it's a labeled fact. The same is true for an address in LocalBusiness, a price in an Offer, or a question-and-answer pair in FAQPage. Classic search rich results and generative answer engines are, in this sense, reading the same file for the same reason: it's the cheapest, most reliable way to know what a page is asserting.

That doesn't mean markup is a substitute for real signal. It's a translation layer. If the underlying reviews are thin, unverified, or gated, structured data just makes that clearer to the machine, faster. The rest of this guide walks through the types that matter most for a review-driven local or multi-location business, with working examples you can adapt.

Review and AggregateRating: what they do, and where they're allowed

Review represents a single review of a specific thing — a product, a book, a recipe, a local business. AggregateRating represents a rolled-up average across many reviews, with a count. Both need an explicit target via itemReviewed, and both need enough required fields to validate: an author, a reviewRating with a numeric ratingValue and a bestRating, and — for AggregateRating — a ratingCount or reviewCount.

A minimal, valid example for a single product review:

{
  "@context": "https://schema.org",
  "@type": "Review",
  "itemReviewed": {
    "@type": "Product",
    "name": "Acme Trail Runner v3"
  },
  "author": {
    "@type": "Person",
    "name": "Jordan Lee"
  },
  "datePublished": "2026-06-18",
  "reviewRating": {
    "@type": "Rating",
    "ratingValue": "5",
    "bestRating": "5"
  },
  "reviewBody": "Held up on a 40-mile week with zero blister issues. Runs slightly narrow."
}

Here's where the rules tighten. In 2019, Google stopped showing review-star rich results for self-serving ratings: a review of Entity A, hosted on Entity A's own site, about Entity A as a whole — whether marked up directly or pulled in through an embedded third-party widget. Practically, that means you generally cannot mark up "4.8 stars, 320 reviews" for your own LocalBusiness or Organization on your own homepage and expect it in the SERP. The restriction does not apply to Product reviews on a product page, and it does not apply on third-party sites that are actually independent of the business being reviewed — which is exactly why your Google Business Profile rating shows stars on Google's own properties, while the same number embedded on your homepage will not.

LocalBusiness and Organization: identity, not opinion

LocalBusiness (and its more specific subtypes — Restaurant, Dentist, AutoRepair, and dozens more) describes what a business is: its name, address, phone, hours, price range, and geographic coordinates. Organization is the broader, location-agnostic version for the brand itself. Neither is about opinion — that's what Review and AggregateRating are for — but LocalBusiness is the anchor most other markup on a local page nests under or references.

{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "@id": "https://www.example-dental.com/#business",
  "name": "Example Family Dental",
  "image": "https://www.example-dental.com/office.jpg",
  "telephone": "+1-925-555-0142",
  "priceRange": "$$",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "1200 Main St",
    "addressLocality": "San Ramon",
    "addressRegion": "CA",
    "postalCode": "94582",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 37.7799,
    "longitude": -121.978
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday"],
      "opens": "08:00",
      "closes": "17:00"
    }
  ]
}

Note what's absent: no aggregateRating block. For a business marking up itself, adding one here is the single most common way well-intentioned local SEO markup runs into the self-serving restriction described above. If you want your rating visible in a rich result, the reliable path is a well-optimized, complete Google Business Profile — not an aggregateRating on your own LocalBusiness node.

FAQPage, BreadcrumbList, and site-wide Organization

Three more types round out most content and location pages. FAQPage marks up literal question-and-answer pairs that are visibly present on the page — not a laundry list of every question a user might have, and not a duplicate FAQ block reused across dozens of pages with only the business name swapped, which Google has explicitly said it may treat as spam. BreadcrumbList describes the page's position in your site hierarchy, which helps both search results and an AI crawler understand how a location page relates to a parent category or brand. Site-wide Organization markup — logo, legal name, contact points, social profiles via sameAs — establishes the entity behind everything else so a reviewer or answer engine doesn't have to guess who's speaking.

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Do you accept walk-ins?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes, we hold same-day slots each weekday morning. Scheduled appointments are given priority."
      }
    },
    {
      "@type": "Question",
      "name": "Which insurance plans do you take?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "We're in-network with Delta Dental, Cigna, and Aetna. Call the front desk to verify your specific plan."
      }
    }
  ]
}

Vouch's own marketing pages follow this same pattern in practice: a site-wide Organization and WebSite block on every page, plus a page-specific Article, FAQPage, HowTo, or BreadcrumbList layered on top depending on the content type — the same builders referenced throughout this piece, just applied to our own site rather than yours.

Common mistakes: fake reviews, incentivized ratings, and missing fields

Four mistakes account for most broken or rejected review markup:

  • Marking up reviews that don't exist on the page. Google's guidelines require that marked-up review content be visible to users on the page it's attached to. Markup that references reviews collected elsewhere, or that inflates a count beyond what's actually shown, is a policy violation, not just a quality issue.
  • Fake or incentivized reviews, marked up as if genuine. Structured data doesn't launder a review's provenance. A review solicited with a discount, written by an employee, or purchased from a third party violates the FTC Fake Review Rule (16 CFR Part 465) regardless of whether it's wrapped in valid JSON-LD — and platforms increasingly cross-reference marked-up ratings against their own review corpora to catch mismatches.
  • Self-serving aggregateRating on Organization or LocalBusiness. Covered above — it will not earn a rich result and can trigger a manual action if it looks manipulative rather than accidental.
  • Missing required fields. A Review without an author, a reviewRating without a bestRating, or an AggregateRating without a ratingCount will simply fail rich-result eligibility. Always validate before shipping — see the how-to below.

The throughline: structured data is a claim about what's true on the page, made in a format machines trust more than prose precisely because it's supposed to be unambiguous and verifiable. Abuse that trust and you lose the channel — for search rich results and for AI citation alike, since both increasingly treat pattern-matched, non-corroborated markup as a spam signal to discount rather than surface.

Why AI answer engines lean on structured data specifically

When an AI answer engine assembles a response to "is [business] good for families?" or "what's the best-rated dentist near me," it is doing retrieval under time pressure — pulling from a mix of its own index, live web results, and sometimes a direct crawl. Structured data shortens that path in three concrete ways: it disambiguates the entity being discussed (this LocalBusiness node, not a same-named business three states away, via @id and sameAs), it exposes numeric facts without requiring numeric reasoning over prose (a ratingValue versus inferring sentiment from adjectives), and it labels question-answer pairs as exactly that, which is a near-perfect match for how answer engines like to extract passage-level answers.

The practical implication for a review-driven business is that the same JSON-LD you'd add for a classic rich result is not a separate GEO investment — it's the same investment paying twice. Get the entity, the ratings, and the FAQ pairs right once, keep them accurate and current, and both channels benefit from the same underlying discipline: real reviews, complete required fields, and markup that matches what's actually on the page.

How to add review schema to your site without tripping Google's rules

A step-by-step approach to implementing Review, AggregateRating, and LocalBusiness JSON-LD that validates, stays compliant, and is actually eligible for rich results.

1

Decide what the review is actually about

Identify a concrete itemReviewed target — a Product, a Book, a Recipe, or a specific service — rather than your business as a whole. This single decision determines whether AggregateRating is even eligible for a rich result.

2

Confirm the reviews are real, visible, and unincentivized

Only mark up reviews that a visitor can actually see on that page, collected without discounts, gating, or employee authorship. If the reviews wouldn't survive an FTC Fake Review Rule audit, don't mark them up — fix the collection process first.

3

Fill every required field

Each Review needs author, datePublished, and a reviewRating with ratingValue and bestRating. Each AggregateRating needs ratingValue and a ratingCount or reviewCount. Missing any of these disqualifies the whole block.

4

Keep self-serving ratings off Organization and LocalBusiness

Do not attach aggregateRating to a LocalBusiness or Organization node representing your own company on your own site. Route star ratings through your Google Business Profile and third-party review platforms instead, where they're eligible.

5

Validate before you ship

Run the markup through Google's Rich Results Test and the Schema.org validator. Fix every error and warning — partial credit doesn't exist for structured data; it either validates cleanly or the whole block is ignored.

6

Re-check after every content or template change

Structured data drifts out of sync with the visible page silently — a redesign that removes a review widget but leaves the JSON-LD behind is a policy violation waiting to be flagged. Treat schema as code that needs the same review as anything else you ship.

Frequently asked questions

Can I add AggregateRating schema for my own business's overall star rating?

Not for a rich result. Google stopped displaying review-star rich results for self-serving ratings in 2019 — reviews of Entity A hosted on Entity A's own site, describing Entity A as a whole, whether marked up directly or via an embedded third-party widget. AggregateRating remains eligible for Product schema, and for genuinely third-party review sites rating a business that isn't their own. For your own business's star rating, a complete Google Business Profile is the reliable path to stars in search.

Does adding review schema make Google think my reviews are more trustworthy?

No. Structured data describes what's on the page; it doesn't vouch for authenticity. Google and other platforms cross-reference marked-up ratings against visible page content and their own review data, and mismatches or patterns typical of fake or incentivized reviews are treated as a spam signal, not a trust signal. The markup should follow real, visible, unincentivized reviews — never substitute for them.

Is FAQPage schema still worth using if Google limits how many rich results it shows per page?

Yes, for a different reason than SERP real estate. Even when Google shows only one expandable FAQ in the SERP, the same JSON-LD is a clean, extractable question-answer pair for AI answer engines assembling a response. Keep it to questions genuinely answered in the visible content, and don't reuse an identical FAQ block across many pages — that pattern reads as manipulative regardless of intent.

What's the minimum structured data a local business page needs?

A LocalBusiness (or the closest subtype) with name, address, telephone, and openingHoursSpecification covers the identity basics. Layer in BreadcrumbList for site hierarchy, and FAQPage only if there's a genuine, visible FAQ section. Add Review or AggregateRating only where the target and required fields are unambiguous and the content is on-page — an incomplete review block is worse than no review block, since it can fail validation and drag the rest of the page's markup into question.

How does Vouch help with review-related structured data?

Vouch focuses on the input to structured data — collecting real, verified reviews across Google, Yelp, Facebook, Tripadvisor, and Trustpilot without gating, and routing negative feedback to service recovery rather than suppressing it. That's the compliance foundation any Review or AggregateRating markup depends on. Vouch's own marketing site uses the same JSON-LD patterns described in this guide — Organization, WebSite, Article, FAQPage, and HowTo — as a working reference for how the pieces fit together.

Related reading

Run transactional NPS on autopilot with Vouch

Trigger event-based surveys over email, SMS, and WhatsApp, recover detractors, and turn promoters into compliant public reviews — without lifting a finger.

Book a demoStart free