What Is Product Schema? The Complete Guide (2026)

Saar Twito10 min read
Saar Twito
Saar TwitoFounder & SEO Engineer

Hi, I'm Saar - a software engineer, SEO specialist, and lecturer who loves building tools and teaching tech.

View author profile →

What Is Product Schema?

Product schema is a type of structured data — based on the Schema.org Product vocabulary — that explicitly tells Google a page describes a product available for purchase. When correctly implemented, it makes pages eligible for two distinct rich result types: Product Snippets (stars, price, availability below the title) and Merchant Listings (the shopping carousel at the top of commercial search results).

TL;DR

  • What it is: JSON-LD that identifies a page as a product, unlocking Product Snippets and Merchant Listings in Google Search.
  • Required properties: name, image, offers (with price and priceCurrency).
  • Price format: Always a plain number string — "19.99", never "$19.99" or "1,350".
  • Two rich result modes:Product Snippets (for review/editorial pages — needs review, aggregateRating, or offers) and Merchant Listings (for e-commerce purchase pages — needs price > 0, currency, and availability).
  • Validate with: Greadme — it checks all Product fields including price format, availability values, and offer structure.

Product Snippets vs. Merchant Listings — Two Different Rich Results

Google supports two separate rich result types for Product schema, each with different eligibility requirements. Understanding the difference is essential because you may qualify for one and not the other.

FeatureProduct SnippetsMerchant Listings
Designed forPages where customers cannot purchase directly — editorial reviews, comparison sites, roundupsPages where customers can purchase directly — e-commerce product pages
Where it appearsBelow the page title in organic resultsShopping carousel at the top of SERPs
What it showsStar ratings, review count, price range, pros/consProduct image, price, store name, shipping, return policy
RequiresAt least one of: review, aggregateRating, or offersimage + Offer with price > 0 + priceCurrency + availability
AggregateOffer allowed?YesNo — must be Offer, not AggregateOffer
Free products (price = 0)?YesNo — price must be > 0

If you run an e-commerce store where users can buy directly, target Merchant Listings — that's the shopping carousel that drives the highest-intent commercial traffic. If you run a review or comparison site, target Product Snippets. Google notes that adding the full Merchant Listings properties also makes pages eligible for Product Snippets, so e-commerce sites benefit from implementing both.

Required Properties

Based on Google's Product structured data documentation, these properties are required. Missing any one of them is a hard error that prevents rich results:

PropertyTypeNotes
nameTextThe product name. Must match the visible product title on the page.
imageImageObject or URLAt least one product image. Google recommends providing 1:1, 4:3, and 16:9 aspect ratios, each with a minimum of 50,000 pixels.
offersOffer or AggregateOfferThe purchase offer. An Offer object must include price and priceCurrency at minimum.

Recommended Properties

These properties don't block basic eligibility, but they significantly improve rich result quality, AI citation accuracy, and Merchant Listings eligibility:

PropertyWhy it matters
descriptionA clear product description. Used by Google for Merchant Listings and by AI systems for citation snippets. Strongly recommended.
brandA Brand or Organization object with a name. Helps Google identify the product in its Knowledge Graph and improves disambiguation for AI search.
sku / mpn / gtinAt least one product identifier. Used for product matching across multiple merchants. gtin (barcode) is the strongest signal for Google Shopping.
aggregateRatingSummary of all reviews. Requires ratingValue and either reviewCount or ratingCount. Displays as stars in Product Snippets.
reviewIndividual reviews. Each must have an author (Person or Organization) and a reviewRating.

How to Structure the Offer Object

The offers property is the most commonly misconfigured part of Product schema. Greadme validates every field inside Offer— here's what each one means:

FieldRequired?Correct format
priceYesPlain numeric string or number. "19.99" or 19.99. No currency symbols, no commas.
priceCurrencyYes3-letter ISO 4217 currency code: "USD", "EUR", "GBP".
availabilityRecommendedSchema.org URL: "https://schema.org/InStock" or short form "InStock". Other valid values: OutOfStock, PreOrder, BackOrder, Discontinued.
itemConditionRecommended"https://schema.org/NewCondition", "https://schema.org/UsedCondition", or "https://schema.org/RefurbishedCondition".
urlRecommendedThe page URL where the product can be purchased. Required for Merchant Listings to work correctly.
priceValidUntilOptionalISO 8601 date: "2026-12-31". Greadme flags this as an error if the date is in the past.

