Services

Adobe Commerce development
Storefront design
Upgrades, migration & support
Performance & SEO
AI & agentic commerce
Custom application development
Book a free audit call

Product Schema for Ecommerce: What to Mark Up and What Google Shows

Product schema: SEO & growth guide from Mistri
Loading...
Product Schema for Ecommerce: What to Mark Up and What Google Shows

Product schema is structured data, usually JSON-LD, that describes a product's name, image, price, availability, identifiers and reviews in a format search engines can read. Google uses it for two kinds of results: product snippets (ratings, price and availability under a normal result) and merchant listings (shopping-style results and panels for pages where the product can be bought). For a store's product pages, aim for the merchant listing requirements, keep every value identical to what the page shows, and test each template.

Requirements below reflect Google's Search Central documentation as last updated in September 2026. Google changes these pages, so check them before a large rollout.

What Google can show from Product markup

  • Product snippets can appear for any page about a product, including review sites. They can show star ratings, review counts, price and availability, and pros and cons for editorial reviews.
  • Merchant listings are for pages where shoppers can buy the product. They can feed shopping experiences in Search, including price, availability, shipping and return details.

Valid markup makes a page eligible. Google does not guarantee any rich result, and markup that does not match visible content can make the page ineligible.

Property checklist: required and recommended

The table combines both result types. "Required" means Google will not treat the item as eligible without it. "Recommended" adds information and improves the chance of richer display.

PropertyProduct snippetMerchant listingNotes
nameRequiredRequiredMatch the visible product name
imageNot listedRequiredCrawlable image URLs of the actual product
offersOne of offers, review or aggregateRating is requiredRequired (an Offer, not AggregateOffer)Nest an Offer per buyable item
offers.priceRequired in an OfferRequired, greater than zeroOr priceSpecification.price
offers.priceCurrencyRecommendedRequiredThree-letter ISO 4217 code
offers.availabilityRecommendedRecommendede.g. https://schema.org/InStock
offers.priceValidUntilRecommendedRecommendedOnly if the price really expires
review, aggregateRatingRecommended (one of the three options)RecommendedOnly genuine reviews shown on the page
offers.itemConditionNot listedRecommendede.g. https://schema.org/NewCondition
offers.urlNot listedRecommendedThe product page URL, including the variant if selected
offers.shippingDetailsNot listedRecommendedIf used: rate, destination and delivery time are required inside it
offers.hasMerchantReturnPolicyNot listedRecommendedIf used: applicable country and return policy category are required
brand.nameNot listedRecommendedUse a Brand object
gtin (or gtin8/12/13/14, isbn), mpn, skuNot listedRecommendedUse real identifiers; do not invent GTINs
descriptionNot listedRecommendedPlain text summary of the product
color, size, material, pattern, audienceNot listedRecommendedUseful for apparel and variants
inProductGroupWithID, isVariantOfNot listedRecommendedLink variants to a ProductGroup

Google's merchant listing page also lists more specialized recommended properties, such as hasCertification, hasAdultConsideration, strikethrough pricing through priceSpecification, and member pricing (in beta). Add them only when they apply to your products.

A minimal valid JSON-LD example

This example meets the merchant listing requirements and includes the most useful recommended properties. Replace every value with data from your own page, and place it in a script tag of type application/ld+json in the product page.

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Merino Wool Hiking Socks",
  "image": [
    "https://www.example.com/media/catalog/product/merino-socks-1.jpg"
  ],
  "description": "Cushioned merino wool socks for day hikes.",
  "sku": "MWS-001-M",
  "brand": {
    "@type": "Brand",
    "name": "ExampleBrand"
  },
  "offers": {
    "@type": "Offer",
    "url": "https://www.example.com/merino-wool-hiking-socks",
    "price": 24.00,
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition"
  }
}

If the product has a real GTIN, add it as gtin (or the specific gtin13 form); never fill the field with a made-up number. If you show genuine customer reviews on the page, add aggregateRating with ratingValue and reviewCount taken from those reviews.

Shipping and returns: markup, Merchant Center or both

Shipping and return details are where many stores struggle, because rules depend on destination, weight and product type. Google offers several places to supply them:

  • Product-level shippingDetails and hasMerchantReturnPolicy in the Offer.
  • Organization-level markup for store-wide policies.
  • Shipping and return settings in Google Merchant Center or Search Console.

Google documents an order of precedence: Merchant Center product feeds and account settings outrank on-page markup, and product-level markup outranks organization-level markup. If your rules are complex, Merchant Center settings are often easier to keep accurate than per-page markup.

Variants: ProductGroup markup

For products sold in sizes or colors, Google supports a ProductGroup with productGroupID, variesBy (for example https://schema.org/size or https://schema.org/color) and hasVariant listing each variant Product. Each variant needs its own identifier, such as sku or gtin, and the properties required for merchant listings. On Magento, configurable products map naturally to this pattern, with the configurable as the group and simple products as variants.

Common mistakes

  • Markup that disagrees with the page. A cached JSON-LD price that differs from the displayed price after a sale starts is a common cause of ineligibility.
  • Duplicate, conflicting blocks. A theme outputs microdata, an SEO extension adds JSON-LD and a tag manager adds a third. Keep one complete source.
  • Ratings without visible reviews, or ratings imported from somewhere else and not shown.
  • Price of zero for "call for price" items. Merchant listings require a price greater than zero.
  • Markup on category pages that describes a list as if it were one product. Use Product markup on product pages.
  • Invented identifiers. Omit gtin rather than filling it with a fake number.

On Magento and Adobe Commerce, check what your theme already outputs before adding an extension. Some themes include basic microdata on product pages and others include none, so view the rendered source first.

How to test and monitor

  1. Run a sample of product URLs from every template and product type through Google's Rich Results Test.
  2. Use the Schema Markup Validator for general schema.org syntax.
  3. After release, watch the Merchant listings and Product snippets reports in Search Console for errors and warnings.
  4. Recheck after theme changes, price rule changes and extension updates.

Product schema beyond Google

Clean product data also helps other systems that read your pages and feeds, including AI shopping assistants. Structured data is not a guaranteed route into those products, but accurate, consistent data makes your catalog easier to understand. Our article on ChatGPT shopping for merchants covers how product recommendations work there. For how structured data fits with everything else, see the ecommerce SEO guide.

FAQ

Is Product schema a ranking factor?

Google presents structured data as a way to understand pages and enable rich results, not as a direct ranking boost. The benefit is richer, more informative listings.

JSON-LD or microdata?

Google supports both, and recommends JSON-LD as the easiest to maintain at scale. What matters most is that one complete, accurate version is on the page.

Do I need markup if I have a Merchant Center feed?

They complement each other. The feed powers listings directly, while markup helps Google understand and verify the page itself. Keep both consistent.

Mistri implements and tests product structured data on Adobe Commerce templates, including variants and shipping data, as part of our Magento SEO services.

Sources

Google Search Central: Product snippet structured data; Google Search Central: Merchant listing structured data; Google Search Central: Product variant structured data; Schema.org: Product.