SEO Tools

Product Schema Generator

Use this free Product Schema Generator to create valid Product JSON-LD structured data for ecommerce and product pages. Add price, availability, brand, ratings, and shipping details, then copy markup that makes your page eligible for Google's product rich results. No sign-up required.

Price and Availability Merchant Listing Ready 100% Free

Product Details

Customer Review (optional)

Shipping Details (optional)

Return Policy (optional)

Product Variants (optional)

Uses Google's recommended ProductGroup format for product variants.

Schema Preview

No Schema added yet

Why You Are Here

Product is among the highest-value structured data types available, because the information it surfaces is exactly what someone deciding whether to click is looking for: the price, whether it is in stock, and what other buyers thought of it.

A product result carrying a price, a star rating, and an availability status competes very differently from a plain blue link sitting next to it. On commercial queries where every result is a shop, the ones showing that detail have a visible advantage.

The first situation is an ecommerce store whose platform is not outputting complete structured data, or is outputting it with gaps that keep the pages ineligible.

The second is fixing eligibility. Your product pages are marked up but showing no enhancement, and you need to identify what is missing.

The third is a review site, comparison site, or editorial product page, where the requirements are genuinely different from a shop's, and where using the wrong markup means either missing eligibility or claiming something the page cannot support.

What This Tool Does

The Product Schema Generator builds valid Product JSON-LD from a simple form.

Enter the product name, image, description, brand, price, currency, availability, and any ratings or identifiers, and the tool assembles correctly structured JSON-LD with the Offer object nested properly and the script tag included. Copy it and paste it into your page.

Everything runs in your browser. Nothing is uploaded or stored.

First Decide Which Experience You Are Targeting

This is the most important decision on the page, and most guides skip it entirely. Google treats Product structured data as two separate experiences with different requirements and separate reporting.

  Merchant listing Product Snippet

Page type

Customers can buy the product from you

Product information, but not the purchase point

Typical site

Online shop, direct-to-consumer brand

Review site, comparison site, aggregator, blog

image

REQUIRED

Not required

offers

Required with price and currency

One of offers, review, or aggregateRating

Extra properties

Shipping, returns, apparel sizing, energy ratings

Pros and cons for editorial reviews

Search Console report

Merchant listings

Product snippets

Surfaces unlocked

Shopping Knowledge panel, Popular Products, Google Images, Google Lens

Standard product snippet in results

The rule that catches people

Only pages where a customer can actually complete a purchase from you qualify for merchant listing experiences. A page that lists a product and links out to other retailers selling it does not qualify, regardless of how complete the markup is.
The practical shortcut

If you sell direct, aim for merchant listing requirements. Meeting them generally makes the page eligible for product snippets as well, so you get both from one implementation. Aiming only at product snippet requirements leaves the richer experience out of reach.

Property Reference

Property Merchant listing Product snippet Notes

name

Required

Required

The product title

image

REQUIRED

Recommended

High resolution, multiple aspect ratios

offers

Required

One of three

Contains price and availability

offers.price

Required

Number only, no currency symbol

offers.priceCurrency

Required

ISO 4217 code such as GBP, USD

offers.availability

Recommended

Schema.org URL value

offers.priceValidUntil

Recommended

ISO 8601 date

aggregateRating

Recommended

One of three

Genuine reviews only

review

Recommended

One of three

Individual reviews

brand

Recommended

Recommended

Brand object

description

Recommended

Recommended

Product summary

sku

Recommended

Optional

Your internal identifier

gtin

Recommended

Optional

GTIN, UPC, EAN, or ISBN

mpn

Recommended

Optional

Manufacturer part number

shippingDetails

Recommended

Unlocks shipping info in results

hasMerchantReturnPolicy

Recommended

Unlocks return window in results

shippingDetails and hasMerchantReturnPolicy are worth the effort