Full Implementation Example

Standard Product (single seller)

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Wireless Noise-Cancelling Headphones",
  "image": [
    "https://example.com/headphones-1x1.jpg",
    "https://example.com/headphones-4x3.jpg",
    "https://example.com/headphones-16x9.jpg"
  ],
  "description": "Premium wireless headphones with 30-hour battery and active noise cancellation.",
  "brand": {
    "@type": "Brand",
    "name": "SoundPro"
  },
  "sku": "SP-ANC-300",
  "gtin13": "4901234567890",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.6",
    "reviewCount": "312"
  },
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/products/headphones",
    "priceCurrency": "USD",
    "price": "149.99",
    "priceValidUntil": "2026-12-31",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition"
  }
}

Product with Merchant Listings (includes shipping and return policy)

"offers": {
  "@type": "Offer",
  "priceCurrency": "USD",
  "price": "149.99",
  "availability": "https://schema.org/InStock",
  "itemCondition": "https://schema.org/NewCondition",
  "shippingDetails": {
    "@type": "OfferShippingDetails",
    "shippingRate": {
      "@type": "MonetaryAmount",
      "value": "0",
      "currency": "USD"
    },
    "shippingDestination": {
      "@type": "DefinedRegion",
      "addressCountry": "US"
    },
    "deliveryTime": {
      "@type": "ShippingDeliveryTime",
      "handlingTime": {
        "@type": "QuantitativeValue",
        "minValue": 0,
        "maxValue": 1,
        "unitCode": "DAY"
      },
      "transitTime": {
        "@type": "QuantitativeValue",
        "minValue": 3,
        "maxValue": 5,
        "unitCode": "DAY"
      }
    }
  },
  "hasMerchantReturnPolicy": {
    "@type": "MerchantReturnPolicy",
    "applicableCountry": "US",
    "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
    "merchantReturnDays": 30,
    "returnMethod": "https://schema.org/ReturnByMail",
    "returnFees": "https://schema.org/FreeReturn"
  }
}

shippingDetails and hasMerchantReturnPolicyare required for full Merchant Listings eligibility in major markets. Without them, Google Search Console shows "merchant listing experience" warnings.

AggregateOffer (multiple sellers / price range)

"offers": {
  "@type": "AggregateOffer",
  "lowPrice": "129.99",
  "highPrice": "189.99",
  "priceCurrency": "USD",
  "offerCount": "5"
}

Use AggregateOffer when the product is sold by multiple sellers at different prices — for example, a comparison or marketplace page. Note: AggregateOffer qualifies for Product Snippets but not Merchant Listings, which require a single Offer with exact price and availability.

The 8 Most Common Product Schema Mistakes

1. Price with a currency symbol or comma

"price": "$149.99" and "price": "1,350.00"both fail Greadme's validation. The price field must be a plain numeric string or number — no symbols, no commas. Currency goes in the separate priceCurrency field as a 3-letter ISO 4217 code ("USD").

2. Missing priceCurrency

A price without a currency is meaningless to Google's parser. Omitting priceCurrency is a hard error that disqualifies the page from both Product Snippets and Merchant Listings.

3. Using AggregateOffer for Merchant Listings

Google's Merchant Listings require a single Offer object with exact price, currency, and availability. An AggregateOffer— even a valid one — disqualifies the page from Merchant Listings. Greadme reports this as a separate eligibility issue so you know exactly which surface you're blocked from.

4. Expired priceValidUntil

If priceValidUntilis set to a past date, Google may stop showing the price in rich results. Greadme flags this as a warning. Either update it to a future date or remove the field entirely if you don't need it.

5. aggregateRating without reviewCount or ratingCount

aggregateRating requires both ratingValue and either reviewCount or ratingCount. An aggregate rating without a count is a hard error — Google needs to know how many people contributed to the average.

