TapCub is live — analytics, insights and live chat, free on one platform

Schema type · Product Product schema generator

Build Product markup with an Offer and an optional AggregateRating. The checks cover both Google features: product snippets (price and stars under a normal result) and merchant listings (shopping-style results with price, stock and shipping).

  • Required and recommended checks
  • Rich-result status as of 2026
  • Runs locally
Generator

Generate Product JSON-LD

Copy the name, price and stock state from the product page. Prices typed with a currency symbol are cleaned to a plain number.

One per line.

Your own stock code.

8, 12, 13 or 14 digits from the barcode. Leave empty if the product has none.

Number only, dot for decimals: 59.00. Symbols are removed automatically.

ISO 4217: USD, EUR, GBP…

YYYY-MM-DD. Leave empty if the price has no end date.

Only if real customer reviews are shown on the page.

No errors or warnings. Check the values against the page once more, then test the live URL.
JSON-LD
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Linen Shirt – Navy",
  "image": [
    "https://example.com/images/linen-navy-1x1.jpg",
    "https://example.com/images/linen-navy-4x3.jpg"
  ],
  "description": "Relaxed-fit shirt in 100% European linen with mother-of-pearl buttons.",
  "sku": "LN-NAVY-M",
  "brand": {
    "@type": "Brand",
    "name": "Northline"
  },
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/shirts/linen-navy",
    "price": 59,
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": 4.6,
    "reviewCount": 128
  }
}
</script>

Paste it into the page’s <head> or <body>. The values must match what visitors can see on that page.

Checks

Errors break eligibility; warnings are recommended properties or likely mistakes.

  • OKProduct: all required properties are present, so it can qualify for a Google rich result. Google still decides whether to show one.
Runs entirely in your browser. Nothing you type here is uploaded or stored by TapCub.

Version v1.0Updated Update history

Read the result

What the generator gives you

A code block, a list of checks and three links. Each answers a different question.

The JSON-LD block

A <script type="application/ld+json"> tag with one object. It can go anywhere in the HTML; the head is the usual place. If your CMS already outputs schema for the same thing (many SEO plugins do), replace theirs rather than adding a second, conflicting copy.

Errors

A required property is missing or a value has the wrong format: a date like 11/09/2026, a price written as $59, a currency written as usd. Google ignores an item with errors for rich results, though the page itself still ranks normally.

Warnings

Recommended properties you left out, or things that are valid but risky, such as a relative image URL or a time without a time zone. Add a recommended property only when the information really appears on the page.

Eligible is not the same as shown

“All required properties present” means the item can qualify. Google still decides per query whether to show a rich result, and some types (FAQ, HowTo) are no longer shown at all. The tool says so on those types instead of pretending.

The checks follow schema.org and Google Search Central’s structured data pages as of November 2026. Google’s own Rich Results Test is the final word on eligibility; test the live URL after publishing.

How to use it

Four steps from form to rich result

Most of the work is copying facts that are already on the page.

  1. 1

    Choose the type

    Match the main content of the page: a product page gets Product, a blog post Article, the home or about page Organization. One page can carry several types, each in its own block.

  2. 2

    Fill in the visible facts

    Copy names, prices, dates and ratings exactly as visitors see them. Markup that describes content not on the page breaks Google’s guidelines.

  3. 3

    Clear the errors

    Work down the checks list until there are no errors. Warnings are optional but usually worth fixing.

  4. 4

    Publish and test

    Paste the block into the page template, deploy, then run the live URL through the Rich Results Test and watch the Enhancements reports in Search Console.

Rules

Product snippets versus merchant listings

Google documents two product features with different requirements. A page can qualify for both.

  • Merchant listings need price above zero and an image
  • Shipping and return policies are usually declared once on Organization
  • An expired priceValidUntil can stop the price from showing
  • Only mark up reviews that are visible on the page and not incentivised without disclosure
Required properties for Google’s two product features
PropertyProduct snippetsMerchant listings
nameRequiredRequired
imageRecommendedRequired
offers / review / aggregateRatingAt least oneoffers required (Offer, not AggregateOffer)
offers.priceRequired in an OfferRequired, greater than 0
offers.priceCurrencyRecommendedRequired
availability, brand, gtin, skuRecommendedRecommended
Worked example

A shirt with price, stock and reviews

The default form values: one variant of a shirt at $59, in stock, with 128 visible reviews.

Example Product values and how they are written
FieldOn the pageIn JSON-LD
Price$59.00"price": 59, "priceCurrency": "USD"
StockIn stock"availability": "https://schema.org/InStock"
ConditionNew"itemCondition": "https://schema.org/NewCondition"
Rating★ 4.6 (128 reviews)"ratingValue": 4.6, "reviewCount": 128

The page has no GTIN, so the field is left empty. Do not invent barcodes; mpn or sku is fine for products without one.

Common mistakes

Why valid-looking markup gets ignored

Most structured data that never produces a rich result fails for one of these reasons.

Marking up what visitors cannot see

Ratings with no reviews on the page, FAQs that only exist in the code, or prices that differ from the page. Google treats this as spam and can apply a manual action.

Local date and price formats

09/11/2026, 1.299,00 € and ¥199 are normal on a page and wrong in JSON-LD. Use ISO dates and plain numbers.

Two plugins, two copies

A theme and an SEO plugin both output Product or Organization with different values. Keep one source of truth.

Chasing retired rich results

FAQ and HowTo markup no longer produce rich results in Google. Adding them to every page is wasted effort.

FAQ

Schema markup generator questions

Still have a question?

Chat with the team behind TapCub — we usually reply within a few hours on business days.

Why are my product stars not showing?

Common reasons: the reviews are not visible on the page, the rating is about your own business rather than the product, a required property is missing, or Google simply chose not to show them for that query. Self-serving reviews of a LocalBusiness or Organization never get stars.

Should price be a number or a string?

Either is accepted, but it must contain only digits and a dot for decimals: 59 or "59.00". Symbols, thousands separators and decimal commas are errors. The currency goes in priceCurrency.

What about products with variants?

For a page that lists several sizes or colours, Google supports ProductGroup with hasVariant. This form makes one Product with one Offer, which fits a page per variant.

Changelog

Update history

New features, fixes and data refreshes for this tool, newest first.

  1. · v1.0

    LaunchedFirst release.

Missing something or found an error? Tell us — requests that come up often go into the next update. All tool updates

See your data clearly. Find your growth.

Every click, backed by data. Install one line of code and see your first numbers in a minute.

No credit card · Free plans for analytics and chat · Cookieless analytics