Schema creator

Pick a type, fill in what the page shows, and get JSON-LD to paste into it. Empty fields are left out, never made up.

No FAQ or HowTo: Google no longer shows either as a rich result.

Product

One thing a shop sells on the page: its name, images and the offer with its price, shipping and returns.

Google may show it in merchant listings and shopping results, with its price and stock. Google decides whether to show it.

Required and recommended as Google marks them in Merchant listing structured data, last updated September 8, 2026.

  1. NamenameRequiredThe product’s name, as the page shows it.
  2. ImagesimageRequiredIts images, one address a line. Google recommends several.
  3. DescriptiondescriptionRecommendedThe description the page shows.
  4. BrandbrandRecommendedOne brand name.
  5. GTINgtinRecommendedThe number under its barcode, 8, 12, 13 or 14 digits.
  6. SKUskuRecommendedThe shop’s own id for it, when it has no GTIN.
  7. PricepriceRequiredThe price the page shows, above zero, as a plain number.
  8. CurrencypriceCurrencyRequiredIts three-letter currency code.
  9. AvailabilityavailabilityRecommendedWhether it is in stock.
  10. ConditionitemConditionRecommendedNew, refurbished or used.
  11. Price endspriceValidUntilIf it appliesOnly when the price ends on a date, such as a sale.
  12. ShippingshippingDetailsRecommendedWhat shipping costs, in the price’s currency, where it ships and how many days it takes. Or set it in Merchant Center.
  13. ReturnshasMerchantReturnPolicyRecommendedThe shop’s returns: the country they cover, their kind, and the days for a set window. Or set them in Merchant Center.
Where the JSON-LD goesExample

index.html

<head>
  <title>Trail shoe · Acme</title>
  <script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@graph": [
      { "@type": "Product", "name": "Trail shoe",
        "offers": { "@type": "Offer", "price": "120.00",
          "priceCurrency": "USD" } },
      { "@type": "BreadcrumbList", "itemListElement": [
        { "@type": "ListItem", "position": 1,
          "name": "Shoes", "item": "https://example.com/shoes" } ] }
    ]
  }
  </script>
</head>

One block in the head holds the product and its place in the site together, in one @graph. Every value is on the page as well.

What does it check?

Rules from the rulebook, and how many of the sites mttr has read miss each.

  1. Add structured dataAdd valid JSON-LD that says what the page is.
    61%of sites miss it
  2. Match structured data to the pageUse the schema type that matches the page: Article for guides, Service or Product for offers, Organization or WebSite for the home page.
    50%of sites miss it

Questions

Where does the JSON-LD go?

Inside a script tag of type application/ld+json, in the page’s head or anywhere in its body.

Can a page have more than one block?

Yes. A product page can carry its Product, its BreadcrumbList and its Organization, each in its own block or together in one @graph.

Should the markup say things the page does not?

No. Everything in the structured data should be on the page for a person to read. Google treats markup that says more as spam.