MapLift
Technical SEO Guide with JSON-LD Code Examples

Review Schema Markup: Complete Implementation Guide for Local Businesses

Review schema markup unlocks star ratings in Google search results and feeds structured signals into AI Overviews. This guide covers every schema type, every eligibility rule, every line of code, and the critical self-serving reviews restriction that most Indian businesses get wrong.

JSON-LD code examples for every schema type
Google eligibility rules clearly explained
India-specific implementation tips
Review schema markup transforming JSON-LD code into golden star ratings in Google search results

TL;DR — Key Takeaways

Review schema markup is JSON-LD code that unlocks star ratings in search

It tells Google the rating value, review count, review text, and author — and generates the gold stars you see under search results. Pages with review rich snippets average 15–30% higher click-through rates.

Local businesses cannot show stars for their own Google reviews

Google's self-serving reviews rule (2019) blocks star snippets for LocalBusiness and Organization schema when the business controls the reviews. The workaround: mark up individual services or menu items as Product schema instead.

AggregateRating must be nested inside a parent schema type

A standalone AggregateRating block does not qualify for rich results. Nest it inside Product, Recipe, Book, or another eligible type. This is the most common implementation mistake.

Review schema feeds AI Overviews — not just rich snippets

Pages with structured data earn AI citations at 2.7x the rate of pages without it. The reviewBody property is semantic content that AI answer engines actively extract and reference.

Always test with Google Rich Results Test before going live

The tool renders your page fully (including JavaScript) and confirms eligibility before Google crawls your production URL. Run it every time you modify schema.

If you've ever searched for a product on Google and seen those gold stars beneath a result before you even click — that's review schema markup doing its job.

Structured data is code you add to a page to help Google understand the content on it. When it comes to reviews, that code follows a vocabulary defined at schema.org and tells Google: here is a rating, here is who gave it, here is what they said, and here is the overall average. Google uses that information to display rich snippets — star ratings, review counts, and rating values — directly in the search results page.

I've worked with dozens of Indian local businesses on their structured data implementations, and review schema is consistently one of the most misunderstood areas. People either don't implement it at all, leaving rich snippet opportunities on the table, or they implement it on pages where Google explicitly will not honor it, wasting developer time and potentially drawing a manual penalty.

This guide fixes both problems. You'll get exact JSON-LD code for each review schema type, a plain-English explanation of Google's eligibility rules, and a clear checklist for testing your implementation. You'll also understand how structured data now feeds Google's AI Overviews and AEO signals in 2026 — which makes getting this right more valuable than ever.

Foundation

What Is Review Schema Markup?

Review schema markup is structured data that describes reviews and ratings using the schema.org vocabulary. It communicates four things to search engines in a machine-readable format.

What is being reviewed

The product, service, recipe, book, or other reviewable item with its name and type.

Who wrote the review

The author with @type: Person and a real name — anonymous authors fail validation.

What rating they gave

The numeric ratingValue within a declared worstRating-to-bestRating scale.

What the overall average is

The AggregateRating with ratingValue and reviewCount, nested inside the parent type.

Why It Matters

15–30% higher click-through rates

Pages with review rich snippets consistently outperform plain listings. Star ratings give users quality confirmation before they click, which increases qualified traffic.

AI Overviews citation signal

Structured review data feeds Google's AI systems. Pages with schema earn AI citations at 2.7x the rate of unstructured pages, according to a 2025 Norg.ai analysis of 50 sites.

Entity disambiguation for Knowledge Panel

Well-structured schema helps Google's knowledge graph understand your business as a distinct entity — improving your Knowledge Panel accuracy and local pack visibility.

Schema Types

The Three Schema Types You Need to Know

Review schema isn't a single type — it's a family of related types. Each serves a distinct purpose and the rules for each differ.

JSON-LD review schema markup structure visualization showing nested AggregateRating and Review properties

1. Review (schema.org/Review)

The Review type represents a single customer review. Use it when marking up one specific review — typically the most helpful or representative one — for a product or service. It requires itemReviewed, reviewRating, and author.

Review schema — JSON-LD example

