Product Schema Generator: Build Product JSON-LD for Rich Results
Offer
Reviews (optional)
Tip: validate with Google's Rich Results Test after publishing.
FREE TOOL · NO SIGN-UP
This product schema generator builds Product JSON-LD from a short form: name, brand, images, identifiers, price, availability and optional ratings. It is for store owners, SEOs and developers who want Google to understand a product page and show price, stock and star details in search. Fill in the fields and copy a ready <script type="application/ld+json"> block for your page.
The code updates as you type. If you leave out both a price and a rating, the tool reminds you that Google needs an offer, a review or a rating before a page can qualify for product rich results.
What Product Schema Tells Google
Product markup uses the Schema.org vocabulary to label facts that already appear on your page. Instead of Google guessing which number is the price, you state it directly in structured data.
Product, Offer and Rating
The Product type holds the item itself: name, description, image, brand, SKU and GTIN. Inside it, an Offer describes the deal on this page: price, priceCurrency, availability, itemCondition and an optional priceValidUntil. Ratings sit in AggregateRating (an average plus a review count) and individual Review objects. The generator nests all of these correctly, so you do not have to remember which property belongs to which type. Fields you leave empty are dropped from the output instead of being printed as blank values.
Product snippets vs merchant listings
Google uses product data in two broad ways. Product snippets are the richer search results for pages that review or describe products, showing details such as ratings or price. Merchant listing experiences cover pages where a shopper can buy the item, and they can feed shopping-style results with price, availability, shipping and returns. A page selling a product should include an Offer with price and availability. A review or comparison page may rely on ratings and reviews instead.
How to Generate Product Schema
You need the product page open in another tab so the markup matches what visitors see.
Step 1: Enter name, image and description
Type the product name exactly as shown in the page heading. Add the brand, a short description and one or more image URLs separated by commas. Use full absolute URLs for images that are crawlable and show the actual product. Add the product page URL so the Offer points to the right place.
Step 2: Add price, currency and availability
Enter the price as a plain number, such as 49.99, with no currency symbol. Pick the currency from the list, then choose availability (InStock, OutOfStock, PreOrder, BackOrder, LimitedAvailability, OnlineOnly or Discontinued) and condition. If a sale price ends on a known date, set “Price valid until” so the markup does not keep claiming an expired price.
Step 3: Add identifiers and ratings
Fill in your SKU and a GTIN, EAN or UPC if the product has one. Identifiers help Google match your item with the same product sold elsewhere. If the page shows real customer ratings, enter the average and number of reviews. You can also add one sample review with an author, star rating and text.
Step 4: Copy, paste and test
Copy the JSON-LD block or download it, then paste it into the page head or body, or into your SEO plugin’s custom schema field. Publish, then run the URL through Google’s Rich Results Test and the Schema Markup Validator. Fix any warnings and check the Merchant listings and Product snippets reports in Search Console over the following weeks.
Shipping and Return Policy Markup
The generator covers the core Product and Offer. Shipping and return details are worth adding by hand for merchant listings, because shoppers compare them before clicking.
OfferShippingDetails
Add a shippingDetails property inside your Offer that holds an OfferShippingDetails object. It can describe the shipping rate (shippingRate with a value and currency), the destination (shippingDestination with an addressCountry) and delivery time (deliveryTime with handling and transit days). If shipping is free, set the rate value to 0. If shipping rules are the same across your whole store, you can also configure them in Google Merchant Center instead of repeating them on every page. Keep the numbers consistent with your checkout so the markup never promises something your cart does not deliver.
MerchantReturnPolicy
Return details go in hasMerchantReturnPolicy using a MerchantReturnPolicy object. Common properties are applicableCountry, returnPolicyCategory (for example a finite return window), merchantReturnDays, returnMethod and returnFees. Google also supports declaring a store-wide return policy at the Organization level, which you can build alongside the Organization Schema Generator. Whichever route you choose, match the policy text on your returns page word for word in meaning.
Marking Up Product Variants
Products sold in several sizes or colors need a little more structure than a single Product block.
ProductGroup and hasVariant
Schema.org’s ProductGroup represents the parent item, such as a t-shirt style. It lists which properties change with variesBy (size, color, material) and links each child product through hasVariant. Each variant is its own Product with its own SKU, GTIN, image and Offer. Give the group a productGroupID so the variants are clearly tied together. Use the generator to produce one clean Product block per variant, then wrap them in a ProductGroup in your template.
Variant-specific price and stock
Every variant needs its own Offer, because a large size might cost more or be out of stock while the small one is available. If your page changes variants through a URL parameter, make each variant’s url point to the URL that preselects it. Otherwise Google may see the price for one variant and the markup for another, which looks like a mismatch.
Product Schema on WooCommerce and Shopify
Ecommerce platforms usually output some product markup on their own, so check what is already there before adding more.
Duplicate markup from themes and plugins
WooCommerce, many Shopify themes and SEO plugins can each print a Product block. Two or three conflicting blocks on one page confuse validators and can split your data, with price in one block and ratings in another. View the page source or run the Rich Results Test to see how many Product items Google detects. Aim for one complete Product entity per product page.
Overriding defaults safely
If the built-in markup is missing fields such as GTIN, brand or return policy, first look for a setting in your SEO plugin or theme. If you need a custom block, turn off the default product schema before adding your own so you do not end up with duplicates. Keep custom markup in a template, not pasted by hand into each product, so prices update when the store changes them.
Product Markup Errors That Cost Rich Results
Most lost rich results come from a few predictable problems.
Price mismatch with page
The price in markup must match the visible price, including during sales. Cached pages, currency switchers and stale templates are the usual causes of mismatch.
Self-serving review markup
Ratings must come from real customers and appear on the page. Do not mark up testimonials you picked or a rating you made up. The Review Schema Generator page covers these rules in detail.
Missing GTIN or brand
Missing identifiers do not always cause errors, but they weaken product matching. Add a GTIN and brand whenever the product has them.
Test Your Product Markup Before Launch
Fill in the form above, copy the JSON-LD and run it through Google’s Rich Results Test before your product goes live. Pair it with the Breadcrumb Schema Generator for category paths, the FAQ Schema Generator for product questions, or the general Schema Markup Generator for other types. Browse all free tools on FHSEO Hub.
