Technical guide · Standard or specification
Schema.org Product and Offer for AI-commerce
How to describe products, offers, price, currency, availability, identifiers, and variants without creating a machine-readable version that conflicts with the visible product page.
- Published
- Updated
Scope: this guide explains a technical signal observed by AI Web Check. It does not claim that the signal causes ranking, indexing, citation or inclusion in AI answers.
Product is the entity; Offer is the commercial proposal
Product represents the product or service as an entity. Offer represents a concrete commercial offer, such as selling that product at a particular price and availability state. The relationship is commonly expressed through Product.offers.
Consistency matters more than markup volume: title, price, currency, availability, identifiers, and canonical URL should describe the same thing the user sees.
What AI Web Check evaluates
AI-commerce checks run only after a commerce context is confirmed. On a bounded product sample, the service looks for Product or ProductGroup, Offer or AggregateOffer, core fields, price and currency, availability, brand, identifiers, canonical URLs, and variant signals.
Where a comparison is unambiguous, selected visible HTML values are compared with JSON-LD. Raw prices, product names, SKU or GTIN values, and full markup are not stored in aggregate metrics.
Minimal example
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Example Device",
"sku": "SKU-123",
"offers": {
"@type": "Offer",
"price": "199.00",
"priceCurrency": "EUR",
"availability": "https://schema.org/InStock"
}
}
</script>Common failure modes
- JSON-LD price is updated less often than the visible price.
- priceCurrency is missing or conflicts with the displayed currency.
- availability remains InStock after the product is unavailable.
- One Product node is reused for multiple variants without clear SKU, GTIN, or canonical mapping.
- Markup describes a product that is not actually present in the primary page content.