Product schema · Online stores

Product schema: Mark up the product facts that are actually true.

The product page says “in stock”, while its data block still says “out of stock”. Contradictions like this make catalog data unreliable. Start by reconciling the visible page, actual offer and generated markup rather than copying the longest JSON-LD example you can find.

By Nalqerio · Created with AI assistancePublished on 11 October 20266 min read

What you will take away

Describe the specific product with Product and the real offer with Offer. Price, currency, availability and variant must match the visible page. Test syntax separately from Google requirements; valid markup does not guarantee rich results or recommendations in AI search.

Product schema, product snippets and merchant listings

Product is a Schema.org type describing a specific product. Offer describes an associated offer, including details such as price and availability. Markup supplements the readable page; it does not replace a product description or your checkout.

Google distinguishes product snippets from merchant listings, with different requirements. Choose the relevant documentation for the page: can someone buy the product there, or is it an editorial review? The Google product documentation explains the available paths.

This article focuses on individual store product pages. Company identity belongs in the broader Organization or LocalBusiness markup guide. A category showing twenty offers is a different implementation problem from a detail page for one workshop box.

A fictional Product schema JSON-LD example

Imagine a store selling an empty metal workshop box for €39.90. Its product page displays the name, image, description, SKU, price and availability. The following is a learning example; shop.example is not an actual store. Adapt the product text to the language and facts of your real page.

{
  "@context": "https://schema.org",
  "@type": "Product",
  "@id": "https://shop.example/produkte/werkstattbox#product",
  "name": "Workshop box S",
  "description": "Empty metal box with a removable divider.",
  "image": "https://shop.example/bilder/werkstattbox-s.jpg",
  "sku": "WB-S-01",
  "brand": {
    "@type": "Brand",
    "name": "BeispielWerk"
  },
  "offers": {
    "@type": "Offer",
    "url": "https://shop.example/produkte/werkstattbox",
    "price": "39.90",
    "priceCurrency": "EUR",
    "availability": "https://schema.org/InStock"
  }
}

In a real implementation, the adapted JSON goes inside a script element with type application/ld+json. Replace every example URL, identifier and price. The image must show the described product and be accessible at the specified address.

There are deliberately no star ratings in this example. Never manufacture reviews to clear a warning. It also does not implement every possible shipping, return or variant requirement. Add only accurate information relevant to the intended search feature and actual offer.

Visible product facts, Product and Offer, validator and published page
Original schematic workflow. The code example describes a fictional product. Explore this in the product tour: Website audit

Reconcile price, currency and availability

Treat markup as a second representation of the same product page. Where possible, use the same underlying product data for the visible price and JSON-LD. A manually maintained block can become outdated at the next price change. Numeric decimals use a point, while currency is provided separately, such as EUR.

Check the fictional offer
Visible factMatching dataCommon discrepancy
€39.90offers.price = 39.90, priceCurrency = EURAn old sale price remains in markup
In stockoffers.availability = https://schema.org/InStockThe page and code disagree
Workshop box Sname and skuThe block describes the larger variant
Image of an empty boximageIncluded accessories are misrepresented

Do not assume that “can be ordered” always means “in stock”. Choose the status that reflects back orders or pre-orders when relevant. A syntactically valid value can still be factually wrong. For broader website checks, continue with the GEO audit workflow.

Shopify, WooCommerce and product variants

Inspect the markup your store already publishes. A theme, SEO extension and product application may each generate blocks. Do not add another Product object before identifying the component that owns current price and stock data. Installing a plugin does not replace this investigation.

Next, select a variant such as the larger box. Do the URL, image, SKU and price change consistently? Record what an initial page request shows before a visitor makes a selection. Google's product variant documentation covers approaches including ProductGroup; a single-product example is not a complete variant-catalog implementation.

For multilingual stores, the description should fit the page language and selected product. Check that separate language pages do not accidentally publish an unrelated default variant. Link category content to the appropriate detail page instead of making near-identical articles for every word order of a product keyword.

Test Product schema in two different ways

The Schema.org validator helps check syntax and vocabulary. The Google Rich Results Test checks supported Google features. Passing a test is not a promise that a rich result will appear.

After implementation, test the published URL rather than only your prepared code. Separate errors from warnings. Google's product snippet instructions explain required properties. Then inspect the visible page again: is the price correct, and does the product link work?

A meaningful maintenance test is a planned stock change in your own test environment. Observe whether the visible status and JSON-LD update together. That checks the data pipeline, rather than producing a one-time green result for a product that later becomes outdated.

From consistent data to useful customer questions

Before publishing a product page

Checks last only for this page visit. They are not an SEO score.

0 / 5 steps checked

Product schema is not a ChatGPT product feed. The ChatGPT shopping guide for merchants explains that separate data path. A valid Product block alone does not guarantee acceptance or placement there.

Nalqerio does not generate store markup. It documents API answers to questions about your brand and offers. The website audit tour and methodology show the actual scope. The free trial provides a limited baseline; measure real orders in your store's own system as well.

Frequently asked questions

Is Product schema enough for Google Shopping?

Not automatically. Google describes different product experiences and additional paths such as Merchant Center. Check the requirements for your specific case; markup alone does not promise display.

Can I add invented reviews to pass the test?

No. Only mark up accurate, policy-compliant content. A warning does not justify fabricated reviews or stock information.

Is Product schema a ChatGPT shopping feed?

No. Website JSON-LD and a product feed sent to a provider are separate data paths. They should nevertheless describe the same current product facts.

Sources and further reading

Methods, product scope and sources reflect the publication date shown. Examples are not measurements of your website. Linked product pages provide current plan and provider details.

Your next step

Investigate the questions that matter to your brand.

Put the guide into practice with your own business. Review answers and sources for your customer questions, organised in one project.

1 project3 customer questions1 AI snapshot
Start with a free, no-obligation trial Start your free 14-day trial €0 · no credit card · ends automaticallyCompare plans and allowances