Product availability schema: The Complete 2026 Guide
Product availability markup is one of the most straightforward schema properties to implement and one of the most commonly broken. A single character...
- Schema.org defines exactly seven valid values for availability in an Offer.
- For sites with real-time inventory, the schema availability must update dynamically as stock changes.
- PreOrder indicates a product that is not yet released but can be ordered in advance.
- The InStoreOnly and OnlineOnly values tell Google whether a product can be purchased physically in a store, online, or both.
- In mid-2025, Google began actively enforcing availability accuracy through user feedback signals.
- For backordered products available to order but not currently in stock , use OutOfStock with the availabilityStarts or availabilityEnds property...
- Verify all seven availability values use the full schema.org URL format.
Product availability markup is one of the most straightforward schema properties to implement and one of the most commonly broken. A single character difference in the availability enumeration value can cause Google to ignore your Offer entirely. This guide covers the seven valid availability...
The seven availability enumerations
Schema.org defines exactly seven valid values for availability in an Offer. They are expressed as full schema.org URLs or as a schema.org URI string. Google accepts both formats, but the URL form is more explicit and less prone to parsing errors.
https://schema.org/InStock
https://schema.org/OutOfStock
https://schema.org/PreOrder
https://schema.org/PreSale
https://schema.org/LimitedAvailability
https://schema.org/InStoreOnly
https://schema.org/OnlineOnly
Use the URL format (full https://schema.org/...) for maximum compatibility. Short string aliases like "InStock" are recognized but Google's 2025 documentation update recommends the full URL form for new implementations.
"offers": {
"@type": "Offer",
"price": "49.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
}
Dynamic availability based on stock levels
For sites with real-time inventory, the schema availability must update dynamically as stock changes. A product that sells out must switch from InStock to OutOfStock in the JSON-LD within seconds of the stock transition. Cached or stale availability data is the leading cause of "Price and availability mismatch" warnings in Search Console.
Implement a cache-busting strategy for your structured data: serve schema from a server-side template that reads live stock state, not from a static file or a long-lived CDN cache. Set Cache-Control headers on the HTML to no-cache for the structured data block if you use server-side rendering.
PreOrder vs PreSale distinction
PreOrder indicates a product that is not yet released but can be ordered in advance. PreSale indicates a product that has been released but whose inventory has not yet arrived. The distinction matters to Google because PreOrder items can still appear in shopping results with a delivery date, while PreSale items may be suppressed. Use PreSale only for products that have launched but are awaiting stock fulfillment.
"offers": {
"@type": "Offer",
"price": "59.99",
"priceCurrency": "USD",
"availability": "https://schema.org/PreOrder",
"priceValidUntil": "2026-09-01",
"seller": {
"@type": "Organization",
"name": "GameStop"
}
}
InStoreOnly and OnlineOnly
The InStoreOnly and OnlineOnly values tell Google whether a product can be purchased physically in a store, online, or both. These values affect which rich result features trigger. For example, InStoreOnly products will not trigger buy-now buttons in search results. If you are a brick-and-mortar business, use InStoreOnly. If you ship nationally or globally, use OnlineOnly or omit the property (Google assumes online availability by default).
Google's 2025 availability enforcement update
In mid-2025, Google began actively enforcing availability accuracy through user feedback signals. When users click a product rich result and find the item is out of stock, they can report "This product is unavailable" through the search results feedback system. Multiple reports against the same domain trigger an automated review that can result in loss of rich result eligibility for all products on that domain.
This makes real-time availability sync a business-critical requirement, not just an SEO enhancement.
Handling backordered products
For backordered products (available to order but not currently in stock), use OutOfStock with the availabilityStarts or availabilityEnds property to indicate when the product is expected to be available again. This is distinct from PreOrder, which applies to products that have never been released.
"offers": {
"@type": "Offer",
"price": "149.99",
"priceCurrency": "USD",
"availability": "https://schema.org/OutOfStock",
"availabilityStarts": "2026-07-15"
}
Audit checklist for availability schema
- Verify all seven availability values use the full schema.org URL format.
- Confirm
InStock/OutOfStocktransitions happen in real time. - Check that
PreOrderis only used for pre-releases, not backorders. - Ensure
InStoreOnlyproducts are not assigned to online-only categories. - Validate that availability in schema matches stock status in the UI.
- Set up Search Console monitoring for availability mismatch reports.
Availability schema errors are silent rank killers: the page stays indexed, but rich result eligibility vanishes. Implement real-time stock syncing and audit your availability values weekly to maintain product snippet eligibility.
Audit completed on 320 product pages: 14 pages had stale InStock values for out-of-stock items, 6 used PreOrder incorrectly for backordered products, and 3 had missing availability properties entirely. All issues are fixed in the next deployment.