{
  "@context": "https://schema.org",
  "@type": "Review",
  "itemReviewed": {
    "@type": "Product",
    "name": "Tandoori Chicken — Full Plate"
  },
  "reviewRating": {
    "@type": "Rating",
    "ratingValue": "5",
    "bestRating": "5",
    "worstRating": "1"
  },
  "author": {
    "@type": "Person",
    "name": "Priya Deshmukh"
  },
  "reviewBody": "Best tandoori chicken in Pune — perfectly charred, not dry at all, and the mint chutney is outstanding.",
  "datePublished": "2026-01-15"
}

2. AggregateRating (schema.org/AggregateRating)

The AggregateRating type represents the overall average rating across many reviews. This is what generates the widely-recognized star display (“4.6 ★ | 238 reviews”) in search results. Critically: AggregateRating must always be nested inside a parent schema type — it does not stand alone.

AggregateRating nested in Product schema — JSON-LD example

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Shree Krishna Masala Dosa",
  "description": "Classic masala dosa with spiced potato filling, served with coconut chutney and sambar.",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "reviewCount": "142",
    "bestRating": "5",
    "worstRating": "1"
  }
}

Most common mistake: Adding a standalone AggregateRating block without a parent type. Google will not generate rich results for orphaned AggregateRating schema — it needs a parent like Product, Recipe, or Book.

3. LocalBusiness (schema.org/LocalBusiness) — The Restricted Type

LocalBusiness schema is essential for local SEO — it communicates your business name, address, phone, hours, and category. But there is a critical restriction that affects every Indian local business that tries to add review stars to their website:

Google's Self-Serving Reviews Rule

Google does not display review rich snippets for LocalBusiness or Organization schema types when the entity being reviewed controls the reviews about itself. This rule was introduced in September 2019. Your own Google reviews, Facebook reviews, or any review feed you manage cannot generate stars in organic search results via this schema type.

LocalBusiness schema is still valuable — it helps Google understand your NAP, operating hours, and business category, which feeds your Knowledge Panel and local pack rankings. Use it. Just don't add it expecting review stars.

LocalBusiness schema (Restaurant subtype) — JSON-LD example

{
  "@context": "https://schema.org",
  "@type": "Restaurant",
  "name": "Sai Sagar Restaurant",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "42 FC Road",
    "addressLocality": "Pune",
    "addressRegion": "MH",
    "postalCode": "411004",
    "addressCountry": "IN"
  },
  "telephone": "+91-20-25445678",
  "priceRange": "\u20B9\u20B9",
  "servesCuisine": "South Indian",
  "openingHoursSpecification": [{
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
    "opens": "11:00",
    "closes": "22:30"
  }]
}
Google's Rules

Eligibility Rules: What Can and Cannot Show Review Stars

Understanding eligibility before implementation saves hours of debugging and protects you from manual actions. Here are the rules as Google has documented them.

Pages That ARE Eligible

Products

Individual product pages on e-commerce or business sites — including services marked up as Product schema.

Recipes

Recipe pages with ingredient, instruction, and nutrition markup.

Books

Book pages with author, publisher, and ISBN data.

Movies, TV Episodes, Software Apps

Content types with defined schema types and discrete, reviewable items.

Services as Products

A grooming package, consulting service, or dental treatment marked up as a Product type.

Pages That Are NOT Eligible

LocalBusiness pages (self-reviewing)

Business websites marking up their own Google, Facebook, or any controlled review feed.

Organization pages

Same self-serving restriction applies to Organization type and all subtypes.

Pages with hidden reviews

Markup must match what is visible on the page — not what is in a database.

Pages with fewer than 5 reviews

Google's practical threshold — fewer than 5 reviews rarely generate rich snippets.

Comparison showing plain search result vs rich snippet with review schema markup star ratings

The Third-Party Review Workaround

There is a legitimate path to review rich snippets for local businesses: use third-party review data, not your own self-managed reviews. If a review aggregator provides an embeddable widget or data feed that you display on your site, and that data is genuinely from an independent third-party system, Google may honor it. The critical distinction: the reviewing entity must be independent from the reviewed entity.

