XooCode(){

Review

Review represents a single review written by one person about one thing. It holds the author, a star rating, the review text, and a reference to what was reviewed. Google uses Review for two rich result features: the review snippet (star rating next to a search result) and the critic review carousel. Review nests inside Product, LocalBusiness, Recipe, Book, and Movie via the review property, or it can stand alone with itemReviewed to identify its subject.

Full example of schema.org/Review json-ld markup

The markup is verified as valid with Rich Results Test from Google.

schema.org/Review
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Review",
  "@id": "https://xoocode.com/shop/xootee-classic/reviews/maya-chen-2026#review",
  "url": "https://xoocode.com/shop/xootee-classic/reviews/maya-chen-2026",
  "itemReviewed": {
    "@type": "Product",
    "@id": "https://xoocode.com/shop/xootee-classic#product",
    "name": "XooTee Classic"
  },
  "author": {
    "@type": "Person",
    "name": "Maya Chen",
    "url": "https://xoocode.com/community/maya-chen"
  },
  "reviewRating": {
    "@type": "Rating",
    "ratingValue": 5,
    "bestRating": 5,
    "worstRating": 1
  },
  "name": "Best screen-printed tee I have owned",
  "reviewBody": "The print on the cerulean blue XooTee is sharp and the water-based ink feels like part of the fabric instead of sitting on top. After a dozen washes the colors have not faded. The cotton is heavier than typical fast-fashion tees but still breathable. I ordered a second one in charcoal.",
  "datePublished": "2026-02-14",
  "publisher": {
    "@type": "Organization",
    "name": "Xoo Code Shop",
    "url": "https://xoocode.com/shop"
  }
}
</script>

author as a Person, not a string

The author property should be a Person object with at minimum a name. Google rejects plain string authors like "author": "Maya Chen". Use "author": { "@type": "Person", "name": "Maya Chen" }. If the author has a profile page, add a url property. For organizations that publish reviews (like a newspaper), use Organization instead of Person.

reviewRating vs the parent's aggregateRating

reviewRating is the individual score this reviewer gave. It is a Rating object with ratingValue, bestRating, and worstRating. This is different from aggregateRating, which summarizes all reviews. A Product can have both: an aggregateRating (4.7 average from 238 reviews) and multiple individual review blocks each with their own reviewRating.

itemReviewed for standalone reviews

When Review appears as a standalone block (not nested inside a Product or LocalBusiness), you must include itemReviewed to tell Google what the review is about. Set the @type, name, and ideally an @id or url. When Review is nested inside its parent type via the review property, itemReviewed is redundant.

Minimal valid version

The smallest markup that still produces a valid Review entity. Use it as the floor. Reach for the advanced example above when you want search engines and AI agents to understand more about your content.

schema.org/Review (minimal)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Review",
  "author": {
    "@type": "Person",
    "name": "Maya Chen"
  },
  "reviewRating": {
    "@type": "Rating",
    "ratingValue": 5
  },
  "itemReviewed": {
    "@type": "Product",
    "name": "XooTee Classic"
  }
}
</script>

Google rich results this unlocks

Review is a structural type. It does not produce a rich result on its own.

Its value comes from combining it with a primary type whose markup earns a rich result (Article, Product, Event, and so on). Review becomes the trunk that the primary type branches off viamainEntityorbreadcrumb. Include it on every page as the backbone of your markup.

Common Review mistakes

Mistakes that pass validation but silently fail to earn rich results or mislead consumers walking the graph. Avoid these and your markup will be ahead of most sites in the wild.

  1. 01

    Author as a plain string instead of a Person object

    Wrong
    "author": "Maya Chen"
    Right
    "author": { "@type": "Person", "name": "Maya Chen" }

    Google requires author to be a Person or Organization object, not a plain string. A string value causes the review snippet to be rejected. Always use a structured object with at minimum @type and name. Adding a url property strengthens the author signal.

  2. 02

    reviewRating as a bare number instead of a Rating object

    Wrong
    "reviewRating": 5
    Right
    "reviewRating": { "@type": "Rating", "ratingValue": 5 }

    reviewRating must be a Rating object with a ratingValue property. A bare number is not a valid Rating and Google ignores it. Include bestRating and worstRating if your scale is not 1-5.

  3. 03

    Missing itemReviewed on a standalone Review

    Wrong
    (standalone Review block with no itemReviewed)
    Right
    "itemReviewed": { "@type": "Product", "name": "XooTee Classic" }

    When Review is not nested inside its parent (Product, LocalBusiness, etc.), Google needs itemReviewed to associate the review with the right entity. Without it, the review is orphaned and Google cannot display the review snippet. Include at minimum the @type and name of the reviewed item.

  4. 04

    Self-serving reviews (reviewing your own product)

    Wrong
    (a review where the author is the same entity as the seller or publisher)
    Right
    (reviews from genuine customers or independent reviewers)

    Google's review snippet guidelines explicitly prohibit self-serving reviews. If the author of the review is the same organization that sells the product, Google will not show the review snippet and may issue a manual action. Reviews must come from real users or independent third parties.

About the example data

This review is by Maya Chen, a fictional customer of Xoo Code Shop Dunmore, reviewing the cerulean blue XooTee Classic shirt. The review is shown standalone with itemReviewed. In practice, it would also appear as one of the nested review objects inside the Product example's JSON-LD.

Comments

Loading comments...

Leave a comment