Product pages live and die by the snippet. Correct Product structured data is what unlocks price, availability and star ratings in search.
The minimum
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Widget",
"offers": {
"@type": "Offer",
"price": "29.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
}
}What each field does
- name — the product name
- sku — your internal identifier
- image — absolute URL(s)
- offers.price and priceCurrency — must match the visible price
- offers.availability — InStock, OutOfStock, PreOrder
Reviews and ratings
Add AggregateRating only if reviews are genuinely visible on the page. Fake or self-serving ratings violate Google's guidelines and can trigger a manual action.
Variations
For product variants, describe each variant with its own Offer, or use a single Product with multiple offers. Keep price and availability accurate — mismatches between markup and the page are a common reason rich results are dropped.
Generate and validate
Use the free Product schema generator to build the JSON-LD, then validate with the Rich Results Test. There are platform versions for Shopify and WooCommerce too.