Back to blog
Schema Markup Validator9 min readApril 18, 2026

Schema Markup for Ecommerce: Product, Offer, and Review

Product schema markup delivers the highest direct ROI for online stores: it shows price, availability, and star ratings in search results. Learn how to implement it correctly with all required fields.


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

json
<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

PropertyEntityStatusBenefit
nameProductRequiredProduct name in rich result
imageProductRequiredImage in rich result
priceOfferRequiredPrice visible in SERP
priceCurrencyOfferRequiredPrice currency
availabilityOfferRequiredAvailability (InStock, OutOfStock...)
ratingValueAggregateRatingRequired for starsStars visible in SERP
reviewCountAggregateRatingRequired for starsNumber of reviews
skuProductRecommendedUnique product identifier
brandProductRecommendedProduct brand
priceValidUntilOfferRecommendedPrevents Google showing expired price
shippingDetailsOfferRecommendedShipping 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. 1.Install Yoast SEO + Yoast SEO for WooCommerce (paid) or Rank Math Pro.
  2. 2.The plugin automatically generates Product, Offer, and AggregateRating for each product.
  3. 3.Check in iRankly's Schema Validator that the required properties are present on your most important products.
  4. 4.For products with variations (sizes, colors), verify that the schema reflects the correct price based on the default variation.

Try the tool for free

Schema Markup ValidatorAnalyze your URLs with {tool} by iRankly. No sign-up, no credit card.

Use tool for free

Try the tool for free

Analyze your URLs with Schema Markup Validator by iRankly. No sign-up, no credit card.

Use tool for free