For most Indian local businesses, the most practical approach is to mark up individual service offerings or menu items as Product schema with aggregateRating, using ratings that are honestly representative and visible on the page.

Implementation

Step-by-Step JSON-LD Implementation

1

Choose JSON-LD — always

Google explicitly recommends JSON-LD as the preferred format. It goes in a <script> tag in your page head, completely separate from your HTML. This makes it easier to maintain and update without touching page content. Microdata and RDFa work but are harder to maintain in JavaScript frameworks.

2

Nest AggregateRating inside a parent type

The single most common mistake: adding a standalone AggregateRating block. It must be a property inside Product, Recipe, Book, or another eligible parent type. Here is the correct pattern for a restaurant menu item:

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Butter Chicken — Half Plate",
  "description": "Slow-cooked chicken in rich tomato cream sauce, served with two butter naan.",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.8",
    "reviewCount": "96",
    "bestRating": "5",
    "worstRating": "1"
  },
  "review": [{
    "@type": "Review",
    "reviewRating": { "@type": "Rating", "ratingValue": "5", "bestRating": "5" },
    "author": { "@type": "Person", "name": "Ankit Sharma" },
    "reviewBody": "The butter chicken sauce is genuinely the richest I have had in Hyderabad.",
    "datePublished": "2026-02-03"
  }]
}
3

Place the script tag in your page head

In a Next.js or React application, define your schema as a constant and inject it with dangerouslySetInnerHTML inside a script tag:

const reviewSchema = { /* your schema object */ }

<script
  type="application/ld+json"
  dangerouslySetInnerHTML={{ __html: JSON.stringify(reviewSchema) }}
/>
4

Ensure schema matches visible page content

Every rating and review in your schema must be visible to users on the same page. If your schema says reviewCount: 96 but the page only shows 3 reviews, Google will flag this as a mismatch. Include only the reviews actually rendered on the initial page load.

If showing a paginated review list, only include in your schema the reviews rendered on the initial page load — not the total count in your database.

Step-by-step review schema markup implementation workflow: choose schema type, write JSON-LD, test, deploy, monitor

Need reviews worth marking up?

MapLift's AI review templates generate specific, descriptive review text — the kind that produces high-value reviewBody schema content and feeds Google's AI Overviews.

Common Mistakes

7 Mistakes That Get Markup Rejected

After auditing structured data implementations for multiple Indian business websites, these are the errors that appear most frequently — and most reliably block rich snippet eligibility.

Marking up Google Business reviews as first-party data

Adding your Google Maps aggregate rating to your website via LocalBusiness schema and expecting stars in search results. Google explicitly blocks this since 2019.

Fix: Mark up individual service offerings or menu items as Product schema instead.

Mismatched ratingValue and bestRating

Using a 10-point rating system but omitting bestRating (Google defaults to 5). An 8/10 rating displays as 8 out of 5, triggering validation errors.

Fix: Always explicitly declare bestRating and worstRating to match your actual rating scale.

Invisible reviews in schema

Including 50 reviews in schema but only displaying 5 on the page. Google's crawler compares DOM content to schema claims.

Fix: Only mark up reviews that are actually rendered on the page.

Standalone AggregateRating blocks

An AggregateRating without a parent type does not qualify for rich results. Google Search Console shows this as a warning.

Fix: Always nest AggregateRating inside Product, Recipe, Book, or another eligible parent.

Missing required author property

The Review type requires an author with @type: Person and a real name. Using "Anonymous" or omitting the property fails validation.

Fix: Include real reviewer names. If privacy is a concern, use first name and last initial.

Fake or inflated review counts

Claiming 500 reviews when you have 50 visible reviews violates Google's structured data spam policies.

Fix: Use only accurate, verifiable counts that match what users can see on the page.

Using Microdata with JavaScript-rendered reviews

If reviews load via React or Vue, Microdata attributes in HTML may not be present when the page first renders.

Fix: JSON-LD in a script tag is unaffected by render timing. Always use JSON-LD for JS frameworks.

Testing

Testing Your Implementation

Google Rich Results Test

