Skip to content

Product Schema Generator

Fill in a product's name, image, price and availability, and get a ready-to-paste Product JSON-LD script tag with a properly nested Offer — plus an optional AggregateRating, with a reminder that a rating has to come from real, verifiable reviews, never a number typed in for the sake of a star rating in search results.

  • Valid Product schema with nested Offer
  • Optional AggregateRating, validated as a pair
  • Currency code and price format checks
  • Ready-to-paste <script> tag
  • Runs fully client-side

Generator

Built in your browser, never sent anywhere

    Fill in the required fields to generate Product schema.

    How to generate Product schema

    1. 01

      Fill in the product basics

      Name and image are required; brand and description are recommended.

    2. 02

      Set the price and availability

      Price needs a 3-letter currency code (like USD or EUR) alongside it.

    3. 03

      Add a rating only if it is real

      Rating value and review count must both be genuine and both set together — one without the other is invalid.

    4. 04

      Copy the script tag

      Paste it into the product page it actually describes.

    Why price lives inside a nested Offer, not on the product itself#

    A single product can have multiple offers — different sellers, different conditions (new versus refurbished), different regions with different prices — so schema.org models price, currency and availability as a separate Offer object nested inside the Product, rather than flat properties on the product directly. This tool only needs one offer per product, but the nesting still matters: a flat, non-nested price property is not valid Product schema and will not be read correctly.

    A rating has to be real, not a number you decided on#

    Google's structured data guidelines are explicit that aggregateRating must reflect genuine, verifiable reviews — never a rating an owner assigns to their own product for the sake of showing stars in search results. This is exactly the kind of self-serving markup Google's spam policies target and can result in a manual action if abused. If a product does not yet have real reviews, the honest move is to leave rating and review count both empty rather than invent a plausible-looking number — this tool requires both fields together specifically so a lone, made-up rating count cannot slip through.

    The availability values Google actually recognizes#

    availability is not free text — it has to be one of a fixed set of schema.org values, referenced as a full URL (https://schema.org/InStock, not just the word InStock). This tool generates the correct full-URL form automatically from the dropdown selection, since typing the bare word is a common source of Product schema that looks right but technically fails validation.

    Frequently asked questions

    Why is price nested inside "offers" instead of a top-level field?

    Because a product can have multiple offers — different sellers, conditions or regions — schema.org models price, currency and availability as a separate Offer object nested inside the product. A flat price property directly on the product is not valid.

    Can I set a rating without real reviews behind it?

    You can, but you should not — Google's guidelines require aggregateRating to reflect genuine, verifiable reviews, and a self-assigned rating for the sake of star display is exactly the kind of self-serving markup that can trigger a manual action.

    Why does it reject "InStock" but accept the dropdown selection?

    Google expects the full schema.org URL form (https://schema.org/InStock), not the bare word. This tool generates that full form automatically from your dropdown choice so you never have to type it correctly by hand.

    What currency format is expected?

    A 3-letter ISO 4217 code, like USD, EUR or GBP — not a currency symbol. Lowercase input is automatically uppercased.

    Is my product data sent anywhere?

    No. The JSON-LD is assembled entirely in your browser — nothing you enter is transmitted or stored.