squirrelscan
GitHub

Product schema: required fields and rich result checks

Product schema is structured data for a product: name, image, offers with price and availability, and reviews. What Google requires and the checks.

Product schema is schema.org Product structured data that describes an item for sale or under review, usually with an Offer for its price and availability and, where there are any, its reviews and rating.

Google splits product markup into two uses. Product snippets are for pages where people cannot buy directly, such as an editorial review. Merchant listings are for pages where they can. For product snippets, Google requires a name and at least one of review, aggregateRating or offers, and its Rich Results Test may warn about offers with no review or rating. Merchant listings have their own, longer requirements. Prices, availability and ratings must match what the page shows.

Category: Structured Data

Why it matters

Product markup is what lets a result show a price, stock status or star rating, and it feeds Google’s shopping features. It also drifts. A price changes on the page and not in the JSON-LD, a sale ends but the markup still says InStock, or a review widget loads its numbers after the page and leaves the markup with nothing visible to match. Google’s structured data guidelines treat markup that misleads or describes hidden content as a policy problem, which can cost the page its rich result eligibility.

How squirrelscan checks it

schema/product finds the page’s Product node, including one inside an @graph, and warns when name or image is missing. That is squirrelscan’s own required set, not Google’s. It notes at info level a product with no offers, and warns when the first offer lacks a price or availability. Each test is for a truthy value, so a price of 0 reads as missing. schema/review checks that an AggregateRating has a ratingValue and a ratingCount or reviewCount, and that each Review has an author and a rating. schema/rating-scope warns when the rating is not visible on the page. A known review widget such as Trustpilot or Yotpo on the page counts as visible.

RuleWhat it flagsSeverity
Product schema: name, image, offers and review checksProduct markup with no name or image, an Offer missing price or availability, and no rating data. squirrel checks each product page.warning
AggregateRating: ratingValue, ratingCount and review checksRating markup missing ratingValue or a review count, and Review nodes with no author or reviewRating. squirrel checks both shapes.warning
AggregateRating on the wrong page: visible and on-topicA sitewide star rating stamped on privacy, terms and blog pages, or one no reader can see. squirrel flags both as policy risks.warning

How to fix it

Generate the markup from the same data that renders the page:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Ceramic pour-over dripper",
  "image": "https://example.com/dripper.jpg",
  "offers": {
    "@type": "Offer",
    "price": "32.00",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock"
  }
}
</script>

Keep price and availability in step with what a shopper sees (the product fix). Put the rating on the product it rates and print the same numbers on the page (the review fix, the rating scope fix). Validate the result in Google’s Rich Results Test.

Run the check

squirrel audit https://example.com --rule-include schema/product,schema/review,schema/rating-scope

A signed-out local audit costs nothing.

  • Rich results: Search result features (stars, breadcrumbs, product prices, video thumbnails) that Google can show when a page has eligible structured data.

References

Type to search…

↑↓ navigate↵ openesc close