Product
Single product page with offer, brand, GTIN, and aggregate rating.
When to use
Every product detail page on an ecommerce store. Required for Google Shopping rich results and the most heavily-weighted Merchant Center compliance signal.
Why this shape
Includes GTIN, MPN, brand, and an Offer with hasMerchantReturnPolicy + shippingDetails - the four attributes Google Merchant Center weights highest for Shopping eligibility. AggregateRating included because review snippets boost CTR ~17% in our corpus.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Example Product Name",
"image": [
"https://example.com/photos/1x1/photo.jpg"
],
"description": "A clear, accurate product description.",
"sku": "SKU-12345",
"gtin13": "0614141999996",
"mpn": "MPN-99999",
"brand": {
"@type": "Brand",
"name": "Example Brand"
},
"review": [
{
"@type": "Review",
"reviewRating": {
"@type": "Rating",
"ratingValue": 5,
"bestRating": 5
},
"author": {
"@type": "Person",
"name": "Jane Customer"
},
"reviewBody": "Excellent product.",
"datePublished": "2026-04-01"
}
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": 4.7,
"reviewCount": 89,
"bestRating": 5,
"worstRating": 1
},
"offers": {
"@type": "Offer",
"url": "https://example.com/product/sku-12345",
"priceCurrency": "USD",
"price": "49.99",
"priceValidUntil": "2027-12-31",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition",
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": "US",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 30,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn"
},
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": {
"@type": "MonetaryAmount",
"value": "5.00",
"currency": "USD"
},
"shippingDestination": {
"@type": "DefinedRegion",
"addressCountry": "US"
},
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": {
"@type": "QuantitativeValue",
"minValue": 0,
"maxValue": 1,
"unitCode": "DAY"
},
"transitTime": {
"@type": "QuantitativeValue",
"minValue": 1,
"maxValue": 5,
"unitCode": "DAY"
}
}
}
}
}