What Product describes
The Product entity should represent the primary product on the page. Name, image, description, brand and identifiers belong to the product itself, while price, currency and availability belong to Offer or AggregateOffer. Do not add Product to a non-product page just to chase a rich result.
A practical minimum
A usable graph normally includes @context, @type Product and name. For shopping scenarios the product should usually be connected to an Offer or AggregateOffer. Put price, priceCurrency, availability and the offer URL inside that commercial entity.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Product example"
}
Price and currency
Send price as a numeric value without the currency symbol, and place the ISO currency code in priceCurrency, such as RUB, KZT, USD or EUR. Markup values should match the price visible to users. If variants have different prices, model the offers correctly instead of choosing an arbitrary value.
SKU, brand and identifiers
SKU can connect the entity with the store catalogue. Brand must contain the real brand, not text captured from an unrelated DOM container. If GTIN or MPN is available, expose it using the dedicated properties. Never fabricate identifiers to improve a score.
Images
The image property can be a URL, an array or an ImageObject. Use absolute HTTPS URLs that a crawler can fetch. Avoid substituting site logos, UI icons or decorative banners for the product image.
Ratings and reviews
aggregateRating and review must be backed by real review information visible on the page. Do not generate a rating when no such data exists. When reviews are present, make sure reviewCount and rating values match the page.
Pre-publish checklist
Compare the JSON-LD with the rendered page: name, price, currency, availability and image should agree. Then validate JSON syntax, @id references and duplicate Product entities. SchemaCat separates Google and Yandex diagnostics so inconsistencies are easier to spot.
Common questions
Can structured data always be improved to 100% automatically?
Only when the required data actually exists in the JSON-LD or on the page. A tool should not invent prices, authors, ratings, addresses or other values.
Should every possible Schema.org property be added?
No. A smaller set of accurate properties is better than irrelevant or fabricated values.