Product schema turns product listings in search results from plain text links into rich clickable cards with price, availability, review stars, and shipping info. On competitive SERPs, this is the difference between being noticed and being ignored. This page walks through the required fields, the recommended optional fields that unlock richer displays, and the common mistakes that disqualify your products from rich results entirely.
For a product page to qualify for rich results, it needs:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Product Name",
"image": "https://example.com/product.jpg",
"description": "...",
"sku": "PROD-123",
"brand": {
"@type": "Brand",
"name": "Brand Name"
},
"offers": {
"@type": "Offer",
"priceCurrency": "USD",
"price": "99.00",
"availability": "https://schema.org/InStock",
"priceValidUntil": "2026-12-31",
"url": "https://example.com/product-page"
}
}
Triggers star rating display:
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"reviewCount": "127",
"bestRating": "5",
"worstRating": "1"
}
Individual reviews (in addition to aggregateRating):
"review": [{
"@type": "Review",
"author": { "@type": "Person", "name": "Sarah M." },
"datePublished": "2026-04-15",
"reviewBody": "...",
"reviewRating": { "@type": "Rating", "ratingValue": "5" }
}]
gtin / gtin13. Global Trade Item Number (UPC, EAN)mpn. Manufacturer Part Numberisbn, for booksAt least one of GTIN, MPN, or brand is required. Having all increases Merchant Center trust.
Rich results increasingly include shipping details + return policies:
"offers": {
...
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": { "@type": "MonetaryAmount", "value": "0", "currency": "USD" },
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"businessDays": { "@type": "OpeningHoursSpecification", "dayOfWeek": [...] },
"transitTime": { "@type": "QuantitativeValue", "minValue": 2, "maxValue": 5, "unitCode": "DAY" }
}
},
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": "US",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 30,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn"
}
}
InStockOutOfStockPreOrderBackOrderDiscontinuedLimitedAvailabilityMatch what's actually true. Out-of-stock pages should say so in schema, not claim InStock.
"offers": {
"@type": "AggregateOffer",
"offerCount": "4",
"lowPrice": "89.00",
"highPrice": "129.00",
"priceCurrency": "USD",
"offers": [
{ "@type": "Offer", "seller": { "@type": "Organization", "name": "..." }, "price": "89.00" },
...
]
}
If you run paid shopping ads, Google Merchant Center consumes the same schema. Consistent, complete product schema improves both organic rich results and paid shopping campaign quality scores. Double ROI.
Pick your 10 best-selling products. Run each through the Rich Results Test. Note any warnings or missing required fields. Fix those today. Star ratings in SERPs typically boost CTR by 20 to 30%, that's a week of work for permanent lift.
Next: out-of-stock pages, the one ecommerce SEO detail that most sites get dramatically wrong.