Product Schema

How to implement schema.org/Product markup for Google's product snippet and merchant listing rich results — required vs. recommended properties, the availability enum, why Product schema isn't the same as a Merchant Center feed, and how to fix the common Search Console errors.

First published: Jun 27, 2026 · Last updated: Jul 29, 2026 · Advanced
demand #8 in Structured Data#32 in On-Page#132 in Technical SEO#172 on the site

Product schema (schema.org/Product) is structured data that tells search engines a page's product name, price, availability, and reviews, so the page can qualify for Shopping-style rich results. The minimum for a product snippet — the lighter of Google's two experiences — is name plus at least one of offers, review, or aggregateRating; a merchant listing needs offers outright, not as one option among three. Google splits this into two experiences with different strictness — product snippets (price/reviews on any product page; priceCurrency only recommended, price of 0 allowed) and merchant listings (transactional pages; require image, offers, and a price greater than zero with priceCurrency). The single biggest confusion I see: Product schema markup and a Google Merchant Center feed are separate systems with separate validators — passing the Rich Results Test doesn't validate your feed, and price/availability must match across your markup, your feed, and your actual checkout or Google flags a mismatch. Valid markup only makes you eligible; Google still decides whether to show the result.

TL;DR — schema.org/Product markup (usually JSON-LD) makes a product page eligible for two distinct Google experiences: product snippets (price/reviews on any product page — priceCurrency only recommended, price: 0 allowed) and merchant listings (transactional pages — require image, offers, and a price > 0 with priceCurrency). Minimum for a product snippet: name + at least one of offers/review/aggregateRating — a merchant listing needs offers outright, not as one option among three. The biggest trap is conflating this on-page markup with a Google Merchant Center feed — separate system, separate validator; Google reconciles them, and price/availability must match across markup, feed, and checkout or Google flags a mismatch. Valid markup only earns eligibility; Google’s systems still decide whether to show the result. Whether this article’s implementation angle or the broader ecommerce-SEO angle is what you’re here for, both live in the same place — this topic is cross-listed under structured data and under ecommerce SEO for exactly that reason.

Evidence for this claim For the current product-snippet feature, Product requires name plus at least one of review, aggregateRating or offers. This is not a universal minimum for every Product use, merchant listing, or Schema.org validator. Scope: product snippets Confidence: high · Verified: Product snippet structured data

What Product schema does — two experiences, not one

Most guides flatten “Product schema” into a single requirements list. Google actually splits it into two rich-result experiences with different strictness, and knowing which one you’re aiming for is half the battle:

Evidence for this claim Google documents separate product snippet and merchant listing experiences with different property requirements. Scope: Google Search Product documentation; validate against the intended experience. Confidence: high · Verified: Google: Product structured data
  • Product snippets — for non-transactional or general product pages, emphasizing reviews and price. Lighter requirements.
  • Merchant listings — for pages where the product can be purchased directly, emphasizing full shopping details (price, availability, shipping, returns). Stricter requirements. Evidence for this claim Google documents separate product snippet and merchant listing experiences with different property requirements. Scope: Google Search Product documentation; validate against the intended experience. Confidence: high · Verified: Google: Product structured data

Google’s own framing: “Two markup types exist: Product snippets for non-purchase pages, emphasizing reviews, and Merchant listings for purchase pages, highlighting product details like sizing and shipping.” Same schema.org/Product vocabulary underneath — the difference is which properties Google requires for each.

Evidence for this claim Schema.org defines the Product vocabulary, while Google separately defines which properties it supports and requires for product snippets and merchant listings. Passing generic Schema.org validation does not establish Google rich-result eligibility. Scope: vocabulary Confidence: high · Verified: Product

The minimum for a product snippet — Google’s lighter of the two experiences: Product.name, plus at least one of offers, review, or aggregateRating. That “one of three” flexibility is specific to product snippets. A merchant listing always needs offers — Google’s own required-property table lists name, image, and offers as required, full stop, with no either/or. And a scoping rule worth internalizing — Google: “product rich results only support pages that focus on a single product (or multiple variants of the same product).” A category page (“shoes in our shop”) is not a product; for a line of variants, reach for ProductGroup markup instead (a direct sibling topic).