search.google.com/test/rich-results

The official tool for checking whether your page qualifies for rich results. Fully renders your page — executing JavaScript — before parsing schema.

1.Enter your URL or paste your HTML
2.Click "Test URL" or "Test Code"
3.Check the "Detected structured data" panel
4.Look for "Review snippets" eligibility confirmation

Schema Markup Validator

validator.schema.org

Checks structural correctness against the schema.org vocabulary — independent of Google's rich result policies. Use this first to catch structural errors.

1.Paste your JSON-LD directly
2.Click "Run test"
3.Fix any errors (red) before warnings (yellow)
4.Then run Rich Results Test for Google eligibility

Search Console Rich Results Report

search.google.com/search-console

Ground-truth feedback after going live. Shows valid pages, errors, and which pages Google is actually displaying as rich results in search.

1.Open your property in Search Console
2.Navigate to Enhancements > Review snippets
3.Check for valid vs. invalid items
4.Monitor 2-4 weeks after implementation

Pre-Launch Implementation Checklist

Schema type is appropriate (Product/Recipe — not LocalBusiness for self-reviews)
AggregateRating is nested inside a parent schema type
ratingValue is within worstRating to bestRating range
reviewCount matches reviews visible on the page
Every Review has an author with @type: Person and a real name
reviewBody text is visible on the page
Dates use ISO 8601 format (YYYY-MM-DD)
JSON-LD is in <script type="application/ld+json"> in <head>
Schema Markup Validator returns zero errors
Rich Results Test confirms eligibility
Search Console report checked 2-4 weeks post-launch
AEO / AI Overviews

How Review Schema Feeds AI Overviews in 2026

This is where review schema markup becomes strategically important beyond just rich snippets. Google's AI Overviews pull from structured data as an input signal — and the impact is measurable.

AggregateRating as a trust signal

When AI is summarizing a product or service category, machine-readable rating data gives it precise evidence. "4.8 stars from 312 reviews" is more AI-citable than unstructured praise.

reviewBody as semantic content

The reviewBody property contains natural-language text that AI systems extract as evidence. Specific outcome statements get cited in AI Overviews more than generic praise.

FAQ schema as a complement

Adding FAQPage schema alongside review schema creates a dual signal: ratings prove quality, FAQ content proves relevance to specific questions. Both feed AI citation rates.

2025 Research: Schema markup drives 2.7x higher AI citation rates

A 2025 study by Norg.ai analyzing 50 sites found that pages with FAQPage schema achieved a 41% citation rate in AI-generated responses versus 15% for pages without structured data. For Indian businesses competing in AI-driven local discovery, the combination of clean LocalBusiness schema (entity recognition) + Product schema with AggregateRating (rich snippets) + FAQPage schema (AI citation) creates the most complete structured data foundation available.

There is a direct connection between review quality and schema effectiveness. Garbage review text produces low-value schema. The reviewBody property contains natural-language text that AI systems extract as evidence for their answers. A review body saying “the physiotherapy sessions here resolved my knee pain after 8 weeks” is exactly the kind of specific, outcome-oriented content that AI answer engines cite.

This is why AI-generated review templates matter at the schema level, not just the reputation level. Templates that produce specific, descriptive customer language generate reviewBody content that AI systems actively reference. See how this works in practice in our complete Google reviews guide.

India-Specific

India-Specific Schema Implementation Tips

Working with Indian local businesses, I've identified implementation nuances that differ from Western-focused guides. These details matter for validation and for Knowledge Panel accuracy.

Currency in priceRange

The priceRange property uses symbols, not ISO codes. Use the rupee symbol directly.

"priceRange": "\u20B9\u20B9" // two rupee symbols = mid-range

Language markup for multilingual businesses

If your page has Hindi or regional language content, add inLanguage to your Article schema for correct multilingual indexing.

"inLanguage": ["en-IN", "hi"]

Phone number format

Use E.164 international format for better knowledge graph normalization and validation reliability.

"telephone": "+91-22-12345678"

Address structure with PIN codes

Always include postalCode (6-digit PIN) and set addressCountry: "IN". Use ISO 3166-2 state codes for addressRegion.

