# offers.availability - Definition and Correct Values

> The schema.org property that makes an Offer buyable, the correct enumeration URLs, and why only 7% of Magento stores emit it.

Source: https://angeo.dev/offers-availability-definition/
Updated: 2026-09-26

Canonical definition

# 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.

**In one sentence**
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 |

**Use the full URL, not the bare word**
`"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](https://angeo.dev/hyva-theme-product-schema-gap/).

### 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](https://angeo.dev/modules/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

- [Magento 2 Product JSON-LD schema for AI search](https://angeo.dev/magento-2-product-schema-json-ld-ai-search/)

- [What Hyvä emits as product schema](https://angeo.dev/hyva-theme-product-schema-gap/)

- [ACP product feed - definition](https://angeo.dev/acp-product-feed-definition/)

- [Module: JSON-LD schema for Magento 2](https://angeo.dev/modules/rich-data/)

- [Magento AEO - definition](https://angeo.dev/magento-aeo-definition/)

Verified 28 August 2026 against schema.org ItemAvailability. Store figures: 762 reachable Magento 2 storefronts, scan of 9 August 2026, Tranco list ID ZJGPG; 427 stores had a testable product page. Disclosure: we publish the open-source schema module referenced above.

## More on this topic

- [FAQPage Schema After May 2026](https://angeo.dev/faqpage-schema-after-2026/)
- [Entity @id in JSON-LD - Definition](https://angeo.dev/entity-id-definition/)
- [The Magento product description that AI can't read](https://angeo.dev/magento-product-description-invisible-ai-chatgpt/)

## Sources

- [schema.org: ItemAvailability](https://schema.org/ItemAvailability)
- [schema.org: Offer](https://schema.org/Offer)
- [Google: Merchant listing structured data](https://developers.google.com/search/docs/appearance/structured-data/merchant-listing)

Links checked 23 September 2026.