ProductGroup should describe genuine variants in the catalog, not every theoretical configuration a selector could calculate. A variant should have a stable identity, real attributes, a reachable or selectable state, and an offer the commerce system can keep current. Emitting the Cartesian product of every option can produce valid-looking markup that invents products shoppers cannot select or buy. The detailed inclusion rules live in Product Variant SEO.

Product level

PropertyProduct snippetMerchant listing
nameRequiredRequired
imageRecommendedRequired
offers(one of offers/review/rating)Required
descriptionRecommendedRecommended
skuRecommendedRecommended
gtin / mpnRecommendedRecommended
brandRecommendedRecommended (brand.name)
aggregateRatingRecommendedRecommended
reviewRecommendedRecommended

Offer level (offers, an Offer object)

PropertyProduct snippetMerchant listing
priceRequired (0 allowed for free items)Required (must be > 0)
priceCurrencyRecommendedRequired
availabilityRecommendedRecommended
priceValidUntilRecommendedRecommended
itemConditionRecommendedRecommended
hasMerchantReturnPolicyRecommended
shippingDetailsRecommended
urlRecommendedRecommended

The two rules people miss most: for merchant listings, “merchant listing experiences require a price greater than zero” (product snippets tolerate 0), and priceCurrency is required for merchant listings but only “currently recommended” for basic product snippets.

Required/recommended split verified directly against Google’s Product snippet and Merchant listing structured-data docs, 2026-07-18 — these tables can change, so re-check them against the live pages before relying on them for a launch.

The availability property and its enum values

availability isn’t strictly required for eligibility, but treat it as essential — it drives the “In stock” / “Out of stock” label users see, and it’s a key field Google matches against your Merchant Center feed. It takes a schema.org enum, and passing a plain string like "in stock" instead of the URL/enum value is one of the most common validation errors.

The full set Google documents for Product:

ValueMeaning
InStockAvailable to buy now
OutOfStockNot currently available
PreOrderNot released yet; orders accepted for future delivery
PreSaleAvailable for order before general availability
BackOrderOrdered but temporarily out of stock
OnlineOnlyOnly available online
InStoreOnlyOnly available in physical stores
LimitedAvailabilityLimited quantity
DiscontinuedNo longer produced
SoldOutSold out (e.g., a limited run)

For the SEO handling of out-of-stock and discontinued items — whether to keep, redirect, or noindex them — the out-of-stock products article in the ecommerce cluster goes deeper than the markup alone.

The ecommerce availability contract

availability is not a direct copy of a warehouse quantity. A product can physically exist but be unsellable in a market, unavailable for a selected variant, restricted to pickup, unable to reach a postcode, or temporarily blocked at checkout. Reconcile the whole decision chain:

Evidence for this claim Google treats on-page Product structured data and Merchant Center feeds as separate, complementary ways to provide product data. Scope: Google Search ecommerce guidance; the systems can be reconciled but are validated separately. Confidence: high · Verified: Google: Share product data
LayerQuestion to reconcile
Inventory backendHow many units exist, and for which SKU and location?
Sellability serviceMay that SKU be offered in this market and channel now?
Fulfillment serviceCan the selected quantity reach this postcode by delivery, pickup, or store transfer?
Visible product pageWhat availability does the selected variant and location show the customer?
Product/Offer markupWhich schema.org value describes the published offer on this URL?
Merchant or agent feedWhat current item, market, channel, price, and availability were submitted?
Cart and checkoutCan the exact SKU actually be purchased under the represented conditions?