They surface delivery cost, delivery time, and the returns window directly in the search result. When a shopper is comparing several near-identical listings, free delivery and a thirty-day returns window shown in the result itself is often what decides the click.
Product identifiers matter more than they look. gtin, mpn, and brand are how Google matches your listing to the same product sold elsewhere, which is what makes comparison surfaces work. A product with no identifiers is harder for Google to place in that context.

Availability Values

availability takes a Schema.org URL rather than a plain word, which is a common source of errors.

Status Value

In stock

https://schema.org/InStock

Out of stock

https://schema.org/OutOfStock

Pre-order

https://schema.org/PreOrder

Back-order

https://schema.org/BackOrder

Discontinued

https://schema.org/Discontinued

Limited availability

https://schema.org/LimitedAvailability

Sold out

https://schema.org/SoldOut

Writing availability as InStock without the full URL is accepted by some validators but is not the specification. Use the full URL form.

Example Output

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Merino Wool Crew Neck Jumper",
  "image": [
    "https://example.com/images/jumper-1x1.jpg",
    "https://example.com/images/jumper-4x3.jpg",
    "https://example.com/images/jumper-16x9.jpg"
  ],
  "description": "A lightweight merino wool jumper, crew neck cut.",
  "sku": "JMP-MER-NVY-M",
  "mpn": "884729103",
  "gtin13": "5012345678900",
  "brand": { "@type": "Brand", "name": "Example Clothing" },
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/products/merino-crew-jumper",
    "price": "89.00",
    "priceCurrency": "GBP",
    "priceValidUntil": "2026-12-31",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition",
    "shippingDetails": {
      "@type": "OfferShippingDetails",
      "shippingRate": {
        "@type": "MonetaryAmount",
        "value": "0",
        "currency": "GBP"
      },
      "shippingDestination": {
        "@type": "DefinedRegion",
        "addressCountry": "GB"
      }
    },
    "hasMerchantReturnPolicy": {
      "@type": "MerchantReturnPolicy",
      "applicableCountry": "GB",
      "returnPolicyCategory":
        "https://schema.org/MerchantReturnFiniteReturnWindow",
      "merchantReturnDays": 30,
      "returnMethod": "https://schema.org/ReturnByMail",
      "returnFees": "https://schema.org/FreeReturn"
    }
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.6",
    "reviewCount": "214"
  }
}

Product Variants

If you sell the same product in several sizes or colours, ProductGroup describes the family and hasVariant links the individual products.

{
  "@context": "https://schema.org",
  "@type": "ProductGroup",
  "name": "Merino Wool Crew Neck Jumper",
  "productGroupID": "JMP-MER",
  "variesBy": [
    "https://schema.org/size",
    "https://schema.org/color"
  ],
  "hasVariant": [
    {
      "@type": "Product",
      "sku": "JMP-MER-NVY-M",
      "color": "Navy",
      "size": "M",
      "offers": {
        "@type": "Offer",
        "price": "89.00",
        "priceCurrency": "GBP",
        "availability": "https://schema.org/InStock"
      }
    }
  ]
}
variesBy names which attributes differ between variants. Use this when variants share a single URL with selectable options. If each variant has its own distinct URL, marking each page as an individual Product is usually simpler.

Reviews — What Is and Is Not Allowed

Star ratings are the most visually valuable part of a product result, and the rules around them are stricter than most people realise.

Allowed

• Genuine customer reviews of the product, displayed on the product page and marked up with review or aggregateRating
• Independent editorial reviews of a product on a review site
• Third-party review platform data, provided the reviews are real and visible on the page
Not allowed

• Reviews about your business or organisation placed on your own site. Google closed this in a 2019 policy update and has reinforced it since
• Ratings not left by actual users, which Google states may result in a manual action
• Marking up a selection of favourable reviews while the page displays more
The distinction is between PRODUCT reviews and SELF reviews

Customers rating a jumper you sell is legitimate. Your site displaying its own five-star rating for itself is not. Embedding a review widget about your own brand on your own pages will not produce stars.

