Skip to content
Shopify & Ecommerce

Product Structured Data for Ecommerce: Complete Guide

How to implement Product structured data: merchant listings vs product snippets, required properties, offers, shipping, returns, reviews, variants and testing.

Quick answer

Product structured data is JSON-LD that describes a product page to search engines. For pages where shoppers can buy, Google's merchant listing experiences require the product's name, image and an offer with price and currency, and recommend availability, brand, GTIN, shipping details, return policy, ratings and reviews. Use ProductGroup for variants, mark up only what the page visibly shows, keep data in sync with the page and your Merchant Center feed, never mark up fake reviews, and validate with the Rich Results Test and Search Console reports.

What Product Structured Data Does

Structured data doesn't change what shoppers see on your page. It gives search engines precise facts about the product in a standard vocabulary, so they don't have to infer price or stock from the layout. That makes pages eligible for richer results such as price, availability, ratings, shipping and returns information, and for shopping experiences in Google Search.

This guide focuses on Google's documentation, the most detailed public reference. Other search engines and AI systems also read schema.org markup. It's one part of ecommerce SEO; category pages are covered in category page SEO.

Product Snippets vs Merchant Listings

Google describes two kinds of product results (Google Search Central).

TypeForEmphasis
Product snippetsEditorial and review pages where you can't buy directlyReview information, pros and cons
Merchant listing experiencesPages where shoppers can buy the productPrice, availability, shipping, returns, sizing

Worth noting

Google states that only pages where a shopper can purchase are eligible for merchant listing experiences, not pages linking to other sellers.

From Google's merchant listing documentation (Google Search Central):

PropertyStatusNotes
nameRequiredThe product's name
imageRequiredCrawlable product images
offersRequiredA nested Offer
offers.priceRequiredGreater than zero for merchant listings
offers.priceCurrencyRequiredISO 4217 code, e.g. USD, EUR, INR
offers.availabilityRecommendedInStock, OutOfStock, PreOrder, etc.
brandRecommendedThe brand name
gtin / skuRecommendedGlobal identifiers help matching
itemConditionRecommendedNew, refurbished, used
shippingDetailsRecommendedRates and delivery times
hasMerchantReturnPolicyRecommendedReturn window and method
aggregateRating, reviewRecommendedOnly if genuine and visible

A Minimal Example

Here is a simplified Product with an Offer. Values are placeholders; your markup should come from real product data and match what the page shows.

JSON-LD: Product with Offer (placeholder values)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Example Linen Shirt – White",
  "image": ["https://example.com/images/linen-shirt-white.jpg"],
  "description": "Relaxed-fit shirt in washed linen.",
  "sku": "LS-WHT-M",
  "gtin13": "0000000000000",
  "brand": { "@type": "Brand", "name": "Example Brand" },
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/products/linen-shirt",
    "price": "49.00",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition"
  }
}
</script>

Variants and ProductGroup

For products sold in several sizes, colours or materials, Google supports ProductGroup with productGroupID (the parent SKU), variesBy (the dimensions that differ) and hasVariant (the individual Product variants) (Google Search Central). Two patterns exist:

  • Each variant has a unique SKU or GTIN
  • Each variant can be preselected with a distinct URL
  • Variant names are more specific than the group name
PatternRequirements
Single-page variantsOne canonical URL for the ProductGroup; variants selected by parameters such as ?color=green
Multi-page variantsEach variant page repeats the ProductGroup definition with full markup

Shipping and Returns

Shipping details and return policies help shoppers compare offers. You can include them in Offer markup, and Google also lets merchants configure them in Merchant Center. Keep whichever source you use accurate for each market; a mismatch between markup, page and feed undermines trust in your data.

Reviews and Ratings

Google's review snippet guidelines require that marked-up reviews be readily available to users on the page and prohibit fake or undisclosed incentivized reviews (Google Search Central). Pages using Organization or LocalBusiness markup for reviews the business controls about itself aren't eligible for star review features. For product pages, mark up only genuine reviews shown on that page, and never invent ratings. See product reviews UX for how to display them.

Structured data errors in Search Console?

ZSpace fixes product markup at the template level so it stays accurate as prices, stock and reviews change.

Start a Project

Keep Markup, Page and Feed in Sync

The most common problems aren't syntax errors. They're mismatches: markup showing a price the page no longer shows, stock marked available when the page says sold out, or a sale price in the feed but not on the page. Generate markup from the same data the page uses, update it whenever prices or availability change, and keep your Merchant Center feed on the same source. Google notes that providing both structured data and a feed helps it verify your data.

Platform Notes

Shopify says its themes include product schema automatically, but coverage varies by theme; check for missing brand, identifiers, shipping and returns, and for duplicate Product blocks added by reviews or SEO apps. On headless and custom builds, you own the markup entirely. See Shopify product SEO and Shopify Hydrogen.

Other Useful Schema for Stores

TypeUse
BreadcrumbListCategory and product hierarchy; see internal linking
OrganizationYour business identity, logo and contact details on the homepage or about page
WebSiteSite name
ArticleGuides and blog posts
FAQPageVisible FAQs; Google currently shows FAQ rich results only for well-known government and health sites

Testing and Monitoring

  • Rich Results Test on a sample of product templates and variants
  • Search Console merchant listing and product snippet reports for site-wide errors
  • Check that markup changes with price, sale and stock changes
  • Confirm only one Product block per page
  • Re-test after theme or app updates

Want product data that search engines can trust?

Talk to ZSpace about ecommerce development and Shopify theme fixes for structured data.

Start a Project

Common Mistakes

  • Marking up reviews or ratings that aren't visible
  • Price or availability in markup out of sync with the page
  • Duplicate Product blocks from theme and apps
  • Product markup on category pages
  • Missing identifiers on products that have them
  • Hard-coded markup that doesn't change with the variant selected

Conclusion

Product structured data works when it's complete, accurate and generated from the same data as the page and feed. Cover the required properties, add the recommended ones you can support, handle variants with ProductGroup, mark up only genuine visible reviews, and monitor it. For the broader picture, see ecommerce SEO.

FAQ

Common questions

Machine-readable information, usually JSON-LD using schema.org vocabulary, that describes a product on a page: its name, images, brand, identifiers, price, availability, shipping, returns and reviews.

Get in touch

Have a project in mind?

Whether you're building a new digital product, improving an existing website, or looking to automate part of your business — let's talk.