My Tool Studio
Schema Markup·4 min read

Product Schema: Price, Stock, Reviews and Shipping

Two listings sell the same backpack. One shows a plain blue link; the other shows 129 euros, in stock, 4.7 stars from 212 reviews. Product markup is often the difference, and it isn't reserved for big retailers: any store publishing accurate markup is eligible. This walkthrough covers the offer fields Google reads, a worked JSON-LD fragment, the review rules behind the stars, the shipping and return details used in merchant listings, and the mistakes that get product markup ignored. The Product Schema Generator on this site can build the whole block from your live product page.

{"@type": "Product","name": "…","url": "…"}RICH RESULTProduct

What Product schema changes in search results

Price, stock and stars, before the click.

Rich product results answer a shopper's first three questions on the results page: how much is it, can I get it, do people like it. Listings that show nothing sit right beside competitors showing all three.

Google uses the same Product type for two features. Product snippets add a rating or price to a normal result and suit review pages as well as shops. Merchant listings cover pages where the product can be bought, and they can also show shipping costs and return terms. The mechanism for both is plain JSON-LD on the page describing the product, its Offer, and optionally its reviews. There's no submission step and no fee. What there is instead: format rules, and they're strict enough that hand-written markup fails them regularly.

A worked Product JSON-LD fragment with offers

A few lines that carry the listing.

Here's the core for that backpack: { "@type": "Product", "name": "Fjell 40L Backpack", "offers": { "@type": "Offer", "price": "129.00", "priceCurrency": "EUR", "availability": "https://schema.org/InStock" } }. Notice what carries the weight: the price is a bare number with no currency symbol, the currency sits in its own ISO code field, and availability is a full Schema.org URL rather than the words in stock.

The complete output layers on description, SKU, brand, an image array and reviews. Fields left blank are simply left out of the JSON, and the Offer itself only appears once you enter a price, so the block never carries an empty offer that Google would flag as an error.

Price and availability in the Offer

The two fields Google rechecks.

Getting these right is mostly about formats. Price takes 129.00, not EUR 129 and not 129,00; the currency lives separately in priceCurrency. Availability must be one of the Schema.org values, InStock, OutOfStock, PreOrder, BackOrder, Discontinued or SoldOut, which is exactly why the generator gives you a dropdown instead of a free text field.

Add Price valid until whenever you run sales so the quoted price carries an expiry, and update availability the day stock changes. Stale offer data is a quick way to lose a listing you already earned, because Google compares the markup against the live page.

Shipping and returns for merchant listings

The optional card worth filling.

Merchant listings can show what delivery costs and how returns work. The Shipping and returns card collects the shipping cost (0 for free), the country you ship to, and handling and transit times as minimum and maximum days. These become an OfferShippingDetails object inside the Offer, which is why they only appear once a price is set.

For returns, choose a set number of days, an unlimited window or no returns, then add the country code, the window and who pays for return shipping. The tool writes a MerchantReturnPolicy for you. Google can also take these details from Merchant Center or Search Console settings, so the card matters most for stores that use neither.

How review stars are calculated

Stars are math, not decoration.

Review stars come from two structures working together: individual Review objects and an AggregateRating carrying ratingValue and reviewCount. A rating with no count behind it is not enough.

In the generator, each review you enter with Add review needs a reviewer name, the review text and a 1 to 5 score, and the AggregateRating is worked out as the average, 4.5 from a 4 and a 5, for instance. The reviews must be real ones that visitors can read on your page. Inventing them for the markup breaks Google's guidelines.

Product schema mistakes that lose the listing

Five ways stores miss out.

Watch for these; any one of them can keep a product out of rich results.

  • Currency symbols inside the price field, the most common parse failure in store markup.
  • Availability written as plain text like In Stock instead of the https://schema.org/InStock URL.
  • Reviews written by the store rather than by customers, or reviews that appear in the markup but nowhere on the page.
  • Marking up a category page with one Product block; each product needs its markup on its own page.
  • GTINs pasted with spaces or dashes so they no longer validate; the generator strips non-digits and maps 8, 12, 13 or 14 of them to the matching gtin property.

Getting more from the Product Schema Generator

Let auto-fill do the reading.

Start by pasting the product URL and pressing Auto-fill from product URL. It reads existing markup from Shopify, WooCommerce, Magento or custom builds, plus OpenGraph tags, microdata and the image gallery, then reports what it found as small chips: price detected, brand detected, image and review counts. Your own edits are kept.

Fill the identifiers even when they feel optional. SKU, MPN and GTIN help Google match your listing with the same product sold elsewhere, and the note under the GTIN field shows which property your digits will map to. Before copying, clear the errors in the Validation panel, then use Test in Google Rich Results Test to see which product features the block qualifies for.

When Product schema is the wrong tool

Not everything sellable is a product.

Service businesses, such as consultants, cleaners and agencies, should use the Service Schema Generator instead, since services describe providers and coverage areas rather than SKUs and stock levels. A shop's own identity, address and hours belong in the Local Business Schema Generator, not inside a Product block.

To see what a product page already outputs, run it through the Schema Markup Extractor first. Many themes add thin Product markup of their own, and two conflicting blocks on one page are harder for Google to trust than one complete block.

Try it now

Open Product Schema Generator

The tool is one click away. No sign up, no upload, no payment.

Open Product Schema Generator