"addressRegion": "MH" // Maharashtra, KA = Karnataka, TN = Tamil Nadu

GST number as identifier

For entity disambiguation, add your GSTIN as a PropertyValue identifier. Helps structured data parsers uniquely identify your business.

"identifier": { "@type": "PropertyValue", "name": "GSTIN", "value": "27AABCU9603R1ZM" }

servesCuisine for restaurant subtypes

Restaurant schema supports servesCuisine with comma-separated values for multi-cuisine businesses. Use established cuisine terms.

"servesCuisine": "North Indian, Mughlai"

See how your Google presence measures up

MapLift analyzes your GBP completeness, review quality, and structured data signals against local competitors. Free analysis in under 90 seconds.

FAQ

Frequently Asked Questions

Can a local business get review stars in Google for their own Google reviews?

No. Since September 2019, Google does not display review rich snippets for LocalBusiness or Organization schema types where the reviewed entity controls the reviews. Your own Google Business Profile reviews, Facebook reviews, or any review feed you manage cannot generate stars in organic search results via this mechanism. The practical workaround is to mark up individual products or services as Product schema with aggregateRating, using ratings that are independently verifiable and visible on your page.

What is the minimum number of reviews needed for AggregateRating to show stars?

Google has not published an exact minimum, but in practice, fewer than 5 reviews rarely generate rich snippets. The safe threshold recommended by structured data specialists is a minimum of 5 genuine reviews with a reviewCount of at least 5. Below this threshold, Google may determine the sample size is insufficient to justify displaying an aggregate rating in search results.

Does review schema markup help with Google AI Overviews?

Yes, indirectly but meaningfully. Structured data — including Review and AggregateRating schema — provides machine-readable quality signals that AI systems use when constructing summaries. A 2025 analysis by Norg.ai found that pages with schema markup earned AI citations at 2.7 times the rate of pages without it. The reviewBody property is especially valuable: specific, outcome-oriented review text gets extracted and referenced by AI answer engines more often than generic star ratings.

What happens if my review schema has errors?

Errors prevent rich snippet eligibility. Google Search Console will show the affected pages under the Rich results report with an Invalid items status. Warnings may not prevent eligibility but should be fixed. The most common errors are: missing required author property, ratingValue outside the bestRating/worstRating range, reviewCount not matching visible reviews on the page, and AggregateRating not nested inside a parent schema type.

Is JSON-LD the only way to implement review schema?

No — Microdata and RDFa are also supported formats. However, Google explicitly recommends JSON-LD as the preferred method because it separates structured data from HTML content, is easier to implement in JavaScript frameworks like React and Next.js, and does not break when your HTML is edited. For any modern web framework, JSON-LD is the correct and recommended choice.

Does review schema work for Hindi-language or regional-language pages in India?

Yes. Schema.org properties accept values in any language — the reviewBody property can contain Hindi, Tamil, Telugu, or any other language text. For multilingual pages, add the inLanguage property to your Article schema to signal the language to Google's indexing system. Use values like 'en-IN' for Indian English, 'hi' for Hindi, 'ta' for Tamil, and 'te' for Telugu.

Review Schema Markup: The Strategic Payoff

Review schema markup is one of the few technical SEO investments that pays dividends across multiple dimensions simultaneously: richer search listings that increase click-through rates, improved AI citation rates for AI Overviews, stronger entity understanding for your Knowledge Panel, and a cleaner structured data foundation for voice and conversational search.

The implementation is straightforward once you understand the rules — particularly the self-serving reviews restriction that affects local businesses. Mark up what you're actually selling (products, services, menu items) rather than your business as a whole. Keep your visible content and your schema in sync. Test before you publish. That's the complete framework.

The next step is making sure the reviews you're collecting are worth marking up. MapLift's AI review templates generate language that's both persuasive for human readers and structurally valuable for machines. To compare tools, see our review software comparison or read about other AI tools for local businesses.

Start with a free business analysis

See your current review quality, GBP completeness, and structured data opportunities — compared to your local competitors. Under 90 seconds, no credit card required.