Home › Blog › Product schema
SEO GUIDES · STRUCTURED DATA

Product schema: every property that matters and what breaks

The required fields, the recommended ones, and the single pair inside Offer that quietly kills most Indian product pages.

By the Digital Hangover team · Updated October 2026 · 9 min read
Quick answer: Product schema is structured data that tells Google what a product is, what it costs and whether it is in stock. Google needs name, image, offers.price and offers.priceCurrency for a merchant listing. Get that pair wrong and the product drops out of rich result eligibility entirely.

What is Product schema?

Product schema — also called product structured data — is a block of machine-readable code that labels a product page. It names the product, the price, the currency, the stock status and who made it.

It is one entry in a much bigger system. If you are new to the idea, start with our guide to schema markup for the fundamentals, then come back here for the Product type specifically.

Product is one of the 25 structured data types Google Search currently supports (Google search gallery, last updated 16 October 2026). That matters, because many schema types produce nothing at all now. Product is not one of them.

Google splits Product into two separate experiences, and the requirements differ:

  • Merchant listing — the page sells the product. Price, availability, shipping and returns can show.
  • Product snippet — the page talks about the product. A rating or review can show, but it is not a shop.

One page, two possible outcomes. Which one you get depends on which properties you supply.

The Product schema property table

This is the table to work from. "Required" means Google's documentation lists the property as required for that experience — leave it out and the markup is not eligible. "Recommended" means it is optional, but Google can use it and you lose the feature it powers.

PropertyStatusWhat it doesWhat breaks without it
nameRequired — both experiencesThe product's nameNothing is eligible. This is the one universal requirement.
imageRequired — merchant listingProduct photo URL, crawlable and indexableNo merchant listing. A blocked or hotlinked image fails the same way as a missing one.
offersRequired for merchant listing; one of three options for a product snippetWraps the commercial facts — price, currency, stockNo price can ever show. For a product snippet you need offers, review or aggregateRating — at least one.
offers.priceRequired — merchant listingThe number a buyer paysNo price in the result. Badly formatted values fail validation outright.
offers.priceCurrencyRequired — merchant listingThree-letter ISO 4217 code, e.g. INRThe price is meaningless to Google, so the whole offer is rejected.
descriptionRecommendedPlain-language product descriptionNothing breaks. Google has less to match against and less to display.
skuRecommendedYour internal product identifierHarder for Google to tie variants and duplicate listings to one product.
gtinRecommendedGlobal barcode number — EAN, UPC, ISBNGoogle cannot match your listing to the same product elsewhere. Weakest product-matching signal you can give.
brandRecommendedManufacturer or brand nameGeneric-looking listing, and brand-qualified queries have less to grip.
offers.availabilityRecommendedStock state, e.g. InStock, OutOfStockNo stock badge. Google may assume available and send clicks to a sold-out page.
offers.itemConditionRecommendedNew, used or refurbishedRefurbished stock looks new. A real problem on resale and open-box catalogues.
offers.shippingDetailsRecommendedDelivery cost and speed by regionNo shipping line in the result. Buyers assume the worst and bounce.
offers.hasMerchantReturnPolicyRecommendedReturn window and who pays return postageNo returns line. On Indian ecommerce that is a conversion cost, not just a missing field.
review / aggregateRatingRecommended, and strictly conditionalStar rating or individual reviews, nested in ProductNo stars. Eligibility rules are tight — see the section below.

Everything in that table comes from Google's own Product structured data documentation (accessed 21 October 2026). Our schema markup generator builds the block for you if you would rather not hand-write it.

Inside Offer: price and priceCurrency

If you fix one thing on this page, fix this. price and priceCurrency are the pair that fails most often, and they fail together — a valid price with no currency is as useless as no price at all.

The rules are narrow:

  • price is a plain number. No currency symbol. No thousands separator. Use a full stop for decimals.
  • priceCurrency is a three-letter ISO 4217 code. For India that is INR — not "Rs", not "₹", not "INR ".
  • Both live inside offers, not on Product itself.
  • The price in the markup must match the price a human sees on the page. A mismatch is a guideline breach, not a formatting slip.
WrongRightWhy
"price": "₹1,499""price": "1499.00"Symbol and comma both invalid in the value
"price": "1,499.00""price": "1499.00"Comma reads as a decimal mark in some locales
"priceCurrency": "Rs""priceCurrency": "INR"Must be ISO 4217
"price": "1499" with no currencyprice + priceCurrency togetherCurrency is required, not inferred

A correct Offer block for a ₹1,499 kurta looks like this. It goes into AIOSEO > Schema > Custom Schema or your theme head — never pasted into the post body, where WordPress snippets routinely strip it:

"offers": {
  "@type": "Offer",
  "price": "1499.00",
  "priceCurrency": "INR",
  "availability": "https://schema.org/InStock",
  "itemCondition": "https://schema.org/NewCondition",
  "url": "https://example.in/product/cotton-kurta/"
}

Availability, condition, shipping and returns

These four are recommended, not required — so most builds skip them. They are also the four that change what a buyer sees before they click, which makes them the highest-value optional properties in the whole type.

Availability takes a schema.org URL, not a word. The common values:

  • InStock — ready to ship.
  • OutOfStock — unavailable, and say so rather than staying silent.
  • PreOrder — not released yet.
  • BackOrder — sold, shipping later.

itemCondition works the same way: NewCondition, UsedCondition, RefurbishedCondition or DamagedCondition, each as a full schema.org URL.

shippingDetails and hasMerchantReturnPolicy are the two most India-relevant. Free delivery over a threshold and a seven-day return window are standard expectations here, and if they are only in your footer, Google has no structured way to surface them. Both can also be configured in Google Merchant Center instead of markup — useful if your catalogue already feeds Google Shopping ads.

