ZeroUtil

Product Schema Generator (JSON-LD)

Generate Product JSON-LD schema with Offer, price, currency and AggregateRating for merchant listings.

Maintained by

Product Schema Generator (JSON-LD)

This Product schema generator builds JSON-LD for e-commerce product pages, merchant listings, and comparison pages. The output includes Product with nested Offer, brand, image, and - if you supply it - aggregateRating. Paste the generated <script type="application/ld+json"> block into <head>, validate, and Google becomes eligible to show price snippets, review stars, and free merchant listings in the SERP.

Product + Offer + AggregateRating: The Standard Trio

Almost every product-related rich-result feature Google supports leans on three coupled objects:

  • Product - the outer entity. Must include name; should include image, description, sku, and brand.
  • offers - a nested Offer (single product) or AggregateOffer (multiple merchants/variants). Required for price-related rich results. Must include price and priceCurrency together; omitting either makes Google drop the Offer entirely.
  • aggregateRating - an AggregateRating with ratingValue, reviewCount, bestRating. Drives star snippets. The generator emits this inline when you supply the fields.

Merchant Listings vs. Rich Snippets

Google splits product structured data into two adjacent features:

  • Product snippets (stars, price, availability) appear on regular blue-link results and are the default rich-result treatment.
  • Merchant listing experiences (shopping ads, free product listings in Search/Images) require additional fields: shippingDetails, hasMerchantReturnPolicy, and one of gtin/mpn/isbn. Without those, your product will not appear in free merchant listings even with perfect Offer markup.

The generator covers the snippet case out of the box. For full merchant listing eligibility, hand-edit the output to add shippingDetails and hasMerchantReturnPolicy, or supply them via Merchant Center instead of on-page schema.

Required Fields and Common Pitfalls

  • Price and priceCurrency are coupled - "price": "19.99" without "priceCurrency": "USD" is invalid. Google silently drops the Offer rather than showing an invalid snippet.
  • Availability URIs use the schema.org namespace - "availability": "https://schema.org/InStock", not "InStock". The generator emits the full URI for you.
  • AggregateRating needs real reviews behind it - Google's structured data policy explicitly forbids fabricated ratings. If you emit ratingValue: 5 with reviewCount: 1 from an internal test review, you can trigger a manual action.
  • Image URLs must be absolute and HTTPS - at least 800x800 for shopping listings. Low-resolution product thumbnails are rejected.
  • Price drift - if the JSON-LD says 19.99 and the visible price is 29.99, Google treats it as structured data mismatch and either drops the feature or issues a manual action.

Difference From the Generic Generator

The generic Schema Markup Generator supports all eight types we cover via a picker. This Product-focused page lands with Product pre-selected and adds product-specific guidance (Offer mechanics, merchant listings, aggregate rating policy) that would clutter the generic page. For Article, FAQPage, or Organization schema, switch type or jump to the dedicated sub-page.

Validating Before You Ship

Use Google's Rich Results Test for rich-result eligibility (what triggers in the SERP) and the Schema.org validator for schema correctness. Product schema validation is stricter than most - an invalid Offer drops the whole block. Fix warnings plus errors before shipping.

Frequently Asked Questions

Does Product schema directly boost rankings?

No. Structured data is not a direct ranking signal. What Product schema does is unlock SERP features - star snippets, price tags, free merchant listings - that substantially raise click-through rate. Higher CTR on the same position is the indirect benefit. If your product page is currently at position 6 without schema and gets 2% CTR, adding valid Product + Offer + AggregateRating can push it to 3-4% CTR at the same position, which often correlates with a position improvement over weeks.

What counts as valid price data?

Price must be a decimal number encoded as a string or number, without currency symbols or thousands separators. <code>"19.99"</code> is valid, <code>"$19.99"</code> is not, <code>19,99</code> is not. priceCurrency must be an ISO 4217 code in quotes: <code>"USD"</code>, <code>"EUR"</code>, <code>"GBP"</code>. priceValidUntil is optional but recommended for sale prices - Google omits the price tag in snippets after that date.

Can I use AggregateOffer instead of Offer?

Yes, if your page lists multiple merchants, sizes, or colours of the same product with different prices. AggregateOffer needs <code>lowPrice</code>, <code>highPrice</code>, <code>priceCurrency</code>, and <code>offerCount</code>. Google will show a "from $19" style range snippet. For a single SKU at a single price, Offer is simpler and more common. The generator produces Offer; add an AggregateOffer manually if needed.

How do I qualify for free merchant listings in Google Search?

Emit valid Product + Offer on the page AND connect a Merchant Center account AND opt into the "surfaces across Google" program. On-page structured data alone is not sufficient for free merchant listings - the listings come from your Merchant Center feed and the schema just corroborates it. For independent e-commerce without Merchant Center, you still get product snippets (stars, price), just not the standalone shopping listings.

Where should reviews live - on the Product or separately?

Both patterns are valid. The review-count snippet comes from <code>aggregateRating</code> nested inside Product; individual Review objects can also be nested (<code>"review": [...]</code>) for richer attribution. If your CMS stores reviews on a separate page, point to them via <code>@id</code>. Do not fabricate reviews to trigger stars - Google's review policies require reviews to be from real customers, accessible on the page, and not incentivised by the seller.

What about variants - size, colour, material?

Use <code>ProductGroup</code> with an array of <code>hasVariant</code> child Products, each with its own <code>offers</code>, <code>color</code>, <code>size</code>, and <code>sku</code>. This is newer schema (added in 2022) and fully supported by Google for apparel. The generator produces a flat Product by default; for ProductGroup structure, hand-edit the output. For pages with a size selector and per-size price, variants are the right modelling choice.

Why do my star ratings not appear in search?

Most often: (1) Google is still re-crawling the page - give it 24-72 hours after deployment; (2) the AggregateRating fields are technically valid but below Google's threshold (needs at least one review visible on the page); (3) the Product itself is not eligible (digital gift cards, services, accommodations, and software applications have different rules); (4) a manual action has been triggered by prior policy violations. Start with Search Console's URL Inspection to confirm Google parsed the structured data correctly.

Does this tool send my product data anywhere?

No. The generator builds the JSON-LD block entirely in your browser with pure JavaScript. Your product name, price, description, and review data live only in the browser tab and are discarded when you close it. There is no telemetry, no analytics beacon per input keystroke, and no remote API. You can verify this in the Network tab of DevTools - zero outbound requests during generation.

More SEO & Web Tools