Choose an authoritative commerce service for the underlying decision, then map its states deliberately into the smaller vocabularies required by schema.org, Google or Microsoft feeds, and agentic-commerce integrations. Do not let each template and feed invent its own translation of available, backorderable, pickup-only, or discontinued. Evidence for this claim Google treats on-page Product structured data and Merchant Center feeds as separate, complementary ways to provide product data. Scope: Google Search ecommerce guidance; the systems can be reconciled but are validated separately. Confidence: high · Verified: Google: Share product data

Postcode-dependent fulfillment needs two levels of truth. The landing page, markup, and feed should state the generally published offer accurately; after a customer supplies a location, the page and checkout can show the more specific fulfillment outcome. Do not publish InStock merely because one warehouse has a unit when the represented market cannot buy it, and do not mark the entire parent product OutOfStock because one size, store, or delivery method is unavailable. The Product Variant SEO URL contract applies when availability changes with the selected SKU.

Validate at least these representative states after catalog, template, feed, or fulfillment changes:

  • an ordinary in-stock SKU;
  • a temporarily unavailable or backorderable SKU;
  • one unavailable variant inside an otherwise available product group;
  • a postcode-restricted delivery with an available pickup or store option;
  • a discontinued item;
  • a recently restocked item before and after feed refresh.

For each one, capture the visible selection, raw and rendered markup, feed row, cart line, and checkout result. A passing Rich Results Test proves markup eligibility; it does not prove feed freshness, personalized fulfillment, or purchase success.

Evidence for this claim Google documents separate product snippet and merchant listing experiences with different property requirements. Scope: Google Search Product documentation; validate against the intended experience. Confidence: high · Verified: Google: Product structured data

Product schema vs. Google Merchant Center feeds — validated separately

This is the confusion I most want to kill. Product schema markup and a Merchant Center product feed are two separate systems. Google reconciles them, but they are not one submission and they are not validated together.

Google spells out the three options: “To provide rich product data to Google Search you can add Product structured data to your web pages, upload data feeds with Google Merchant Center and opt into free listings within the Merchant Center console, or both.” Evidence for this claim Google treats on-page Product structured data and Merchant Center feeds as separate, complementary ways to provide product data. Scope: Google Search ecommerce guidance; the systems can be reconciled but are validated separately. Confidence: high · Verified: Google: Share product data And on why you might do both: “Providing both structured data on web pages and a Merchant Center feed maximizes your eligibility to experiences and helps Google correctly understand and verify your data. Some experiences combine data from structured data and Google Merchant Center feeds if both are available. For example, product snippets may use pricing data from your merchant feed if it’s not present in the structured data on the page.”

Read that carefully: they’re combined when available, which is exactly why people assume they’re the same system. The practical consequences:

  • Two validators. Markup is checked with the Rich Results Test and monitored in Search Console; the feed is checked with Merchant Center diagnostics. Passing the Rich Results Test says nothing about whether your feed is valid, and vice versa.
  • You don’t need a feed to earn a merchant listing. On-page structured data alone can produce merchant-listing rich results. As John Mueller framed it, there’s also “the possibility to submit a feed to your merchant center account, to show products there.” The feed is an additive path, not a prerequisite.

Keep price and availability consistent across markup, feed, and checkout

The Merchant Center spec is explicit that merchants must “accurately submit the product’s price and currency, and match with the price from your landing page, structured data, and at checkout.” So price and availability have to agree in three places: your on-page Offer, your Merchant Center feed, and the actual checkout. If they diverge, Google can flag a mismatch or suspend the item even when your JSON-LD validates cleanly. Clean markup is necessary; consistency is what keeps the listing live. If you sell on Bing too, the same discipline applies to Microsoft Merchant Center — its feed system is the Bing-side equivalent of Google’s. For variants, reconcile the entire selected offer—not only price and stock. Product identity, SKU, group ID, selected attributes, price, currency, and availability should refer to the same sellable item on the visible PDP, in the rendered JSON-LD, in the feed, and through cart and checkout.

Evidence for this claim Google treats on-page Product structured data and Merchant Center feeds as separate, complementary ways to provide product data. Scope: Google Search ecommerce guidance; the systems can be reconciled but are validated separately. Confidence: high · Verified: Google: Share product data

