UtilityToolsLab

© 2026 UtilityToolsLab. Built and maintained by the UtilityToolsLab Team.

Free eBooks·About·Changelog·Privacy Policy·Terms of Service·Report a bug
HomeSchema & Structured DataProduct Schema

Related Tools

LocalBusiness JSON-LDArticle SchemaFAQ SchemaBreadcrumb Schema

Product Schema JSON-LD Generator

Build a schema.org Product JSON-LD block with brand, SKU, price, availability and star ratings. Empty fields are dropped, so the markup stays valid.

You Might Also Like

All Schema & Structured Data

LocalBusiness JSON-LD

Build LocalBusiness JSON-LD with opening hours modelled properly: split shifts, merged day ranges and round-the-clock trading all come out correct.

Article Schema

Build Article, BlogPosting or NewsArticle JSON-LD with author, publisher and date properties. Flags a headline over Google's 110-character limit.

FAQ Schema

Build a schema.org FAQPage JSON-LD block from your own questions and answers, ready to paste into your page. 100% client-side, no uploads.

Breadcrumb Schema

Build a schema.org BreadcrumbList JSON-LD block from an ordered page trail, ready to paste into your page. 100% client-side, no uploads.

A Product block Google will actually use has a fixed shape: name at the top level, price and availability nested inside offers, star ratings inside aggregateRating. Get that nesting wrong and the whole block is discarded, usually without anything appearing in Search Console to tell you. Product Schema JSON-LD Generator assembles the structure from ordinary retail fields, so the shape is never something you type by hand.

Fill in what you have. Only the product name is required, and every empty field is dropped from the output rather than shipped as an empty string. That distinction matters more than it sounds: an offers object carrying no price, or an aggregateRating carrying a score but no review count, invalidates the entire Product block rather than just its own branch.

Nothing is uploaded. The JSON is rebuilt in the page on every keystroke, and what the copy button hands you is the exact text sitting in the preview.

Field Reference: Every Node the Generator Emits

Press Load Sample and the form fills with a real-shaped listing — Copperfield 12-Cup Pour-Over Coffee Kettle, SKU CF-KTL-12C, 48.00 USD, in stock, rated 4.6 across 1284 reviews. Press it again for a different product; the pool cycles through four, one per availability state.

  • name is the only required property. Leave it blank and the preview is replaced by “Add a product name — Google drops a Product block that has no name.”
  • brand ships as a nested Brand entity rather than a bare string, because schema.org expects an object there. sku, description and image are flat properties, and image is emitted as an array so a second URL can be added by hand later.
  • offers appears the moment a valid price is present, carrying priceCurrency from a list of 10, availability as a fully-qualified https://schema.org/InStock style URL, and the product URL and priceValidUntil when those are set.
  • aggregateRating appears only when both a rating value and a review count are present.

One control is easy to miss: the Script tag / Bare JSON switch above the preview. Bare JSON is what a CMS structured-data field wants, because Yoast, Rank Math and most page builders add the script wrapper themselves and reject markup that arrives already wrapped.

Input Format: Prices, Dates and Absolute URLs

Prices are typed bare: digits, and at most two decimal places, with no symbol and no thousands separator. Paste $1,299 and the tool answers “Price must be a plain number like 48.00 — strip any currency symbol, spaces or thousands separators.” Anything that passes is normalised to two decimal places before it reaches the output, so 48.5 and 48 both ship as "48.50". Both URL fields insist on an absolute http:// or https:// address, and the price-valid-until control is a native date picker, so the ISO 8601 date schema.org expects is the only thing it can produce.

What Happens When Only Half the Rating Is Filled In

Rating value and review count are a pair. Enter 4.6 with the review count left empty and the aggregateRating node is left out, with an amber note saying so rather than a silent omission. A score outside the 1 to 5 range is a hard error instead: the tool reports “Rating must fall between 1 and 5 — Google rejects an aggregateRating outside that range.” Review counts have to be whole numbers of 1 or more, so a count of 0 is refused rather than quietly rounded up to 1.

Product

Offer

Aggregate rating

  • Add a product name — Google drops a Product block that has no name.

Paste the Script tag output anywhere in your page’s HTML; switch to Bare JSON when you are pasting into a CMS structured-data field, since most of them wrap the tag for you and reject one that arrives pre-wrapped. Empty fields are dropped from the output rather than emitted blank, so a half-filled form still produces valid markup. Google’s Rich Results Test is the authoritative check once the page is live.