6. Fake or promotional reviewer names

Review author.name values like "50% Off Deal" or "Best Discount" are invalid and Greadme flags them as errors. Reviewer names must be real person or team names (e.g., "James Smith"). Promotional names in review authors can trigger a manual action from Google.

7. Missing product identifier

Without at least one of sku, mpn, or gtin, Google cannot match your product across multiple merchants or data sources. This reduces your Merchant Listings distribution. gtin (the international barcode) is the strongest identifier for Shopping.

8. SKU containing whitespace

A sku value with spaces (e.g., "SP ANC 300") fails Greadme's validation. SKU values must not contain any whitespace characters. Use hyphens or underscores instead.

How Product Schema Affects AI Visibility

AI shopping assistants and search engines (ChatGPT Search, Perplexity, Google AI Overviews) parse Product JSON-LD to extract structured facts before reading prose. When answering queries like "what are the best noise-cancelling headphones under $200?", they pull:

  • name — to identify and name the product in the response
  • offers.price + priceCurrency — to compare prices across products without guessing from prose
  • aggregateRating.ratingValue — to rank or recommend products based on user satisfaction
  • brand.name — to attribute the product to a recognized manufacturer
  • offers.availability — to filter out out-of-stock items from purchase recommendations

Industry data from 2025 shows pages with complete Product schema achieve 30–40% higher AI citation rates compared to product pages without structured data. For e-commerce sites, this translates directly to more product mentions in AI-generated shopping guides and buying recommendations.

How to Validate Your Product Schema

The fastest way to validate Product schema is to run your URL through Greadme. Greadme checks every field in the Product and Offer objects — including price format, currency codes, availability values, aggregateRating structure, reviewer name validity, and SKU format — and gives you a scored report with actionable fixes. It also tells you separately whether you qualify for Product Snippets and Merchant Listings.

FAQ

Is Product schema required for Google Shopping?

For organic Merchant Listings (the free shopping results), yes — Product schema with a valid Offer is required. For paid Google Shopping ads, product data is managed through Google Merchant Center, not structured data. Both channels can benefit from the same Product schema implementation.

Can I use Product schema for a service instead of a physical product?

No. Product schema is specifically for tangible goods and downloadable products. For services, use Service schema or a more specific type like LocalBusiness.

Do I need shippingDetails for Product schema to work?

Not for basic eligibility — shippingDetailsis optional. However, Google requires it for full Merchant Listings eligibility in the US, Canada, Australia, and most European markets. Without it, Google Search Console shows a "merchant listing experience" warning and the product may not appear in the shopping carousel.

What's the difference between Offer and AggregateOffer?

Offer represents a single seller's offer at a specific price. AggregateOffer represents a price range across multiple sellers (use lowPrice, highPrice, and offerCount). UseAggregateOffer on comparison or marketplace pages. Use Offer when you are the seller and want Merchant Listings eligibility.

Can I have Product schema and AggregateRating without any reviews on the page?

No. Any rating in your schema must reflect ratings that are visible to users on the page. Adding aggregateRatingwith no visible reviews on the page violates Google's structured data guidelines and can trigger a manual action for spammy structured data.

How do I mark up a product with variants (colors, sizes)?

For product variants, use ProductGroup schema with individual Product objects for each variant linked via hasVariant. Each variant needs its own sku or gtin, a variant-specific image, and an offers.url that deep-links directly to that variant.

Should Product schema go on every page of my e-commerce site?

Apply it on individual product pages and product variant pages. Do not apply it on category pages, search result pages, or the homepage — those should use ItemList or WebPageschema instead. Applying Product schema to non-product pages confuses Google's classifier.

Conclusion

Product schema is the highest-leverage structured data investment for any e-commerce site. Three properties — name, image, and a properly formatted Offer — are enough to qualify for Product Snippets. Add aggregateRating, brand, a product identifier, and shippingDetails to unlock full Merchant Listings eligibility. The most common failure point is the price format — keep it as a plain number, never include currency symbols or commas. Validate with Greadme to catch offer-level errors before they silently cost you shopping placement.