Create Product JSON-LD with price, sale price, stock, ratings, shipping and returns. Two live badges show whether the markup qualifies for Google’s product snippets and merchant listings. Free, no sign-up, and nothing leaves your browser.
If one policy covers your whole store, you can set it once in your Organization schema instead.
Product schema is structured data, based on the schema.org Product type, that describes an item for sale: its name, images, brand, price, availability and ratings. You add it as JSON-LD to the product’s page.
Google uses Product markup for two kinds of results. Product snippets add stars, price and stock to a regular search result. Merchant listings can show your product in the Shopping tab, Images and product panels, with delivery and returns details.
The markup must match what shoppers see on the page. Google checks prices and availability against the page, and mismatches can cost you the rich result.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "AuraCam Camphor Pods, 60 pack",
"image": ["https://www.example.com/pods.jpg"],
"brand": { "@type": "Brand", "name": "AuraCam" },
"gtin13": "4006381333931",
"offers": {
"@type": "Offer",
"price": 499,
"priceCurrency": "INR",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": 4.5,
"ratingCount": 128
}
}Both come from the same Product markup, but they suit different pages and need different fields. The two badges in the generator track each one.
For any page about a product
Stars, price and stock added to a normal search result. Works for review pages and comparison pages as well as stores.
For pages where people can buy
Richer shopping results in the Shopping tab, Images and product panels, including delivery and returns.
Requirements differ for the two result types. This table follows Google’s Product and merchant listing documentation.
| Property | Product snippets | Merchant listings |
|---|---|---|
name | Required | Required |
image | Recommended | Required |
offers.price, priceCurrency | One of offer, rating or review | Required |
aggregateRating, review | One of offer, rating or review | Recommended |
availability, itemCondition | Recommended | Recommended |
gtin, brand, sku, mpn | Recommended | Recommended |
shippingDetails, hasMerchantReturnPolicy | Not used | Recommended |
The current price goes in offers.price. For a discount, add the original price as a UnitPriceSpecification with the type StrikethroughPrice, so Google can show the saving.
Delivery goes in shippingDetails: the cost, the country and how many days handling and transit take. Returns go in hasMerchantReturnPolicy: the window in days and who pays for return shipping. If one policy applies to your whole store, you can set it once in your Organization schema.
"offers": {
"@type": "Offer",
"price": 499,
"priceCurrency": "INR",
"priceSpecification": {
"@type": "UnitPriceSpecification",
"priceType": "https://schema.org/StrikethroughPrice",
"price": 699,
"priceCurrency": "INR"
},
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": { "@type": "MonetaryAmount",
"value": 0, "currency": "INR" },
"shippingDestination": { "@type": "DefinedRegion",
"addressCountry": "IN" },
"deliveryTime": { "@type": "ShippingDeliveryTime",
"handlingTime": { "@type": "QuantitativeValue",
"minValue": 0, "maxValue": 1, "unitCode": "DAY" },
"transitTime": { "@type": "QuantitativeValue",
"minValue": 1, "maxValue": 5, "unitCode": "DAY" } }
},
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": "IN",
"returnPolicyCategory":
"https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 30,
"returnFees": "https://schema.org/FreeReturn"
}
}None is strictly required, but a GTIN in particular helps Google match your product to the same item sold elsewhere, which matters for merchant listings.
The barcode number
A global number such as an EAN or UPC, with 8, 12, 13 or 14 digits. The generator checks the check digit and outputs the matching gtin8, gtin12, gtin13 or gtin14 property.
Your own code
The stock-keeping code you use in your store. It separates variants such as sizes and colours inside your catalogue.
The maker’s part number
The manufacturer’s own number. Add it when you resell another brand’s product, or when there is no GTIN.
For products with variants, such as sizes or colours, give each variant page its own Product markup with its own price and GTIN. Stores that show all variants on one page can use a ProductGroup with hasVariant, which Google supports for merchant listings.
The generator above writes the code. These four steps take it live.
Enter the product name, brand and at least one image.
Add the price, currency and availability shown on the page.
Add a rating, shipping and returns until both badges turn green.
Add the code to the product page, then run the Rich Results Test.
Shopify, WooCommerce and most store platforms already output Product markup on product pages. Check your page source first, and extend the existing markup or turn it off rather than adding a second Product. For a large catalogue, add the markup to your product template so prices and stock update automatically.
Short answers on requirements, prices, ratings and variants.
Product schema describes an item for sale, including its name, images, brand, price, availability and ratings. Google uses it for product snippets with stars and price, and for merchant listings in shopping results.
Product snippets need a name plus an offer, a rating or a review. Merchant listings need a name, an image and an offer with price and currency. Availability, GTIN, shipping and returns are recommended.
Product snippets add stars, price and stock to a normal result and suit any page about a product. Merchant listings are richer shopping results for pages where people can buy, and can show delivery and returns.
Put the current price in offers.price and add the original price in a UnitPriceSpecification with priceType StrikethroughPrice. Enter the original price in this generator and it writes that for you.
Use shippingDetails for the delivery cost, country and delivery time, and hasMerchantReturnPolicy for the return window and fees. A single store-wide return policy can go in your Organization schema instead.
It is not required, but Google recommends it for merchant listings because it identifies the exact product. Use the barcode number from the packaging, and the generator will check its check digit.
Give each variant page its own Product markup with its own price and identifiers. If all variants share one page, use a ProductGroup with hasVariant and variesBy.
Yes. Ratings and reviews in the markup must come from real customers and be visible on the page. Do not mark up scores from other websites.
Google says AI features need no special markup. Accurate product markup still gives search engines clear facts about price, stock and ratings, which supports correct answers. It does not guarantee being cited.
Yes. It is completely free, with no sign-up and no limit. Everything runs in your browser, so your product details are never uploaded to a server.
Product pages work best alongside these types of markup.
Search Savvy’s e-commerce SEO team fixes product markup across your templates, sets up shipping and returns, and grows your visibility in Google and AI search.