E-COMMERCE SEO 5 min read

Product Schema

Schema.org markup specific to products that generates rich snippets with price and availability.

Bas Vermeer
Bas Vermeer SEO/AEO Specialist

Product schema is a type of Schema.org — bibliotheekterm structured data — bibliotheekterm that marks up product information: name, description, price, availability, reviews, and images. This enables search engines to display rich snippets — bibliotheekterm in search results.

What does it deliver?

Correctly implemented product schema can lead to rich results with star ratings, price, availability status, and merchant name directly in the SERP — bibliotheekterm. This significantly increases CTR compared to plain text results.

Product schema and AI shopping

AI assistants and shopping features of search engines use product schema to generate product recommendations. Without structured data, you miss a growing channel for product visibility. Google Merchant Center — bibliotheekterm is also increasingly integrating with AI-driven shopping experiences.

Complete Product JSON-LD code example

Below is a complete Product schema with all recommended fields. This example validates in Google's Rich Results Test and includes the most commonly supported properties.

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Nike Air Max 90 Running Shoes",
  "description": "The Nike Air Max 90 combines iconic design with modern comfort. Visible Air cushioning in the heel and durable rubber on the outsole.",
  "image": [
    "https://www.example.com/images/nike-air-max-90-1.jpg",
    "https://www.example.com/images/nike-air-max-90-2.jpg",
    "https://www.example.com/images/nike-air-max-90-3.jpg"
  ],
  "sku": "NAM90-WHT-42",
  "mpn": "CW7483-100",
  "gtin13": "1234567890123",
  "brand": {
    "@type": "Brand",
    "name": "Nike"
  },
  "color": "White/Black",
  "material": "Mesh, synthetic leather",
  "offers": {
    "@type": "Offer",
    "url": "https://www.example.com/nike-air-max-90",
    "priceCurrency": "USD",
    "price": "129.99",
    "priceValidUntil": "2026-12-31",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition",
    "seller": {
      "@type": "Organization",
      "name": "Example Sports Store"
    },
    "shippingDetails": {
      "@type": "OfferShippingDetails",
      "shippingRate": {
        "@type": "MonetaryAmount",
        "value": "0.00",
        "currency": "USD"
      },
      "deliveryTime": {
        "@type": "ShippingDeliveryTime",
        "handlingTime": {
          "@type": "QuantitativeValue",
          "minValue": 0,
          "maxValue": 1,
          "unitCode": "DAY"
        },
        "transitTime": {
          "@type": "QuantitativeValue",
          "minValue": 1,
          "maxValue": 3,
          "unitCode": "DAY"
        }
      },
      "shippingDestination": {
        "@type": "DefinedRegion",
        "addressCountry": "US"
      }
    },
    "hasMerchantReturnPolicy": {
      "@type": "MerchantReturnPolicy",
      "applicableCountry": "US",
      "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
      "merchantReturnDays": 30,
      "returnMethod": "https://schema.org/ReturnByMail",
      "returnFees": "https://schema.org/FreeReturn"
    }
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.6",
    "bestRating": "5",
    "worstRating": "1",
    "ratingCount": "312",
    "reviewCount": "187"
  },
  "review": [
    {
      "@type": "Review",
      "author": {
        "@type": "Person",
        "name": "John Smith"
      },
      "datePublished": "2026-03-15",
      "reviewBody": "Excellent fit and the comfort is amazing for daily use. Highly recommended!",
      "reviewRating": {
        "@type": "Rating",
        "ratingValue": "5",
        "bestRating": "5"
      }
    }
  ]
}

Product with variants (color/size)

For products with variants like color or size, use a parent Product with multiple Offers, or separate ProductGroup with ProductModels. Below is the recommended approach with ProductGroup:

{
  "@context": "https://schema.org",
  "@type": "ProductGroup",
  "name": "Nike Air Max 90",
  "description": "The iconic Nike Air Max 90 in all available colors and sizes.",
  "url": "https://www.example.com/nike-air-max-90",
  "brand": {
    "@type": "Brand",
    "name": "Nike"
  },
  "productGroupID": "NAM90",
  "variesBy": [
    "https://schema.org/color",
    "https://schema.org/size"
  ],
  "hasVariant": [
    {
      "@type": "Product",
      "name": "Nike Air Max 90 - White - Size 9",
      "color": "White",
      "size": "9",
      "sku": "NAM90-WHT-9",
      "gtin13": "1234567890123",
      "image": "https://www.example.com/images/nam90-white.jpg",
      "offers": {
        "@type": "Offer",
        "priceCurrency": "USD",
        "price": "129.99",
        "availability": "https://schema.org/InStock",
        "url": "https://www.example.com/nike-air-max-90?color=white&size=9"
      }
    },
    {
      "@type": "Product",
      "name": "Nike Air Max 90 - Black - Size 9",
      "color": "Black",
      "size": "9",
      "sku": "NAM90-BLK-9",
      "gtin13": "1234567890124",
      "image": "https://www.example.com/images/nam90-black.jpg",
      "offers": {
        "@type": "Offer",
        "priceCurrency": "USD",
        "price": "129.99",
        "availability": "https://schema.org/InStock",
        "url": "https://www.example.com/nike-air-max-90?color=black&size=9"
      }
    }
  ]
}

Common Product Schema mistakes

  • Price as integer instead of string: use "price": "139.99", not "price": 139.99. Google expects a string value.
  • Missing priceCurrency: without a currency code, Google cannot correctly interpret the price.
  • Wrong availability URL: use the full Schema.org URL (https://schema.org/InStock), not just "InStock".
  • No image: the image field is strongly recommended. Without an image, the chance of getting a rich result is much lower.
  • Outdated prices: if the price on the page differs from the price in the markup, Google may revoke the rich result or issue a manual action.
  • Fake reviews in markup: reviews in structured data must match actually visible reviews on the page.
  • Missing gtin/mpn/sku: at least one of these identifiers is needed for optimal recognition in Google Shopping.
  • Markup on non-product pages: Product schema should only be placed on pages where the product is actually for sale.

Frequently asked questions

Which fields are required for a Product rich result?

Google requires at minimum name and image for the Product type. For an Offer within the product, price, priceCurrency, and availability are strongly recommended. For an AggregateRating, ratingValue and ratingCount (or reviewCount) are required. The more recommended fields you fill in, the greater your chance of getting a rich result.

Can I use Product Schema if I don't have a webshop?

Product Schema is intended for pages where a product is offered for sale. If you have a review site or comparison site, it's better to use the Review type or a Product type without an Offer. Google may reject markup if the product cannot be purchased directly through the page.

How do I test if my Product Schema is correct?

Use Google's Rich Results Test (search.google.com/test/rich-results) to check if your markup is valid and eligible for rich results. Additionally, use the Schema Markup Validator (validator.schema.org) for a complete syntax check.

What is the difference between Product and ProductGroup?

A Product describes a single, specific product. A ProductGroup (introduced in 2022) groups variants of the same product, such as different colors or sizes. Google recommends ProductGroup with hasVariant for products with multiple variants on one page.

How often should I update my Product Schema?

Product Schema must always match the current page content. Update the markup whenever price, availability, or ratings change. For dynamic webshops, it's advisable to generate the markup server-side so it's always up to date. Google regularly checks whether markup and page content match.

RELATED TERMS

RELATED ARTICLES

Bas Vermeer
Bas Vermeer

SEO/AEO Specialist

My career started by manually combing through server log files. I wanted to understand how Googlebot crawls websites. That fascination with the technical side of discoverability? Never faded. At Koba...