Reviews and ratings — and the self-serving-review myth

review and aggregateRating remain documented, eligible Product properties for star ratings — nothing about that changed. Two rules to get right:

  • Reviewer names must be a person or team, not promotional text. Google’s examples: “Not recommended: ‘50% off on Black Friday’. Recommended: ‘James Smith’ or ‘CNET Reviewers’.”
  • Pros and cons structured data is editorial-only. Google: “Only editorial product review pages are eligible for the pros and cons appearance in Search results.” A merchant describing its own product can’t use it.

Now the myth I want to correct precisely, because it gets mangled constantly:

“Google killed review stars for product pages the same way it did for business reviews.” — False, and the distinction matters.

The self-serving-reviews restriction is scoped to LocalBusiness / Organization markup, not Product. Google’s wording: “If the entity that’s being reviewed controls the reviews about itself, their pages that use LocalBusiness or any other type of Organization structured data are ineligible for star review feature.” That policy dates to September 2019 and targets a business rating itself. Product review/aggregateRating are still eligible.

What has tightened is genuine-review enforcement more broadly — Google’s Reviews System, the Product Reviews updates, and site-reputation-abuse policy increasingly discount manipulated or incentivized ratings even where the markup validates. So the correct statement is: Product review stars are still eligible, but the ratings must be genuine, user-sourced, and about the product — not a blanket structured-data ban. Also don’t aggregate ratings from other sites into your own markup; Google’s guidance is a flat “Don’t aggregate reviews or ratings from other websites.” The deeper eligibility discussion lives in the Review schema and AggregateRating schema siblings rather than here.

Identifiers and trust signals: sku, gtin, mpn, brand

These are “recommended,” not “required,” in Search’s own spec — but they carry real weight on the Merchant Center / shopping side, where product matching against the global catalog depends on them:

  • gtin — the global identifier (UPC/EAN/ISBN). The strongest matching signal; supply it whenever the product has one.
  • mpn — manufacturer part number, for products without a GTIN.
  • brand — the manufacturer/brand name (brand.name).
  • sku — your own internal identifier.

Fill these in even though Search calls them optional; incomplete identifiers are a common reason a product is technically eligible yet underperforms in shopping surfaces where matching depends on them.

Return policy and shipping

For merchant listings, hasMerchantReturnPolicy and shippingDetails are recommended. Google’s steer: define the return policy once at the Organization level, not per-offer — “We recommend you provide a global return policy for your business under Organization markup instead… Only if some of your products have specific return policies… use this property under Offer.” That’s where the Organization schema sibling comes in — the site-wide return policy belongs there, with per-Offer overrides reserved for exceptions.

On images, Google recommends “multiple high-resolution images (minimum of 50K pixels when multiplying width and height) with the following aspect ratios: 16x9, 4x3, and 1x1.”

Why your valid markup still shows no rich result

Eligibility is not display. Mueller listed what it takes: “It requires that the page be indexed, that the page has valid structured data on it, and that our systems have determined that it’s worth showing this structured data.” That last clause is the one people forget — you can do everything right and Google can still decide not to surface the enhancement. Getting the markup correct only puts you in the running.

JSON-LD and the AI-shopping angle

Use JSON-LD — it’s Google’s recommended format and by far the most maintainable at ecommerce scale (it isn’t interleaved with your HTML and can be injected by your platform). Beyond classic rich results, there’s a growing practitioner theory that complete Product schema also helps AI shopping tools read and recommend products — worth flagging as an open, unverified angle rather than something Google’s Product structured-data documentation establishes or promises. Getting the markup right costs nothing extra either way, so treat it as a reasonable bet, not a guaranteed payoff.

For where Product schema sits in the wider structured-data picture, see the broader Schema Markup and Structured Data hubs this article nests under; for the full product page, see the product page SEO work in the ecommerce cluster.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin an expert quote first.