Search for any popular product on Google right now. You will notice that some results show a price, a star rating, a stock status, and free delivery information sitting right below the title. Others show just a blue link and a description. The products with the extra information are almost always clicked more, and the ones without it are passed over.
That extra information does not appear by magic. It appears because the website behind that product page has implemented product schema markup, a structured data format that tells Google exactly what each piece of content on the page means.
For e-commerce businesses competing against Amazon, Flipkart, and Myntra in organic search results, product schema markup is not a nice-to-have. It is one of the few mechanisms available to create visual parity with marketplace listings in Google search. This guide covers every aspect of product schema markup implementation for ecommerce websites, from the basic required properties to advanced configurations for variants, shipping, and return policies.
What is Product Schema Markup?
Product schema markup is structured data you add to individual product pages on your e-commerce website. It uses the Schema.org vocabulary to describe a product in a machine-readable format that search engines understand directly, without interpretation.
Product schema enables two distinct types of rich results:
- Product Snippets (for review and editorial pages where products cannot be purchased directly) and
- Merchant Listings (for pages where customers can actually buy the product). For most e-commerce websites selling directly to consumers, Merchant Listing schema is the correct implementation.
| Important distinction: Product Snippets are for editorial review pages. Merchant Listings are for actual purchase pages. Most D2C and e-commerce websites should implement Merchant Listing schema. Using the wrong type is one of the most common implementation errors and will prevent your rich results from appearing. |
Why Product Schema Markup Matters for E-Commerce in 2026
| 30%+ | higher click-through rates for product pages with rich results vs standard listings (Hashmeta E-Commerce SEO Guide, 2025) |
| 73% | of pages cited in Google AI Overviews include relevant schema markup vs only 31.3% of all websites (curaCast, December 2025) |
| 65% | of pages cited in Google AI Mode include structured data, making schema critical for AI-powered discovery (Outpace SEO, 2026) |
| 100% | of product pages missing the required properties get zero rich results, regardless of how good their content is |
Three reasons this is specifically urgent for e-commerce brands in 2026:
- Visual parity with marketplace listings. Amazon and Flipkart product listings appear in Google with prices, ratings, and availability by default because of their structured data infrastructure. An independent D2C brand with correct product schema markup gets the same visual treatment in search results, making it much harder for users to skip over to the marketplace result automatically.
- AI-powered product discovery is growing fast. Consumers increasingly start product searches on Google AI, which synthesises product information from structured data. Brands without schema markup are invisible in these AI-generated product answers.
- UPI and shipping details can be surfaced. Google’s product schema supports shipping rate and return policy properties, which means brands offering free delivery above a certain order value or cash-on-delivery can surface that information directly in the SERP. This is a conversion signal that most e-commerce sites are not using yet.
Product Schema Required and Recommended Properties
According to Google official product structured data documentation, your product schema must include name plus at least one of: review, aggregateRating, or offers. In practice, for a Merchant Listing page where users can purchase, you should implement all of the following:
| Property | Status | What it communicates | India-specific note |
| name | Required | The full product name exactly as it appears on the page | Include size or colour variants in the name if they are separate pages |
| description | Required | A clear description of the product. Must match visible text on the page | Do not keyword-stuff. Write for the customer first |
| image | Required | URL of one or more product images. Multiple images preferred | Use high-resolution images. Min 50x50px but 1200px+ recommended |
| brand | Required | The brand entity of the product | Even own-label products should have a Brand entity with a name |
| offers.price | Required | The numeric price of the product | Use the INR amount as a number, not formatted text like Rs 1,299 |
| offers.priceCurrency | Required | ISO 4217 currency code | Always use your local currency |
| offers.availability | Required | URL indicating stock status | InStock, OutOfStock, PreOrder are the most common values |
| offers.url | Required | Canonical URL of the product page | Use the full absolute URL, not a relative path |
| sku | Recommended | Your internal product SKU | Helps Google match schema to your Merchant Center feed |
| gtin13 | Recommended | International product barcode if available | Not mandatory but helps Google verify product identity |
| aggregateRating | Recommended | Average rating and review count | Requires minimum 10 reviews before implementation is worthwhile |
| offers.shippingDetails | Recommended | Shipping rate and estimated delivery time | Explicitly surface free delivery or COD availability here |
| offers.hasMerchantReturnPolicy | Recommended | Your return and refund policy terms | 30-day return policies surfaced here improve purchase confidence |
| offers.priceValidUntil | Recommended | Date when the price expires (for sales) | Essential for sale pricing to avoid showing expired prices in SERP |
| offers.itemCondition | Recommended | New, used, or refurbished condition | Always specify New Condition for new D2C products |
Complete Product Schema JSON-LD Example for an E-Commerce Website
Below is a production-ready JSON-LD block covering all required and recommended properties for an e-commerce product page. Copy this template, replace the placeholder values with your actual product data, and paste it inside a script tag in your page head.
| <script type=”application/ld+json”> { “@context”: “https://schema.org”, “@type”: “Product”, “name”: “Men’s Cotton Casual Shirt – Navy Blue – Size L”, “description”: “100% pure cotton casual shirt for men. Pre-washed for softness. Ideal for everyday wear and semi-formal occasions.”, “image”: [ “https://yourstore.in/images/shirt-navy-front.jpg”, “https://yourstore.in/images/shirt-navy-back.jpg” ], “sku”: “MCS-NVY-L”, “brand”: { “@type”: “Brand”, “name”: “YourBrandName” }, “offers”: { “@type”: “Offer”, “url”: “https://yourstore.in/mens-cotton-casual-shirt-navy-l”, “price”: “899”, “priceCurrency”: “INR”, “availability”: “https://schema.org/InStock”, “itemCondition”: “https://schema.org/NewCondition”, “priceValidUntil”: “2026-12-31”, “seller”: { “@type”: “Organization”, “name”: “YourStore India” }, “shippingDetails”: { “@type”: “OfferShippingDetails”, “shippingRate”: { “@type”: “MonetaryAmount”, “value”: “0”, “currency”: “INR” }, “deliveryTime”: { “@type”: “ShippingDeliveryTime”, “handlingTime”: { “@type”: “QuantitativeValue”, “minValue”: “1”, “maxValue”: “2”, “unitCode”: “DAY” }, “transitTime”: { “@type”: “QuantitativeValue”, “minValue”: “3”, “maxValue”: “5”, “unitCode”: “DAY” } } }, “hasMerchantReturnPolicy”: { “@type”: “MerchantReturnPolicy”, “applicableCountry”: “IN”, “returnPolicyCategory”: “https://schema.org/MerchantReturnFiniteReturnWindow”, “merchantReturnDays”: “30”, “returnMethod”: “https://schema.org/ReturnByMail”, “returnFees”: “https://schema.org/FreeReturn” } }, “aggregateRating”: { “@type”: “AggregateRating”, “ratingValue”: “4.3”, “reviewCount”: “156”, “bestRating”: “5”, “worstRating”: “1” } } </script> |
| Copy and customise: Replace all placeholder values (name, description, image URLs, SKU, brand name, price, store name) with your actual product data. The structure remains the same across all products. Use this as your master template and create one per product page dynamically from your product database. |
How to Handle Product Variants Correctly in E-Commerce
Product variants are one of the most commonly mishandled areas of e-commerce schema in India. Fashion, footwear, and apparel brands with size and colour options need to understand this clearly.
Option 1: Each variant has its own URL
This is the recommended approach. If each size or colour has a distinct product page URL, implement individual Product schema on each page with that variant’s specific price, availability, and SKU. The product name should include the variant attributes.
| “name”: “Classic Cotton Kurta – Blue – Size M” “sku”: “CCK-BLU-M” “offers”: { “price”: “999”, “availability”: “https://schema.org/InStock” } |
Option 2: All variants on one URL
hasVariant property. When there is a price range across variants, use AggregateOffer with lowPrice and highPrice instead of a single Offer.
| { “@type”: “ProductGroup”, “name”: “Classic Cotton Kurta”, “variesBy”: [“https://schema.org/color”, “https://schema.org/size”], “hasVariant”: [ { “@type”: “Product”, “name”: “Classic Cotton Kurta – Blue – M”, “color”: “Blue”, “size”: “M”, “offers”: {“@type”:”Offer”,”price”:”999″,”priceCurrency”:”INR”,”availability”:”https://schema.org/InStock”} }, { “@type”: “Product”, “name”: “Classic Cotton Kurta – Red – L”, “color”: “Red”, “size”: “L”, “offers”: {“@type”:”Offer”,”price”:”1099″,”priceCurrency”:”INR”,”availability”:”https://schema.org/OutOfStock”} } ] } |
| Avoid this common mistake: Never apply a single Product schema with a single price to a page that shows multiple variants at different prices. If Blue size M is Rs 999 and Red size XL is Rs 1,099, your schema must reflect that difference. Inaccurate pricing in schema markup can trigger a manual action from Google. |
Platform-Specific Implementation for E-Commerce Websites
WooCommerce (WordPress)
Rank Math > Schema > Products and verify the schema template is active. The plugin pulls data directly from WooCommerce product fields, which means your schema stays in sync with your product data automatically.
For advanced properties like shippingDetails and hasMerchantReturnPolicy, use Rank Math’s Custom Schema option or add a JSON-LD block to your product page template using the wp_head hook. The advanced properties require manual entry because they are not typically stored as standard WooCommerce product fields.
| Rank Math setting | Where to find it | What it generates |
| Schema Type | Edit Product > Rank Math > Schema tab | Sets @type to Product automatically |
| Product Name | Pulled from WooCommerce product title | name property |
| Price and Currency | Pulled from WooCommerce pricing fields | offers.price and priceCurrency in INR |
| Stock Status | Pulled from WooCommerce inventory | offers.availability property |
| Product Images | Pulled from WooCommerce product gallery | image property with multiple URLs |
| Aggregate Rating | Pulled from WooCommerce reviews | aggregateRating with ratingValue and reviewCount |
Shopify
Shopify default themes (Dawn, Sense, Refresh) include basic Product schema covering name, price, availability, and image. However, the default implementation often lacks shippingDetails, hasMerchantReturnPolicy, and the gtin/mpn properties that help Google verify your products against its catalogue.
To enhance Shopify’s default schema without touching Liquid code, the Schema Plus for SEO app on the Shopify App Store provides a template editor where you can add all recommended properties. For developers comfortable with Liquid templating, edit your product.json or product.liquid template to add a complete JSON-LD block that pulls values from Shopify’s product object dynamically.
| {{ product.title }} -> maps to “name” {{ product.price | money_without_currency }} -> maps to “price” {{ product.available | json }} -> maps to “availability” {{ product.selected_or_first_available_variant.sku }} -> maps to “sku” |
Custom or headless builds
For custom-built e-commerce platforms (including those built on Laravel, Django, or Node.js), generate JSON-LD server-side as part of your product page template. Pull all product properties directly from your database at render time. This is the most reliable approach because it ensures your schema is always in sync with your live product data including real-time price and stock updates.
Avoid generating product schema through client-side JavaScript. Google’s documentation explicitly warns that JavaScript-generated markup makes Shopping crawls less frequent and less reliable, which is a significant issue for fast-changing data like stock status and pricing.
India-Specific Schema Properties Most E-Commerce Sites Miss
These four properties are under-implemented by e-commerce brands but make a measurable difference to both rich result appearance and purchase conversion.
1. Free delivery and COD surfacing
Consumers make purchase decisions heavily based on delivery cost and COD availability. Surfacing free delivery in your schema creates a visible advantage over competitors who are not using shipping Details in their markup.
| “shippingDetails”: { “@type”: “OfferShippingDetails”, “shippingRate”: {“@type”:”MonetaryAmount”,”value”:”0″,”currency”:”INR”}, “shippingDestination”: {“@type”:”DefinedRegion”,”addressCountry”:”IN”} } |
2. Return policy with free returns
A 30-day free return policy displayed in a product rich result significantly reduces purchase hesitation, particularly for first-time buyers who are unfamiliar with your brand. This property is almost entirely unused by D2C brands currently.
| “hasMerchantReturnPolicy”: { “@type”: “MerchantReturnPolicy”, “applicableCountry”: “IN”, “returnPolicyCategory”: “https://schema.org/MerchantReturnFiniteReturnWindow”, “merchantReturnDays”: “30”, “returnFees”: “https://schema.org/FreeReturn” } |
3. Price drop alert eligibility
Google can show a Price Drop rich result when your product price decreases significantly from its recent historical average. To be eligible, your schema must consistently include the price and price valid until properties so Google can build a pricing history. This is particularly valuable for electronics and fashion brands that run regular sale events.
4. Loyalty programme schema (2026 addition)
Google’s official merchant structured data documentation.
Common Product Schema Mistakes That Cost E-Commerce Sites Their Rich Results
- Using Product schema on category pages. Product schema is for individual product pages only. Never apply it to pages that list multiple products. Google explicitly states that only pages focused on a single product (or its variants) are eligible for product rich results.
- Mismatched price between schema and page. If your schema says Rs 899 but your page shows Rs 999 because of a recent price change, Google will suppress the rich result. Always update schema when prices change. For WooCommerce and Shopify sites with plugins, this update is automatic. For custom builds, price changes must trigger a schema regeneration.
- Showing In Stock when the product is actually sold out. This is the most common and most damaging schema error for e-commerce brands. Inaccurate availability data is a policy violation and can result in a manual action affecting all your product rich results. If you have products that regularly go in and out of stock, use real-time stock status in your schema rather than a static value.
- Adding aggregate Rating with fewer than 10 reviews. Google considers thin review data (very few reviews or an artificially high average) as a negative quality signal. Wait until a product has at least 10 genuine reviews before implementing aggregate Rating for that product.
- Not updating price Valid Until after a sale ends. If your schema shows a sale price of Rs. 699 with a price Valid Until date that has passed, Google shows your listing with the outdated sale price. When the searcher arrives and sees Rs 899, the conversion fails and Google registers it as a mismatch. Always set accurate future dates and update them.
- Applying JavaScript-generated schema to fast-changing products. Stock status and pricing that change frequently need server-side schema generation to ensure Google’s Shopping crawler picks up updates quickly. JavaScript-generated markup is processed during regular crawls, not Shopping crawls, which means changes take longer to appear in search results.
How to Test and Monitor Your Product Schema Markup
Before you publish: validate with these two tools
- Google Rich Results Test — Paste your product page URL or the raw JSON-LD code. This tool tells you exactly which rich results your markup is eligible for and highlights any errors or warnings that need fixing before you go live. Fix all critical errors before publishing.
- Schema Markup Validator — Tests your JSON-LD against the full Schema.org vocabulary. Catches issues that the Rich Results Test may not flag, including incorrect property types and missing recommended properties.
After you publish: monitor in Google Search Console
Google Search Console and navigate to Enhancements in the left sidebar. You will see separate reports for Products (snippets) and Merchant Listings. Each report shows valid pages, pages with warnings, and pages with errors. Check this monthly. Any spike in errors after a site update (price changes, stock updates, template modifications) needs immediate investigation.
Manual verification: check your live results
After two to six weeks of correct schema implementation, search for your product name on Google. If your rich result is showing correctly, you will see the price, availability, and rating directly below your listing title. If you see only a standard blue link after six weeks of correct schema, use the URL Inspection tool in Google Search Console to request a re-crawl of the affected product pages.
Product Schema Markup Is the Fastest Technical SEO Win Available to E-Commerce
For most e-commerce websites, product schema markup is the single highest-ROI technical SEO change you can make right now. The implementation cost is a few hours of setup work. The return is measurable improvement in click-through rates across every product page that correctly implements the markup.
Start with the required properties: name, price in INR, priceCurrency, availability, and at least one of review, aggregateRating, or offers. Get those live, validate them in the Rich Results Test, and submit your sitemaps in Search Console. Then layer in the recommended properties: shippingDetails for free delivery surfacing, hasMerchantReturnPolicy for returns information, and aggregateRating once you have ten or more reviews per product.
Blog Arena 360 is looking for practical insights from real practitioners. Visit our Write for Us page to contribute.
| Disclaimer: This article is for informational purposes only. Product schema requirements and Google’s structured data policies change regularly. Always refer to developers.google.com/search/docs/appearance/structured-data/product for the most current guidelines. Validate all schema using Google’s official testing tools before publishing. |
Frequently Asked Questions About Product Schema Markup
Product schema markup is structured JSON-LD code added to individual product pages that tells search engines your product name, price, availability, ratings, and shipping details in a format they understand directly, enabling rich result displays in Google Search.
Not directly. Google has confirmed it is not a direct ranking factor. However, product schema improves how your existing ranking appears in search results, which increases click-through rates by 20 to 30% on average, bringing more traffic from the same position.
The minimum required combination is name plus at least one of review, aggregateRating, or offers. For Merchant Listing eligibility (pages where products can be purchased), you must also include offers with price, priceCurrency set to INR/USD, and availability.
No. Google’s guidelines explicitly state that product rich results only support pages focused on a single product or its variants. Category pages listing multiple products are not eligible and applying Product schema to them can cause policy violations.
If each variant has its own URL, implement individual Product schema on each page. If all variants share one URL, use ProductGroup schema with hasVariant containing individual Product schemas for each variant. Use AggregateOffer with lowPrice and highPrice when variants have different prices
Two to six weeks is typical depending on how frequently Google crawls your pages. New websites may take longer. Use Google Search Console’s URL Inspection tool to request re-crawling of product pages after implementing schema.
Google will suppress the rich result for that product page. Consistent price mismatches can trigger a manual action affecting all your product rich results. Always keep schema pricing in sync with visible page pricing.
Yes, basic product schema (name, price, availability, image) is included in most Shopify default themes. However, advanced properties like shippingDetails, hasMerchantReturnPolicy, and gtin are typically missing and need to be added through an app or Liquid template customisation.
Yes, but use the correct availability value. Set availability to https://schema.org/OutOfStock rather than InStock. You can also use PreOrder or BackOrder if appropriate. Showing InStock for an out-of-stock product is a policy violation.
Product Snippets are for review and editorial pages where users cannot directly purchase. Merchant Listings are for pages where the product can actually be bought. E-commerce websites selling directly to consumers should implement Merchant Listing schema.