Merchant listing or product snippet: which one applies

Google decides this, not you. But the signals you send steer it, and the requirements are genuinely different.

Merchant listingProduct snippet
Page typeYou sell the product directlyYou review, compare or discuss it
Requiredname, image, offers.price, offers.priceCurrencyname, plus one of offers, review or aggregateRating
Can showPrice, stock, shipping, returnsRating, review count, price range
Typical fitProduct detail pages on your storeBuying guides, round-ups, editorial reviews

Two practical consequences. First, a category or listing page is neither — mark up individual products on their own pages, and read our guide to faceted search if filters are generating hundreds of near-duplicate product URLs. Second, an affiliate round-up should not pretend to be a shop. Marking a comparison page as a merchant listing with a price you do not charge is the fastest route to a manual action.

Review and AggregateRating inside Product

Short version, because the full treatment belongs to a post of its own: review and aggregateRating are nested properties of Product here, nothing more.

Three facts worth having:

  • Review snippets are permitted on Product. Google supports them on a defined list of item types — Book, Course list, Event, Local business, Movie, Product, Recipe and Software App — and Product is one of them.
  • On 24 July 2026 Google added a review snippet guideline covering fake and undisclosed incentivised reviews. Paid-for stars and reviews you wrote yourself are not eligible.
  • Reviews must be about the specific product, and they must be visible on the page. Markup-only ratings are a guideline breach.

We do not put Review or AggregateRating markup on our own testimonials, and we advise clients the same way. Self-serving reviews about your own business are ineligible, and the downside of getting it wrong is losing rich results across the whole site.

The Product markup error we see most on Indian ecommerce builds

First-hand, from our own client work: the single most common Product schema defect we find on Indian ecommerce audits is not a missing property. It is offers.price emitted as the same formatted string the theme prints on screen.

The template echoes the display price, so the markup ships "price": "₹1,499" or "price": "1,499.00". Then priceCurrency is left out entirely, because the build assumes rupees and nobody told the schema.

The page validates as having Product markup. The offer is unusable. No price, no stock badge, no merchant listing — and because the markup exists, nobody goes looking.

The fix, in order:

  1. Separate the two values in the template. Keep one raw numeric price for the markup and one formatted price for display. Never reuse the display string.
  2. Strip the symbol and the separators. 1,499.00 becomes 1499.00. Decimals as a full stop, nothing else.
  3. Hard-code priceCurrency as INR unless you run multi-currency. If you do, map it per currency rather than per locale label.
  4. Check a variant page, not just the parent. Variant templates commonly inherit the parent's price, so a ₹2,299 size ships marked at the ₹1,499 base.
  5. Re-test after deploy, on a live URL. Theme caching has a habit of serving the old block for a day.

Three of the five steps are template work, not SEO work. That is why this error survives audits — it lives in the developer's court. If your product templates need the same pass, it usually sits inside a broader technical SEO fix list.

What Product schema cannot do

Valid markup earns eligibility. It does not earn the rich result. Google states plainly that structured data is not a guarantee a feature will appear.

Two more honest limits:

  • It is not an AI visibility tactic. Google's guidance on succeeding in its AI experiences (last updated 10 July 2026) says there are no additional technical requirements and no special structured data needed for AI Overviews or AI Mode. Product schema governs rich-result eligibility in Search. Nothing more.
  • It will not rescue a weak page. Thin copy, slow loading and no reviews are the reasons products do not sell. Schema makes a good page legible, not a bad page good.

Treat it as plumbing. Important, invisible when right, expensive when wrong.

Where to go from here

Work in this order and you will clear the common failures in an afternoon:

  1. Fix price and priceCurrency first. It is the pair that blocks everything else.
  2. Add availability and itemCondition. Cheap, and they change what buyers see.
  3. Add shippingDetails and hasMerchantReturnPolicy in markup or in Merchant Center.
  4. Add sku, gtin and brand so Google can match your product to the same product elsewhere.
  5. Leave review and aggregateRating until last, and only with genuine, visible, on-page reviews.

Then widen the lens. Product markup is one layer of a store's organic performance — our ecommerce SEO guide covers the rest.

Key takeaways: Product is still a supported type, and the only universal requirement is name. For a merchant listing you also need image, offers.price and offers.priceCurrency — and that price must be a bare number with an ISO currency code beside it. Everything else is recommended, and the recommended fields are where the visible wins live.

Frequently asked questions

Is Product schema required for Google Shopping?

No. Google Shopping is fed by a Merchant Center product feed, not by page markup. Product schema is for organic Search results. The two can agree with each other, and should, but one does not replace the other.

Which Product properties are actually required?

Only name is universally required. For a merchant listing you also need image, offers.price and offers.priceCurrency. For a product snippet you need name plus at least one of offers, review or aggregateRating.

Why is my valid Product markup showing no rich result?

Valid markup earns eligibility, not placement. Google says structured data does not guarantee a feature will appear. Check that the page is indexed, the price matches what the page shows, and the image URL is crawlable.

Can I add Product schema to a category page?

Not as a single Product. A category page lists many products. Mark up each product on its own detail page instead. ItemList can describe the listing itself, but it does not create product rich results.

Does Product schema help with AI Overviews or AI Mode?

No. Google's guidance on its AI experiences, last updated 10 July 2026, states there are no additional technical requirements and no special structured data needed. Product schema affects rich-result eligibility in Search only.

For online stores

Product pages that are readable and profitable

We audit markup, templates and category structure together — because that is how product pages actually break.

Explore ecommerce SEO →

Get our posts in Google

Make Digital Hangover a preferred source

One tap tells Google to show more of our SEO and marketing coverage in your Top Stories.