Skip to content

Describe a product

Reference

This worked example shows how to describe a product for sale using Product, Offer, and AggregateRating. It is a common pattern for ecommerce pages.

Objective

Produce valid structured data that captures the product identity, its price and availability, and its aggregate rating.

Steps

  1. Start with the Product type. Capture identity properties such as name, image, description, sku, and brand.

  2. Add an Offer. The offers property holds an Offer that captures price, priceCurrency, availability, and the url where the product can be bought.

  3. Add an AggregateRating. When you display review scores, the aggregateRating property holds an AggregateRating with ratingValue and reviewCount.

  4. Combine into one block.

json
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Executive Anvil",
  "image": "https://example.com/photos/anvil.jpg",
  "description": "Sleeker than ACME's Classic Anvil, the Executive Anvil is perfect for the business traveler.",
  "sku": "0446310786",
  "brand": {
    "@type": "Brand",
    "name": "ACME"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.4",
    "reviewCount": "89"
  },
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/anvil",
    "priceCurrency": "USD",
    "price": "119.99",
    "priceValidUntil": "2026-12-31",
    "availability": "https://schema.org/InStock"
  }
}

Field notes

  • price is a string to preserve precision and formatting.
  • availability uses an enumeration member identifier.
  • priceValidUntil uses an ISO 8601 date.
  • The brand is a nested Brand entity, not a plain string, so it can carry its own properties.

Done when

  • The block validates with no errors against the Product type.
  • Price, availability, and rating match what the page displays.