offers.availability – Definition and Correct Values
offers.availability is the schema.org property that states whether a product can be bought right now. It sits inside the Offer node of a Product‘s JSON-LD and takes a schema.org enumeration URL such as https://schema.org/InStock. Without it, a machine reading the page knows the product exists and what it costs, but not whether it is purchasable – which makes the entire Offer unusable for recommendation.
The one field that turns a price into a buyable offer. Omit it and structured data describes a catalogue entry, not something a shopper can be sent to.
Correct form
{
"@context": "https://schema.org",
"@type": "Product",
"@id": "https://store.example.com/alpine-jacket#product",
"name": "Alpine Hiking Jacket",
"sku": "WB-004",
"offers": {
"@type": "Offer",
"url": "https://store.example.com/alpine-jacket",
"price": "189.99",
"priceCurrency": "EUR",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition"
}
}
The values
| Value | Means |
|---|---|
InStock | Available for immediate purchase |
OutOfStock | Not available; the page still exists |
BackOrder | Orderable now, shipped when restocked |
PreOrder | Orderable before release |
LimitedAvailability | Low stock |
SoldOut | Will not be restocked |
Discontinued | No longer sold |
InStoreOnly / OnlineOnly | Channel-restricted |
"availability": "InStock" is the most common error in Magento output. The property expects an ItemAvailability enumeration member, and the interoperable form is the absolute URL https://schema.org/InStock. The bare string is tolerated by some consumers and ignored by others – which is the worst possible outcome, because it validates in one tool and disappears in another.
Why it matters more for AI than for Google
Traditional rich results degrade gracefully: a missing availability costs you a badge. An AI answer engine behaves differently – it is deciding whether to name one or two stores in a sentence. An Offer with a price and no stated availability cannot be recommended without risking sending a shopper to a sold-out page, so the safe move is to skip it.
This is the practical difference between structured data that validates and structured data that is usable.
How common is the gap?
Across 762 reachable Magento 2 storefronts from the Tranco top-200,000 frame (list ID ZJGPG, scan of 9 August 2026):
| Signal | Stores | Share of 762 |
|---|---|---|
Emit JSON-LD Product | 73 | 10% |
Emit offers.availability | 55 | 7% |
A product page was reachable and testable on only 427 of the 762 stores, so against that stricter denominator JSON-LD Product stands at 17%. Either way the shape is the same: roughly a quarter of the stores that emit Product schema omit the field that makes the Offer actionable.
Two Magento-specific causes
Hyvä: availability in microdata, not in JSON-LD
Hyvä’s product page is a schema.org/Product microdata item, and its price block emits an Offer with availability (as an http://schema.org/... URL). What it lacks is JSON-LD and the matching fields – sku, brand, GTIN, shipping and return policy. Details: what Hyvä emits as product schema.
Schema injected through a tag manager
JSON-LD added client-side via GTM is invisible to any consumer that does not execute JavaScript. Server-rendered output is the only reliable form.
Related: the missing @id
A second defect travels with this one. Product and Organization nodes emitted without @id cannot reference each other, so a parser sees disconnected fragments instead of one entity graph – the store, the product and the offer never link up. We found this on our own demo store through external scanning after the in-store audit passed.
Fixing it on Magento 2
Magento’s default Product schema is incomplete. angeo/module-rich-data emits complete server-rendered Product, Organization, BreadcrumbList, FAQPage and WebSite JSON-LD with full availability URIs, return policy, shipping details, GTIN and MPN. Verify with:
bin/magento angeo:aeo:audit
Questions
- What is offers.availability?
- The schema.org property inside a Product’s Offer node that states whether the item can be purchased. It takes an ItemAvailability enumeration value such as
https://schema.org/InStock. - Should availability be InStock or https://schema.org/InStock?
- The full URL. The property expects an enumeration member and the absolute URL is the interoperable form. The bare word is accepted by some consumers and ignored by others.
- What happens if I omit offers.availability?
- The Offer states a price with no purchasability. An AI answer engine cannot confirm the item is buyable, so the safe behaviour is to skip the store rather than risk sending a shopper to a sold-out page.
- Does Hyvä emit offers.availability?
- Yes, as microdata. Hyvä marks the product page as a schema.org/Product item and its price block emits an Offer with price, currency and availability. It emits no JSON-LD, and no brand, GTIN, shipping or return fields.
- Does JSON-LD injected through Google Tag Manager count?
- Not reliably. Client-side injection is invisible to consumers that do not execute JavaScript. Server-rendered structured data is the only dependable form.
Related
Sources
Links checked 23 September 2026.