Product Schema Markup: Get Price, Stars, and Availability in Google Search
Last Updated: February 25, 2026 · 15 min read
Product schema is one of the most valuable structured data implementations for e-commerce. When correctly implemented, it displays your product's price, stock availability, star ratings, and review count directly in Google search results — without the user needing to click your page. Studies show this increases CTR by an average of 18–25%.
What you can get with Product schema
1. Complete Product Schema — Full JSON-LD Template
This is a complete, production-ready Product schema covering all major properties that Google uses for rich results:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Wireless Bluetooth Headphones Pro",
"image": [
"https://example.com/images/headphones-main.jpg",
"https://example.com/images/headphones-side.jpg"
],
"description": "Premium noise-cancelling headphones with 30-hour battery life.",
"sku": "WBH-PRO-001",
"mpn": "BH-SERIES-5",
"gtin13": "0123456789012",
"brand": {
"@type": "Brand",
"name": "AudioTech"
},
"offers": {
"@type": "Offer",
"url": "https://example.com/headphones-pro",
"priceCurrency": "USD",
"price": "149.99",
"priceValidUntil": "2026-12-31",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition",
"seller": {
"@type": "Organization",
"name": "Example Store"
},
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": {
"@type": "MonetaryAmount",
"value": "0",
"currency": "USD"
},
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": {
"@type": "QuantitativeValue",
"minValue": 0,
"maxValue": 1,
"unitCode": "DAY"
},
"transitTime": {
"@type": "QuantitativeValue",
"minValue": 2,
"maxValue": 5,
"unitCode": "DAY"
}
}
}
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"reviewCount": "2847",
"bestRating": "5",
"worstRating": "1"
},
"review": [{
"@type": "Review",
"reviewRating": {
"@type": "Rating",
"ratingValue": "5"
},
"author": {
"@type": "Person",
"name": "Alex Johnson"
},
"reviewBody": "Best headphones I have ever owned. Sound quality is incredible."
}]
}2. Required vs Recommended Properties
| Property | Required? | Effect |
|---|---|---|
| name | ✅ Required | Product name in rich result |
| image | ✅ Required | Product image in rich result |
| offers.price | ✅ Required for price | Price displayed in snippet |
| offers.priceCurrency | ✅ Required for price | Currency code (USD, INR, GBP) |
| offers.availability | ✅ Required for availability | In Stock / Out of Stock indicator |
| aggregateRating | ⭐ Strongly recommended | Star ratings in snippet |
| sku / gtin13 | ⭐ Strongly recommended | Google Shopping integration |
| brand | ⭐ Recommended | Brand display in Shopping |
| review | ➕ Optional | Review snippets, E-E-A-T signals |
| shippingDetails | ➕ Optional | Free shipping badge in Shopping |
3. Platform-Specific Setup
Shopify
Shopify adds basic Product schema automatically via product.json in the theme. To add star ratings (which Shopify does not include by default):
- 1.Install Judge.me, Loox, or Okendo review apps — they inject AggregateRating schema automatically.
- 2.Or edit your
product.liquid/product-schema.liquidto add theaggregateRatingblock manually. - 3.Validate using our tool with your product page URL to confirm correct output.
WooCommerce
WooCommerce generates Product schema automatically. Key issues and fixes:
🚩 Missing aggregateRating
✅ Enable "Product Reviews" in WooCommerce settings. Yoast WooCommerce SEO plugin handles this automatically.
🚩 priceValidUntil missing (causes errors)
✅ Add via Yoast or custom code. Without it, some GSC validations flag a warning.
🚩 Wrong availability value
✅ WooCommerce maps stock status to schema automatically, but verify: InStock, OutOfStock, PreOrder are the valid values.
4. Google's Merchant Listings vs Product Snippets
| Feature | Product Snippets | Merchant Listings |
|---|---|---|
| Requirement | Product schema on page | Product schema + verified business |
| Appears in | Organic search results | Shopping tab + organic |
| Shows price | ✅ Yes | ✅ Yes |
| Shows ratings | ✅ Yes (with aggregateRating) | ✅ Yes |
| Free? | ✅ Free | ✅ Free (no ads needed) |
| Setup needed | Just JSON-LD on page | JSON-LD + Merchant Center verification |
Frequently Asked Questions
Does Product schema help with Google Shopping rankings?▼
Yes — but only if you connect to Google Merchant Center. Product schema alone enables organic product snippets (price and ratings in regular search results). For Google Shopping tab exposure, you need to either (a) verify your site in Google Merchant Center and link it, or (b) use the Shopping adf crawling. Merchant Center pulls schema data from your pages automatically once connected.
Can I add Product schema to a category page or collection page?▼
No. Product schema belongs on individual product pages only. For category/collection pages listing multiple products, use ItemList schema with each ListItem pointing to an individual product URL. Adding Product schema to a listing page is a policy violation and will be ignored or penalised.
Do I need a GTIN for my products?▼
GTIN (barcode) is strongly recommended but not required for basic rich results. However, without a GTIN (gtin13, gtin12, or gtin8), your products are ineligible for Google’s enhanced Merchant Listings experience and may rank lower in Google Shopping. If you manufacture your own products, apply for a GS1 GTIN. If you resell branded products, use the manufacturer’s GTIN.
How many reviews do I need before adding AggregateRating?▼
Google does not publish a minimum, but the SEO convention is: wait until you have at least 5–10 genuine reviews and an average of 4.0 or above before adding aggregateRating. A low star average (2.5–3.0) displayed in the SERP is a stronger CTR deterrent than no rating at all. Never fabricate reviews or reviewCount values — this is a manual action risk.
What availability values should I use for Product schema?▼
Use the full Schema.org URL forms: https://schema.org/InStock, https://schema.org/OutOfStock, https://schema.org/PreOrder, https://schema.org/BackOrder, https://schema.org/Discontinued. Do not use plain text strings like “In Stock” or enum shortcuts. Keep this property accurate and sync it with real inventory — mismatches trigger Rich Results Test warnings.
Does priceValidUntil need to be in the future?▼
Yes — set priceValidUntil to a future date (e.g. end of year). If you omit it, Google flags a warning in validation. If you set a past date, it may cause the price to be disregarded in rich results. Update it annually as part of a schema maintenance calendar. Dynamic sites can generate this field automatically based on current date + 365 days.
My Shopify store already adds Product schema. Do I need to do anything?▼
Shopify’s default themes add basic Product schema (name, price, availability, image), but they omit aggregateRating (unless you use a review app) and often omit sku, brand, and shippingDetails. Install Judge.me, Okendo, or Loox for review schema. Validate your product pages on SchemaValidator.org to see exactly what is missing and whether errors exist.
Can I have multiple Product offers for different variants?▼
Yes — use AggregateOffer instead of Offer when a product has multiple variants (sizes, colours) at different prices. Set the lowPrice and highPrice properties on AggregateOffer. If each variant has its own product page, use individual Product + Offer schema on each page with that variant’s specific price and availability.
Validate Your Product Schema
Check if your Product JSON-LD is correct and eligible for Google rich results.
Validate Product Schema →