What the Product Schema Generator does
This tool builds valid Product structured data in JSON-LD format for e-commerce pages, single product listings, and product detail templates. You enter the product name, description, image, brand, price, currency, availability, and review data, and the generator outputs a spec-compliant script block ready to paste into the head of the page. Product markup is what lets a search listing show price, star rating, review count, and stock status directly under the title, turning a plain blue link into a result that looks like a storefront. Those extra details are the difference between a listing a shopper scrolls past and one they click.
The heart of Product schema is the relationship between the Product itself and two nested objects: Offer, which carries the commercial details like price and availability, and either Review or AggregateRating, which carries the rating data. The generator handles this nesting for you so you do not have to remember that price never lives directly on the Product but always inside an Offer. Getting that structure right is the single most common thing people get wrong by hand, and it is the reason so many manually written Product blocks validate but never produce a rich result.
Required and recommended properties for Product
For Google to consider a Product for the product rich result, the markup needs a name, an image, and at least one of three offer-related details: a valid Offer, a Review, or an AggregateRating. The Offer object should carry price as a plain number, priceCurrency as a three-letter ISO code like USD or EUR, and availability set to a schema.org value such as InStock, OutOfStock, or PreOrder. A priceValidUntil date is recommended for sale prices so Google knows when an advertised price expires. Without a properly formed Offer, the listing simply will not show pricing, no matter how complete the rest of the markup is.
Beyond the basics, Google strongly recommends brand, a global identifier such as gtin, mpn, or isbn, and a review block. The brand should be a Brand object with a name. The global identifier matters enormously for shopping surfaces, because Google uses gtin and mpn to match your product to the same item sold elsewhere and to its product knowledge graph; products with valid identifiers are far more likely to appear in shopping experiences. AggregateRating needs a ratingValue, a bestRating, and either a reviewCount or a ratingCount. A single Review needs an author, a reviewRating, and the body of the review. The generator flags these as recommended so you can see at a glance what you are leaving on the table.
A handful of newer recommended properties have grown in importance as shopping surfaces matured. A shippingDetails object that describes shipping cost and delivery time, and a hasMerchantReturnPolicy object that describes the return window and conditions, both help your listing qualify for richer shopping treatments and reduce the friction a buyer feels before clicking. The condition of the item, expressed as a value like NewCondition or UsedCondition, and a clear description that genuinely describes the product rather than repeating the title, both strengthen the data. None of these are strictly required for a basic product snippet, but together they separate a thin, bare-minimum Product block from a complete one that competes for every available shopping surface.
How Product schema earns rich results
Valid Product markup makes a page eligible for product snippets in regular search, which display the rating stars, review count, price, and availability under the listing. It is also the foundation for the free product listings and shopping experiences Google offers, where products with complete data, valid identifiers, and accurate availability win placement. The visual lift from star ratings alone is one of the most reliable click-through improvements in SEO, because a row of stars draws the eye in a way plain text cannot. That is precisely why Google polices review markup so strictly.
In AI search and shopping assistants, structured product data is becoming the primary way a model understands what you sell, what it costs, and whether it is in stock right now. When a shopper asks an AI assistant to compare products or find the best price, the engine leans on Offer data, identifiers, and ratings rather than parsing your page layout. A product with clean, current Product markup is far more likely to be surfaced, compared, and recommended than one where the price and availability are locked inside JavaScript or images. Keeping the markup accurate and the availability current is now a competitive necessity, not a nice-to-have.
How to read the generated output
The output is a single script block with an at-type of Product. Inside it you will find name, image, description, and brand at the top level, then an offers object holding the Offer with its price, priceCurrency, and availability, and an aggregateRating or review object holding the rating data. Read it carefully and confirm the price in the JSON is the exact price a shopper sees on the page at the moment, including any sale price. The availability value should reflect true stock status. The rating numbers must come from real reviews that actually exist on the page, not invented figures.
Pay attention to the availability and price fields above all others, because these are dynamic and go stale fast. A static schema block that hardcodes InStock will keep claiming a sold-out product is available, which Google treats as a serious data-quality problem. The right way to ship Product markup is to populate price and availability from the same data source that renders the visible page, so the two can never drift apart. Use this generator to learn the correct shape, then wire your template to fill those fields dynamically rather than pasting frozen values.
Common Product schema mistakes
The most damaging mistake is review markup that does not correspond to reviews visible on the page. Google has a strict policy that ratings in structured data must come from genuine, first-party reviews shown on the same page, and self-serving ratings the business assigns to its own products are not allowed. Faking or inflating ratings can trigger a manual action that strips rich results from the entire site, so this is the one rule never to bend. The second common mistake is putting price directly on the Product instead of inside an Offer, which leaves the listing with no price at all.
Other frequent errors include using a currency symbol or commas inside the price field instead of a plain decimal number, omitting priceCurrency so the price has no meaning, using a free-text availability value instead of the exact schema.org URL token, and forgetting the gtin or mpn that unlocks shopping placement. Mismatched sale prices are also common: the page shows a discounted price while the schema still carries the original. Each of these either suppresses the rich result or, in the review case, risks a penalty. The generator's required and recommended flags exist to catch these before you publish.
Product versus the schema types it is confused with
Product is sometimes confused with Offer, Service, and ProductGroup. Offer is not a replacement for Product; it is the child object that lives inside a Product to hold the commercial terms. Service is for intangible offerings like consulting or repair work and uses a different markup path, so a physical good should never be marked as a Service. ProductGroup is the right type when you sell one product in many variants, such as a shirt in several sizes and colors; it lets you describe the shared attributes once and link the individual variant Products, which is cleaner than publishing dozens of near-identical Product blocks.
On a typical product detail page, Product markup pairs well with BreadcrumbList for the category path and an Organization block for the store identity. Keep each type in its own script tag rather than nesting unrelated entities. If you run a marketplace or list multiple products on a category page, do not stack many full Product blocks hoping for a carousel; use the appropriate list markup for that surface and reserve full Product markup for the page that genuinely represents a single buyable item.
What to do after you generate it
Paste the block into the head of the product template and confirm your platform is filling price and availability dynamically rather than from frozen values. Run the live URL through Google's Rich Results Test to verify product snippet eligibility and to surface warnings about missing recommended fields like brand or gtin. Use the Schema Markup Validator for an independent syntax check. Then watch the Merchant listings and the product snippet reports in Search Console over the following weeks to confirm Google is parsing the markup cleanly across your catalog and not flagging price or availability mismatches at scale.
Treat Product schema as living data, not a one-time paste. Prices change, stock runs out, and sales end, and your markup has to track those changes automatically or it becomes misleading. Audit a sample of product pages periodically to confirm the schema still mirrors the page, keep your identifiers populated so shopping surfaces can match your items, and only ever publish review ratings that come from real reviews on the page. Done right, Product markup turns plain listings into shoppable results, feeds the AI shopping assistants that increasingly drive discovery, and does it without risking the penalties that careless review markup invites.