Schema Forge

Schema guide

Product schema markup (Product JSON-LD)

How to write Product JSON-LD: name, image, offers, brand and ratings, with a working example and the mistakes that stop products qualifying.

Overview

Short answer

Product markup describes one product (name, image, price, availability and brand) so search engines can show price and stock details. Use it only on a page about a single product, with values that match what the page shows. An offers object needs a price and a priceCurrency.

What it can do for you

Google Rich results: yes
Yes. Price, availability and ratings can appear in results when the page shows an image, a price and a currency.
AI and answer engines
Price, stock and brand are read as stated facts instead of being pulled out of the page text.

Use it when

  • A product detail page where visitors can see the product, its price and how to buy it

Skip it when

  • A category or listing page with many products
  • A page that only reviews or compares products (use Review)

Properties

PropertyStatusNotes
nameRequiredThe product name as shown on the page.
imageStrongly recommendedAbsolute URLs that search engines can crawl. Several angles help.
offersRequired for priceAn Offer with price, priceCurrency, availability and url.
brand, skuRecommendedUse gtin or mpn as well if you have them.
aggregateRating, reviewOptionalOnly with real, visible customer ratings.

Example

product.jsonld (example)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Stoneware Mug, 350 ml",
  "image": [
    "https://example.com/img/mug.jpg"
  ],
  "description": "Hand-glazed stoneware mug, dishwasher safe.",
  "sku": "MUG-350-GRN",
  "brand": {
    "@type": "Brand",
    "name": "Hearthstead"
  },
  "offers": {
    "@type": "Offer",
    "price": "24.00",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock",
    "url": "https://example.com/mug"
  }
}
</script>

It reads the product name from the main heading, the image from og:image, and the price, currency, availability, SKU and brand from product meta tags or microdata.

Anything it cannot find is left out and listed under "Check before you publish", with a field to fill it in. It will not invent a price or a rating.

Common mistakes

  • A price in the markup that differs from the price on the page.
  • Leaving out priceCurrency, or writing the symbol instead of the ISO code such as USD.
  • Relative image paths such as /img/mug.jpg. Use full URLs.
  • Adding ratings that are not shown to visitors.
  • Putting Product markup on every tile of a listing page.

Questions

Which properties does Product markup require?

Google needs a name plus either an offers object, a review or an aggregateRating for product snippets. For merchant listings it also needs an image and an offer with price and priceCurrency.

Can I mark up a category page?

No. Product markup is for a page about one product. A category or listing page should not carry a Product block for each item.

Should I add ratings to get stars?

Only if real ratings from real customers are visible on the page. Invented or copied ratings can lead to a manual action.

Why does Schema Forge leave out the price sometimes?

It only uses a price the page states explicitly, in a product:price:amount meta tag or an itemprop="price" element. It never guesses a price from body text, so a missing offer is listed as a task for you.

Generate this markup for your page

Paste the address of a public page and get a ready-to-paste block, with every gap listed.

Open the generator

Keep going