Free product schema generator
- No signup
- Free
- Results in ~5 seconds
Missing required fields
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product"
}
</script>In Rank Math or Yoast, open the schema or custom code box and paste this. Or use WPCode to add a header snippet on that page only.
Want schema across the whole site, with an @graph and entity links? That is part of my technical SEO service.
Product schema describes the item for sale: the name, the images, and the offer. I use it when the page is a product page and the facts match what a buyer sees. I do not use it on a category grid.
Merchant listings and product snippets
Google has used product markup for product snippets in search and for merchant listing experiences. The eligibility rules change, and a valid script does not promise either placement. What you can control is accuracy. The name, image, price, currency, and availability should be the ones on the page at the time someone loads it.
If the price changes often, generate the JSON from the same data that renders the price. A hand-written script will go stale. The generator is the right tool for a first version, a custom store, or a page that has no theme output yet. It is the wrong tool if you paste it on top of a theme that already writes Product on every save.
Offer, shipping and returns
An Offer needs a price and a currency. Availability should be one of the schema values that match the button on the page, such as InStock or OutOfStock. Do not mark a waitlist as InStock.
Shipping and returns belong in the markup when you publish those policies and the numbers are real. A MerchantReturnPolicy that says 30 days while the footer says 14 days is a mismatch. Leave the field empty until the policy page and the schema agree.
AggregateRating belongs only when the reviews are visible on that product URL and they are not reviews you wrote about yourself. If the page has no reviews, omit the rating. Stars you are not eligible for are not a shortcut.
Shopify themes often output Product schema already
Most current Shopify themes print Product JSON-LD. Before you add this script, view source and search for "Product". If it is there, compare it with the page. Fix the theme or the app that writes it. Adding a second Product block creates two offers.
Use this generator when the theme output is missing a field you can see on the page, or when the store is not on Shopify. Copy one script, test the live URL, and stop. More markup is not more eligibility.
What I include, and what I leave out
Include the name the buyer sees, the image on the page, the price they will pay, the currency, and whether they can buy it today. Those fields are enough for a clean first script. Add sku or gtin only when you actually have one. A made-up identifier is worse than a missing one.
Variants need care. If the page lets someone choose a size and the price changes, the offer in the schema should not be stuck on the first size forever. Platforms that render the product in JavaScript still need the offer in the HTML, or a crawler that does not run the script will miss the price.
Shipping and return fields are optional until they are true. If free delivery only applies over a threshold, say that, or leave the shipping block off. A flat "free shipping" in the JSON while the basket adds a charge is the sort of mismatch that makes the markup untrustworthy.
I check the live product after the theme updates. Shopify and other themes change their built-in Product output between versions. A script you pasted in January can collide with a theme that started printing its own Product in June. Search the HTML for the type. One block is the goal.
Category pages, search results, and blog posts are not products. Do not point this generator at them. If the URL is a collection, use the collection's own title and description, and keep Product on the product URLs only.
When the theme already prints Product, use this page as a checklist against that output. Missing currency and a stale availability value are the two I fix most often. Paste a second script only when the theme output is absent. Then recheck after the next theme update, because themes add this markup on their own schedule.
Images in the schema should be images of the product, at a URL that returns the file. A logo in the product image field is a common shortcut and a poor one. Use the same image the gallery shows first, with an absolute URL.
If you sell in more than one currency, the offer should match the currency the page is showing to that visitor. A single USD price on a page that displays pounds will fail the "does this match" test even when both numbers are real. One page, one currency, unless the page itself shows both. Leave the rating off until the reviews are visible on that same URL.
