Product schema: the complete guide for webshops
Why Product schema is essential for e-commerce
If you run a webshop, Product schema markup is one of the most powerful tools to make your products visible in search engines and AI models. By adding structured data to your product pages, you tell Google, Bing and AI answer engines exactly what you sell, at what price, whether it is in stock and what customers think of it. Without this markup, search engines must try to distill your product information from unstructured HTML, with all the associated risks.
The result of correct Product schema implementation is immediately visible: rich results in Google with stars, prices and stock information. These enriched search results demonstrably attract more clicks than standard blue links. Research shows that rich results can increase click-through rate by 20 to 30 percent. The same principle applies to AI models: structured data makes your products machine-readable and therefore citable.
Google requires Product schema for product rich results. Without this markup, your products will never appear with stars, prices or stock information in search results, regardless of how good your SEO otherwise is.
The basics: Product and Offer in JSON-LD
The Product schema type describes an individual product. The Offer type (or AggregateOffer for multiple offers) describes the commercial terms: price, currency, availability and sales channel. These two types always work together. A Product without an Offer lacks the commercial context that search engines and AI models need to show your product in purchase-oriented queries.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Wireless noise-cancelling headphones",
"image": [
"https://example.com/images/headphones-front.jpg",
"https://example.com/images/headphones-side.jpg",
"https://example.com/images/headphones-back.jpg"
],
"description": "Premium wireless headphones with active noise-cancelling, 30 hours battery life and foldable design.",
"sku": "HPH-NC-300",
"gtin13": "5901234123457",
"brand": {
"@type": "Brand",
"name": "AudioTech"
},
"offers": {
"@type": "Offer",
"url": "https://example.com/products/headphones-nc-300",
"priceCurrency": "EUR",
"price": "149.99",
"priceValidUntil": "2026-12-31",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition",
"seller": {
"@type": "Organization",
"name": "Example Webshop"
},
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": {
"@type": "MonetaryAmount",
"value": "0",
"currency": "EUR"
},
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": {
"@type": "QuantitativeValue",
"minValue": 0,
"maxValue": 1,
"unitCode": "DAY"
},
"transitTime": {
"@type": "QuantitativeValue",
"minValue": 1,
"maxValue": 2,
"unitCode": "DAY"
}
},
"shippingDestination": {
"@type": "DefinedRegion",
"addressCountry": "NL"
}
},
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": "NL",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 30,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn"
}
}
}
</script>In this example you see the core structure: the Product contains the product description, images, SKU and brand. The nested Offer contains the price, availability, shipping details and return policy. Google rewards webshops that fill in all these fields with more extensive rich results. Leave out fields and you get a limited display or no rich result at all.
Required versus recommended fields
- Required for rich results: name, image, offers.price, offers.priceCurrency and offers.availability.
- Strongly recommended: description, sku or gtin, brand, review or aggregateRating, offers.priceValidUntil.
- Bonus for extended display: shippingDetails, hasMerchantReturnPolicy, offers.seller, offers.itemCondition.
- Identifiers (sku, gtin13, mpn) help Google match your product with products from other sources and the Google Merchant Center feed.
The relationship between Product schema and your Schema.org strategy is crucial. Product schema does not stand alone; it works optimally together with other schema types like Organization, BreadcrumbList and WebSite. Make sure your product pages are part of a coherent whole of structured data.
AggregateRating and individual reviews
Ratings are one of the most powerful conversion tools in e-commerce. With AggregateRating schema you make the average rating and number of reviews machine-readable. This results in the recognizable yellow stars in Google search results, a visual signal that immediately builds trust with potential buyers.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Wireless noise-cancelling headphones",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"bestRating": "5",
"ratingCount": "312",
"reviewCount": "189"
},
"review": [
{
"@type": "Review",
"reviewRating": {
"@type": "Rating",
"ratingValue": "5",
"bestRating": "5"
},
"author": {
"@type": "Person",
"name": "Sarah Johnson"
},
"datePublished": "2026-03-15",
"reviewBody": "Excellent sound quality and the noise-cancelling is impressive. Battery easily lasts two days with normal use.",
"name": "Best headphones in this price range"
},
{
"@type": "Review",
"reviewRating": {
"@type": "Rating",
"ratingValue": "4",
"bestRating": "5"
},
"author": {
"@type": "Person",
"name": "James Wilson"
},
"datePublished": "2026-02-28",
"reviewBody": "Good headphones for the price. Only downside is that the ear cushions get a bit warm after a few hours.",
"name": "Good, but gets warm"
}
]
}
</script>Note that ratingCount is the total number of ratings (including ratings without a written review) and reviewCount is the number of written reviews. These values can therefore differ. Google uses ratingCount for the star count display in search results.
Do not generate fake reviews in your schema markup. Google checks whether the reviews on your page are actually visible to users. Schema markup that does not match the visible content can lead to a manual action and the loss of all your rich results.
Correctly marking up product variants
A common challenge for webshops is handling product variants: the same headphones in three colors, a shirt in five sizes, or a laptop in different configurations. Google supports ProductGroup schema combined with individual Product entries per variant for this purpose.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "ProductGroup",
"name": "Wireless noise-cancelling headphones",
"description": "Premium headphones available in three colors.",
"productGroupID": "HPH-NC-300",
"variesBy": [
"https://schema.org/color"
],
"hasVariant": [
{
"@type": "Product",
"name": "Headphones NC-300 - Black",
"color": "Black",
"sku": "HPH-NC-300-BK",
"image": "https://example.com/images/hph-black.jpg",
"offers": {
"@type": "Offer",
"price": "149.99",
"priceCurrency": "EUR",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"name": "Headphones NC-300 - White",
"color": "White",
"sku": "HPH-NC-300-WH",
"image": "https://example.com/images/hph-white.jpg",
"offers": {
"@type": "Offer",
"price": "149.99",
"priceCurrency": "EUR",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"name": "Headphones NC-300 - Blue",
"color": "Blue",
"sku": "HPH-NC-300-BL",
"image": "https://example.com/images/hph-blue.jpg",
"offers": {
"@type": "Offer",
"price": "159.99",
"priceCurrency": "EUR",
"availability": "https://schema.org/OutOfStock"
}
}
]
}
</script>The variesBy field indicates which property differs between variants (color, size, material). Each variant gets its own Product entry with specific SKU, image and Offer. This enables Google to show in search results which variants are available and at what price.
Product schema and AI answer engines
Beyond Google rich results, Product schema plays a growing role in AI answer engines. When a user asks ChatGPT or Perplexity "What is the best noise-cancelling headphone under 200 euros?", these models search for product pages with structured data to provide a well-founded answer. Webshops with complete Product schema markup, including price, rating and specifications, have a significant advantage.
This aligns with the broader principle of Answer Engine Optimization: the more machine-readable your content is, the greater the chance that AI models cite you as a source. For webshops this means that Product schema is not just an SEO tool, but also an AEO tool that directly impacts your visibility in AI-generated answers.
- AI models use price and priceCurrency to compare products on price.
- AggregateRating helps AI models assess the quality perception of a product.
- Detailed descriptions and specifications give AI models the information to make nuanced product recommendations.
- Availability information prevents AI models from recommending products that are not deliverable.
Common mistakes with Product schema
In our webshop audits we see the same mistakes recurring. By avoiding these, you significantly increase your chances of rich results and AI citations.
- Entering the price as a whole number without decimals. Always use the format "149.99" instead of "150" or "149,99". The period is the required decimal separator in JSON-LD.
- Misspelling availability URLs. Use exactly "https://schema.org/InStock", not "InStock" or "in_stock". This is one of the most common mistakes.
- Including reviews in schema that are not visible on the page. Google calls this "structured data spam" and can penalize your site.
- Leaving outdated prices or stock status in place. Ensure your schema is dynamically generated so it is always current.
- Using image URLs that return a 404. Google validates whether the image actually loads.
Dive deeper: Schema.org markup: the language AI understands | E-E-A-T optimization for AI | Review and AggregateRating schema
Testing and validating Product schema
After implementation, validation is essential. Google offers two tools that you should use regularly.
- Google Rich Results Test (search.google.com/test/rich-results): checks whether your page qualifies for rich results and shows a preview of how your product appears in search results.
- Schema Markup Validator (validator.schema.org): validates the technical correctness of your JSON-LD without Google-specific interpretation.
- Google Search Console: shows after indexing which Product rich results Google has detected and whether there are errors or warnings.
Make it a habit to revalidate schema markup after every change to your product pages. Small changes in your template can inadvertently break the JSON-LD, causing you to lose rich results without immediately noticing.
Summary: key takeaways
- Product schema with Offer is required for product rich results in Google. Without this markup you miss stars, prices and stock information in search results.
- AggregateRating and individual Reviews generate the yellow stars that increase click-through rate by 20 to 30 percent.
- Mark product variants with ProductGroup and individual Product entries per variant, including specific SKU and image.
- AI answer engines use Product schema to substantiate product recommendations. Complete markup increases your chance of citations.
- Validate your schema regularly with Google Rich Results Test and Schema Markup Validator to avoid losing rich results unnoticed.
Frequently asked questions
Should I place Product schema on every product page?
Yes, every individual product page deserves its own Product schema markup. Category pages with product lists do not need Product schema, but can use ItemList schema to structure the list. Focus on product detail pages, because that is where conversion happens.
What is the difference between Offer and AggregateOffer?
Offer describes a single offer with a specific price and conditions. AggregateOffer is used when multiple sellers offer the same product at different prices, such as on a marketplace. AggregateOffer then contains lowPrice, highPrice and offerCount. For most webshops that sell their own products, the standard Offer type is sufficient.
How do I handle products that are temporarily out of stock?
Use "https://schema.org/OutOfStock" as the availability value. Do not remove the Product schema from the page. Google and AI models appreciate transparency about availability. Optionally add "https://schema.org/BackOrder" if customers can pre-order the product.
Can I combine Product schema with FAQ schema on the same page?
Absolutely. Combining Product schema with FAQ schema (FAQPage) is even a strong strategy. The FAQ answers frequently asked questions about the product, while the Product schema contains the commercial information. Google can display both rich results simultaneously, giving you more visual real estate in search results.
Does Product schema also work for digital products and services?
Product schema is primarily designed for physical and digital products. For services, the Service schema is more appropriate. For software you can use SoftwareApplication. For online courses, Course is the right type. Always use the most specific schema type that fits what you offer.
A product page without Product schema is like a shop without a display window: your product exists, but no one sees it unless they are already inside.
How does your website score on AI readiness?
Get your AEO score within 30 seconds and discover what you can improve.