Common Mistakes to Avoid

Putting the Currency Symbol in the Price

A price written with a currency symbol is invalid. The price property takes a number only, and the currency belongs in priceCurrency as an ISO 4217 code. Thousand separators cause the same problem, so 1,299.00 should be written 1299.00. This is the single most common Product markup error and it makes the offer unparseable rather than merely imperfect.
Claiming Merchant Listing Eligibility on a Page That Cannot Take a Purchase

Merchant listing experiences require that a customer can actually buy the product from you on that page. An affiliate page, comparison table, or review that links out to other retailers does not qualify, however complete its markup. Marking such a page as though it does misrepresents it, and the eligibility will not follow. Use product snippet markup for those pages instead, where review-specific properties are available.
Letting priceValidUntil Expire

priceValidUntil tells Google how long the price holds. Once that date passes, Google may treat the price as stale and stop displaying it, which quietly removes the most valuable element of the result. If you set the property, it needs to be maintained. If your prices change unpredictably, either automate the date or leave the property out rather than letting it go out of date.

Quick Reference

Item Detail

Type

Product

Rich result

Fully supported

Two experiences

Merchant listing, product snippet

Merchant listing

Buyable pages only

Product snippet

Review and comparison pages

image

Required for merchant listings

Price

Number only, no symbol

Currency

ISO 4217 in priceCurrency

Availability

Full Schema.org URL

Variants

ProductGroup with hasVariant

Shipping and returns

Surface in results

Self-reviews about your business

Not eligible

Merchant Center account

Not required

Frequently Asked Questions

What is a product schema generator?

A product schema generator is a free online tool that turns your product details into valid Product JSON-LD structured data. You enter the name, image, price, availability, brand, and ratings, and this Product Schema Generator produces correctly structured Schema.org markup that makes your page eligible for Google's product rich results.

What is the difference between a merchant listing and a product snippet?

Merchant listings are for pages where a customer can buy the product directly from you, and they unlock shipping details, return policies, and shopping surfaces such as Popular Products and Google Lens. Product snippets are for pages with product information that are not the purchase point, such as review and comparison sites, and they offer more options for editorial review content including pros and cons.

Which properties are required for Product schema?

It depends which experience you are targeting. Merchant listings require name, image, and offers including a price and currency. Product snippets require name plus at least one of offers, review, or aggregateRating, and do not require an image. If you sell direct, meeting the merchant listing requirements generally makes the page eligible for both.

How should I format the price?

As a plain number with no currency symbol and no thousand separators, with the currency given separately in priceCurrency as an ISO 4217 code. A price of eighty-nine pounds is price 89.00 with priceCurrency GBP. Including the symbol in the price field is the most common Product markup error and makes the offer unparseable.

Can I add star ratings to my product schema?

Yes, provided they come from genuine reviews of the product that are visible on the page. What is not permitted is a rating about your business or organisation displayed on your own site, which Google's review snippet policy excludes. Ratings not left by actual users may also result in a manual action, so invented ratings carry real risk.

How do I mark up product variants?

Use ProductGroup with a hasVariant array containing each individual Product, and variesBy to name which attributes differ, such as size or colour. This suits products where variants share a single URL with selectable options. If each variant has its own separate URL, marking each page as an individual Product is usually simpler.

Do shipping and return details actually appear in search results?

Yes. Adding shippingDetails and hasMerchantReturnPolicy can surface delivery cost, delivery time, and the returns window directly in the result. When a shopper is comparing several similar listings, free delivery and a clear returns window shown in the result itself frequently decides which one gets the click.

Do I need a Google Merchant Center account?

No. Merchant listing eligibility can be earned from structured data on your web pages alone, without a Merchant Center account. That said, providing both structured data and a Merchant Center feed maximises eligibility, because some experiences combine the two and Google can cross-check the information. Markup from this Product Schema Generator covers the structured data side.

Comments

Login to leave a comment

No comments yet. Be the first to comment!