In ecommerce, product schema markup has the highest direct sales impact: it shows price, availability, and ratings directly in the search result, before the user even clicks to your store. A well-implemented product rich result can multiply CTR by two or three compared to a result without schema.
The 3 schema types for product pages
Product: the main entity
The Product type describes the product itself. It is the main container to which other entities are nested. The minimum properties required by Google to enable product rich results are: name, image, description, and at least one of: offers, review, or aggregateRating.
Offer: price and availability
The Offer entity within Product defines the product's price and availability. Google displays this information in the search result. The required properties are: price, priceCurrency, and availability.
AggregateRating and Review: ratings
AggregateRating represents the product's average rating (the stars that appear in the result). Review is the entity for individual reviews. To show stars in the SERP, you need AggregateRating with ratingValue and reviewCount.
Complete product schema implementation
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Pro Running Shoes X200",
"image": [
"https://store.com/products/shoe-x200-1.jpg",
"https://store.com/products/shoe-x200-2.jpg"
],
"description": "Running shoes with reactive cushioning sole for long distances.",
"sku": "SHOE-X200-10",
"brand": {
"@type": "Brand",
"name": "RunFast"
},
"offers": {
"@type": "Offer",
"url": "https://store.com/pro-running-shoes-x200",
"price": "129.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition",
"priceValidUntil": "2026-12-31",
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": {
"@type": "MonetaryAmount",
"value": "0",
"currency": "USD"
},
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": {
"@type": "QuantitativeValue",
"minValue": 0,
"maxValue": 1,
"unitCode": "DAY"
},
"transitTime": {
"@type": "QuantitativeValue",
"minValue": 2,
"maxValue": 5,
"unitCode": "DAY"
}
}
}
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "182"
}
}
</script>Properties Google requires vs. recommends
| Property | Entity | Status | Benefit |
|---|---|---|---|
| name | Product | Required | Product name in rich result |
| image | Product | Required | Image in rich result |
| price | Offer | Required | Price visible in SERP |
| priceCurrency | Offer | Required | Price currency |
| availability | Offer | Required | Availability (InStock, OutOfStock...) |
| ratingValue | AggregateRating | Required for stars | Stars visible in SERP |
| reviewCount | AggregateRating | Required for stars | Number of reviews |
| sku | Product | Recommended | Unique product identifier |
| brand | Product | Recommended | Product brand |
| priceValidUntil | Offer | Recommended | Prevents Google showing expired price |
| shippingDetails | Offer | Recommended | Shipping cost and timeframe in SERP |
Common product schema errors
Error: schema price different from the visible price on the page
Google compares the schema price with the price visible on the page. If they do not match, it may reject the rich result or penalize the page. Make sure the schema is generated dynamically from the same data source as the visible price.
Error: availability with free text instead of a Schema.org URI
The correct value for availability is a Schema.org URI, not free text. Valid values are: https://schema.org/InStock, https://schema.org/OutOfStock, https://schema.org/PreOrder, https://schema.org/Discontinued.
Error: product schema on category pages
The Product schema must be implemented only on individual product pages, not on category or listing pages. On category pages, the correct type is ItemList with references to the products. Google does not show product rich results for pages that list multiple products without a single defined price.
Error: not updating availability schema when a product goes out of stock
If Google shows "In Stock" in the SERP but the product is unavailable in your store, users arrive at a page with an unavailable product — high bounce rate and a poor UX signal. Always synchronize the availability in the schema with the actual inventory status.
How to implement product schema in WooCommerce
WooCommerce with Yoast SEO for WooCommerce or Rank Math Pro automatically generates product schema with the basic properties. To complete it with shippingDetails and advanced properties, you need an additional plugin or custom code in functions.php.
- 1.Install Yoast SEO + Yoast SEO for WooCommerce (paid) or Rank Math Pro.
- 2.The plugin automatically generates Product, Offer, and AggregateRating for each product.
- 3.Check in iRankly's Schema Validator that the required properties are present on your most important products.
- 4.For products with variations (sizes, colors), verify that the schema reflects the correct price based on the default variation.
Prueba la herramienta gratis
Schema Markup ValidatorAnaliza tus URLs con {tool} de iRankly. Sin registro, sin tarjeta.