Page & Bell

Product Schema Generator

This generator builds a valid Product JSON-LD block with a nested Offer — the structure Google requires for both product snippets and merchant listing experiences. Every value is serialized with JSON.stringify, so quotes and special characters in product names never break the JSON. The tool also checks your GTIN’s GS1 check digit, enforces a plain-number price format, and warns when a recommended field is missing — the three issues that account for most rejected product markup.

  • Product name is required.
  • Price is required for an Offer.

Fill in at least the product name and a valid price to generate the JSON-LD markup.

How to use the product schema generator

  1. Enter the product name and price — the only two strictly required fields. The price must be a plain number like 119.99, without a $ sign.
  2. Add the image URL, brand, and at least one identifier (SKU or GTIN). These are what unlock the richer merchant listing treatment in Google.
  3. Pick availability (in stock, out of stock, pre-order) and condition. Both map to official schema.org enumeration URLs in the output.
  4. Only enable aggregateRating if your page actually displays customer reviews — markup for ratings that are not visible on the page violates Google’s guidelines.
  5. Copy the <script> block into the product page’s HTML, then confirm detection with Google’s Rich Results Test.

Required vs. recommended fields for Google

Google distinguishes hard requirements (markup is ineligible without them) from recommendations (more fields, better treatment). For merchant listing experiences — the result type with the image and shopping-style layout — the breakdown is:

FieldStatusNotes
nameRequiredMust match the visible product title.
offers.priceRequiredPlain number; must equal the price shown on the page.
imageRequired (merchant listings)Crawlable URL, ideally 800 px+ on the long edge.
availabilityRecommendedschema.org enumeration; drives the “in stock” label.
gtin / sku / brandRecommendedIdentifiers let Google match the product to its catalog.
aggregateRatingRecommendedOnly with genuine, on-page customer reviews.

The rejection reasons we see most often

Four problems cause the bulk of “Product markup detected, no rich result shown” cases. Price mismatch: the JSON-LD says 99.00 while a sale banner shows $79.00 — Google compares them and drops the snippet. Update markup and visible price together. Stale availability: markup frozen at InStock while the page says sold out; regenerate the block when inventory state changes, or template it server-side. Blocked images: the image URL lives on a CDN whose robots.txt disallows Googlebot, so the merchant listing requirement silently fails. Self-assigned stars: an aggregateRating with no review system behind it. The first three cost you one page; the fourth can trigger a sitewide structured-data manual action, which is far more expensive than the stars were ever worth.

Frequently asked questions

What is the difference between product snippets and merchant listings?

Google has two product rich result types. Product snippets are the classic text enhancement — price, rating stars, availability under a regular blue link — and can appear for any page with Product markup, including review pages that do not sell the item. Merchant listing experiences are the richer shopping-style results (image, price, shipping info) and only apply to pages where the customer can directly buy the product. Merchant listings have stricter requirements: an image and an Offer with price are mandatory, not just recommended.

GTIN, SKU, or MPN — which identifier should I provide?

Provide a GTIN whenever you have one: it is the global identifier (a 12-digit UPC in the US, 13-digit EAN in Europe) that lets Google match your product against its shopping catalog, which improves eligibility and matching accuracy. The SKU is your own internal stock code — useful but not globally unique. MPN is the manufacturer part number, the fallback for products without a GTIN. Best practice: GTIN plus your SKU. This tool validates the GTIN check digit because a mistyped digit makes Google silently discard the field.

Why does my product page show no rich result even though the markup validates?

Valid markup is necessary but not sufficient. The most common causes: the structured-data price disagrees with the visible page price (Google treats this as misleading markup), the image URL is blocked by robots.txt or returns a redirect, the page is a category or search-results page rather than a single product, or the site simply has not earned the trust threshold yet. Check Search Console’s Shopping and Product snippet reports — they list the exact disqualifying issue per URL.

Can I put Product schema on a category or listing page?

Not in the way most people try. Google’s documentation is explicit: Product markup must describe a single product, not a category or list of products. The supported pattern for listing pages is ItemList markup whose items point to the individual product URLs, with full Product markup living on each product page. Putting multiple standalone Product blocks on one category page is a guideline violation and a frequent cause of manual structured-data actions.

Should the price include a currency symbol like $?

No. The price property takes a bare decimal number — 119.99, not $119.99 or 1,199.00. The currency belongs in the separate priceCurrency property as an ISO 4217 code (USD, EUR, GBP). Thousands separators are also invalid: one thousand two hundred dollars is 1200.00. This generator enforces that format because a symbol or comma in the price is among the top parse errors the Rich Results Test reports.

Do I need aggregateRating for stars to show?

For star ratings specifically, yes — Google pulls stars from aggregateRating or individual review markup. But only mark up ratings that real customers submitted and that visitors can see on the page. Inventing a rating, importing stars from a third-party site without showing the reviews, or hard-coding 4.9 across every product are classic spam patterns that can cost you all rich results sitewide. If you have no review system yet, ship the markup without aggregateRating; price and availability snippets still work.

Related tools

Learn more