The Three Schema Types Ecommerce Pages Need
Ecommerce product pages typically need three schema types working together. Product is the primary type and wraps the others — it carries the product name, description, image, and identifier properties. Offer is nested inside Product and carries the pricing information: price, priceCurrency (as an ISO 4217 code like USD, GBP, EUR), and availability (as a Schema.org URL like https://schema.org/InStock). AggregateRating is also nested inside Product and carries the overall rating information: ratingValue and reviewCount.
The nesting relationship matters. An Offer object defined outside the Product object, or defined as a sibling rather than a child, does not associate the price with the product. Google's structured data parser requires the offers property on the Product to contain the Offer — the structure is @type: Product, offers: { @type: Offer, price: ... }.
Required Properties for Google Shopping Rich Results
Google requires the following properties on the Product type for shopping rich result eligibility: name, image (a URL pointing to the product image), description, and at least one product identifier — either sku (your internal stock keeping unit), mpn (manufacturer part number), or a GTIN variant (gtin8, gtin12, gtin13, or gtin14). On the nested Offer object, Google requires price, priceCurrency, and availability.
The most common implementation errors are: missing the Offer block entirely (product shows in search without price), incorrect priceCurrency format (using $ instead of the ISO code USD), and unavailability mismatch (schema says InStock but the page shows out of stock, which Google detects and may penalize).
Review and AggregateRating Implementation
AggregateRating enables the star rating display in Google search results. It requires ratingValue (a numeric value between 0 and 5), reviewCount (the total number of reviews used to calculate the aggregate), and bestRating (typically 5). Google's policy requires that the rating data on the schema matches the rating display visible to users on the page — a hidden or fabricated rating score violates Google's structured data quality guidelines.
Individual Review objects can be included in a reviews array on the Product. Each Review requires author (as a Person or Organization object), reviewBody (the text of the review), and datePublished. Review markup is optional but provides additional signals for schema richness.