An item is unavailable. For the customer that moment lasts two seconds; for the shop it starts a chain of decisions. Does the page stay reachable? What does the cart button say? Which markup does the search engine read? And how does the item come back without the address dropping out of the index in the meantime? Unavailability in e-commerce is not an accident, it is a state with its own logic - and many shops treat it as an exception nobody planned for. This article sorts the states, shows the matching markup, separates temporarily empty from permanently gone and names the status codes that actually do something.
Out of stock is a state, not an accident
How often a shelf is empty has been measured thoroughly in physical retail. The worldwide study by Gruen and Corsten puts the average out-of-stock rate in fast-moving consumer goods at 8.3 percent - a measurement from the 2002 survey, reported in Appendix 3 of the 2008 guide (Gruen/Corsten 2008). That sounds marginal until you convert it: the report rounds the rate to about 8 percent and derives from that rounded figure that, from a shopper's point of view, roughly every thirteenth item they look for is missing. The figure cannot be carried over one to one to an online shop - the assortment differs, procurement differs, and a stock level of zero is visible on the web before anyone reaches for the product. As an order of magnitude for how ordinary unavailability is in retail, it still holds.
More instructive than the frequency is the reaction. The same line of research recorded what customers do when the item they want is missing: 31 percent buy it at another store, 26 percent switch to a different brand, 19 percent stay with the brand and take a different pack, 15 percent delay the purchase, 9 percent do not buy at all (Gruen/Corsten/Bharadwaj 2002). The finding comes from physical stores and has to be read as such. But it describes behaviour that tends to be stronger online rather than weaker: switching to the next supplier costs a car journey in the high street and a click in the browser.
From a shopper perspective, this means that for every 13 items one wants to buy, one will be out of stock.
Gruen and Corsten, A Comprehensive Guide To Retail Out-of-Stock Reduction, 2008, section 1-1 Why Isn’t Availability Higher?
The cost sits where it is rarely booked. The same publication puts the retailers' lost sales from missing goods at 4 percent, drawing on the 2002 survey, and expects an effect of similar size on earnings per share (Gruen/Corsten 2008). For manufacturers the share is higher: around 30 percent of sales are lost on an out-of-stock item because part of the customer base switches brand or does not buy at all (Gruen/Corsten 2008, likewise drawing on the 2002 survey). Translated to a shop this means the damage does not occur when stock hits zero, but when the page gives no answer to the question of what to do next.
The shares quoted come from surveys in physical grocery and drugstore retail. The average across eight categories is given by the source for the response shares alone (Gruen/Corsten/Bharadwaj 2002); for the out-of-stock rate and the two lost-sales figures it states no number of categories. We have not found comparably solid figures for German online retail published in this form. Anyone moving the values into a presentation should write the origin next to them - experience shows they otherwise travel from the shelf to the shopping cart within a few slides and turn into a claim nobody can back up.
Six states a shop has to tell apart
Out of stock is an umbrella term for at least six different situations that are handled differently in technical, legal and editorial terms. Reducing them to a single switch - stock greater than zero or not - loses exactly the distinctions from which the decision follows whether a page stays, is redirected or disappears.
| State | What the customer should see | Markup | Address and status code |
|---|---|---|---|
| Temporarily empty, resupply ordered | Date or time window, offer a notification | OutOfStock | Page stays, status 200 |
| Back order possible, delivery later | Orderable with a note on the waiting time | BackOrder | Page stays, status 200 |
| Pre-order before market launch | Date of general availability | PreOrder | Page stays, status 200 |
| Remaining stock sold, no reissue | Note on the end plus fitting alternatives | SoldOut | Page stays, status 200 |
| Item permanently discontinued | Successor or category as the next step | Discontinued | Redirect 301 or status 410 |
| Available in the store only | Location and pickup instead of a cart | InStoreOnly | Page stays, status 200 |
The difference between the fifth row and all the others is the core of this table. As long as an item comes back, the product page is an asset: it has links, reviews, a history in search and an address that sits in newsletters and price portals. Switching it off because stock is zero for three weeks throws that value away and rebuilds it from scratch afterwards. How laborious the rebuild is becomes visible at the next move of an address - the procedure is in the article on the redirect plan for a relaunch.
The reverse also holds: a page that permanently sells nothing costs attention - from the crawler, in the internal search and in the editors' heads. An assortment that grows over years accumulates dead entries that show up in filters, inflate categories and steer demand into dead ends. It is the same mechanism that applies to filter addresses; how to tame it there is in the article on faceted navigation.
- Who decides what is permanent? Purchasing knows the reorder, marketing knows the demand, engineering knows the address. Without a named responsibility the state stays unclear - and in practice unclear means the page sits unchanged for years.
- From which duration does empty become discontinued? A fixed deadline in the data model - a field for the expected restock date, for instance - turns an opinion into a rule.
- Is there a successor? A successor product is a strong argument for a redirect; without one the redirect goes to the category or the address ends at status 410.
- What happens to variants? A single sold-out size is no reason to touch the parent page. Separating variant from item is covered in the article on product variants and duplicate content.
- Who really maintains the stock? If marketplaces, point of sale and shop hold different truths, the state is guesswork anyway - see real-time inventory sync.
The markup: setting availability cleanly
For the machine-readable side there is a fixed list of values. The ItemAvailability enumeration from Schema.org holds twelve values: BackOrder, Discontinued, InStock, InStoreOnly, LimitedAvailability, MadeToOrder, OnlineOnly, OutOfStock, PreOrder, PreSale, Reserved and SoldOut (Schema.org). The search engine processes ten of them - MadeToOrder and Reserved are absent from the list of supported values for product results (Google Search Central). So anyone wanting to mark up made-to-order production should know that the statement is correct but has no effect on how the product is presented in search.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Sample item 40 mm",
"sku": "ART-40-114",
"offers": {
"@type": "Offer",
"url": "https://shop.example.invalid/p/art-40-114",
"price": 49.90,
"priceCurrency": "EUR",
"availability": "https://schema.org/OutOfStock",
"itemCondition": "https://schema.org/NewCondition"
}
} Three rules decide whether this markup carries. First, exactly one value belongs in it; several values side by side are explicitly ruled out (Google Search Central). Second, merchant listing experiences require a price greater than zero, while availability is listed there as a recommended property - if it is missing the result does not fail, but it does get poorer (Google Search Central). Third, the statement has to match the visible page. A page that displays Out of stock and reports InStock in the source is not an optimisation trick but a contradiction, and one that is typically read against the shop.
- Serve it server-side: if availability is only added by script, the markup can be missing at fetch time. The vendor documentation warns about exactly this: dynamically generated markup makes capture for shopping experiences less frequent and less reliable, and that hits fast-changing details such as availability and price first (Google Search Central).
- Short cache lifetime: a twelve-hour page cache turns every stock statement into fiction. Availability belongs in a section that is cached separately and briefly.
- Mark up variants separately: every purchasable variant carries its own offer with its own value.
- Align feed and page: what the product feed reports and what the page says has to come from the same source - connecting the Google Merchant Center is the usual route for that.
An expensive mistake in this area is an availability value that comes from an editorial field instead of from stock. It then stays on InStock until somebody changes it - and nobody changes it, because it appears in no process. The statement only becomes reliable when it is derived at delivery time from the same number that also switches the cart button. A shared derivation point in the code, where stock, reorder and status field produce one value, is worth the work.
Temporarily empty: the page stays up
For the temporary case one simple rule applies: keep the address, keep status 200, change the content. The product page does not become a dead end but a switch. It answers three questions, in this order: when does the item come back, what can I take instead, and how do I find out without checking myself.
The date is a strong lever here because it makes the decision possible in the first place. A date postpones the purchase; an empty area ends it. How a date statement has to be built so that it holds is covered in the article on the delivery date on the product page. For the out-of-stock case one particularity is added: the date is a forecast, not a promise, and it has to be worded accordingly - expected from, not available from.
Notification
One field for the address, one confirmation, one message when the item returns. The sign-up is a consent with a narrow purpose: it permits a message about this item, not a newsletter. Mixing the two loses the permission for both.
Alternatives
Not the category bestseller but the closest substitute: same function, same price bracket, available. In physical retail 45 percent of shoppers reach for a different brand or a different pack when a substitute is available (Gruen/Corsten/Bharadwaj 2002).
Date and quantity
Expected date, expected quantity, as-of date of the statement. Three fields that come from procurement and not from the editorial team - otherwise they age silently.
Pickup in the store
If the item is in stock in a branch it is not sold out, it is reachable differently. The state for that is InStoreOnly; the process behind it is covered in the article on click and collect.
What should not happen in this state: greying out the cart button and changing nothing else. A disabled button without an explanation is often not perceivable through a screen reader at all, and a dead end for everyone else. The state belongs in the text, not only in the styling - a question of accessibility and of clarity at the same time.
Permanently gone: 404, 410 or redirect
When an item is discontinued there are three clean routes - and one wrong one. The wrong one is the silent redirect to the home page. The three clean ones are: redirect to a real successor, redirect to the fitting category, or clearing the address away with a status code. For clearing away, the HTTP standard provides two codes. 404 means not found. According to the standard, 410 indicates that access to the target resource is no longer available at the origin server and that this condition is likely to be permanent; if the server cannot determine that, 404 ought to be used instead (RFC 9110).
For the search engine the distinction makes practically no difference. All 4xx errors except 429 are treated the same: the address counts as non-existent and drops out of the index if it was in it; the crawl frequency gradually decreases (Google Search Central). The difference lies with the rest of the world - other systems, price portals and your own tools read 410 as final and can clean up their data faster. For redirects: 301 is used as a strong signal for the target, 302 as a weak one, and the chain must not be arbitrarily long, since by default up to ten hops are followed (Google Search Central).
The redirect to the home page fails at a different point. It delivers a status code 200 for an address behind which the requested content does not exist. The provider documentation explicitly advises against redirecting many old addresses to one irrelevant single destination such as the home page: this can confuse users and might be treated as a soft 404 error (Google Search Central). A soft 404 is a response that returns a user-friendly message about the missing content but no 404 HTTP response code (Google Search Console Help). The result is a double loss - the customer ends up nowhere without an explanation, and the system rates the address as an error without anyone having reported one.
These three lines are the actual acceptance test. A state that cannot be measured as a status code is a claim about the page, not a piece of evidence. For an assortment of a few thousand items the check belongs in a run across the whole address list, not in a spot check: what holds for three addresses does not, in our experience, hold for three thousand. Which addresses are still being fetched at all is revealed by logfile analysis.
What does not work: robots.txt, noindex and the removal request
For retired items the wrong tool is reached for regularly. An entry in robots.txt prevents the fetch, not the inclusion in the index - the vendor documentation says explicitly that robots.txt should not be used as a way to block a page (Google Search Central). The combination weighs heavier: blocking an address via robots.txt while also placing a noindex on it means the noindex cannot be read at all. The order has to be the other way round - keep it crawlable so the instruction arrives.
The removal tool is no solution either but a purchase of time: requests made in it last for about six months, after which the address returns if the underlying state is unchanged (Google Search Central). Only what happens on the server lasts: remove or change the content, protect access, or clear the address away with a status code.
First: retiring a sold-out product page with noindex and releasing it again three weeks later - the rebuild in search typically takes longer than the supply gap. Second: blocking the address in robots.txt and then wondering why it still shows up in the results. Third: redirecting every discontinued item to the home page and thereby producing hundreds of addresses that can be treated as soft 404s. All three moves are quick to implement, all three cost more than they save.
The legal frame: bait offers and stocking levels
Unavailability has a competition-law side that is rarely considered in day-to-day shop work. The annex to section 3 paragraph 3 of the German Act against Unfair Competition lists practices that are unlawful towards consumers without a case-by-case assessment (per se prohibitions). Number 5 covers offers at a stated price where the trader has reasonable grounds to believe that the goods cannot be supplied in reasonable quantity for a reasonable period, without disclosing that fact. If the stocking period is shorter than two days, the trader carries the burden of proving that it was adequate (UWG, annex to section 3 paragraph 3, number 5).
if the stocking period is shorter than two days, it is incumbent on the trader to prove its adequacy
Annex to section 3 paragraph 3 UWG, number 5 (translation from the German)
In practice this means a promoted campaign whose quantity lasts half a day needs a note about the limited quantity - and it belongs where the advertising sits, not first in the shopping cart. For the product page a second point follows: a statement such as only a few left is a factual claim. It has to come from stock and not from a template that says the same thing on every page.
- Quantity note for thin stocking: the note belongs in the advertising, not in a footnote at the end of the checkout.
- Derive scarcity displays from stock: a number that stays the same throughout is a claim without a basis - and a well-known subject of review.
- Time limits only when they apply: the annex also prohibits the untrue statement that something is available only for a very limited period (UWG, annex to section 3 paragraph 3, number 7).
- Keep price and availability apart: an item without stock keeps its price; the markup changes availability, not the price.
Order of work: what counts first
The order of implementation follows from the reactions. The largest single reaction is buying at another store at 31 percent; taken together, switching to a different brand and reaching for a different pack sit above that at 45 percent (Gruen/Corsten/Bharadwaj 2002). Against both groups one measure mainly works: a visible, fitting substitute on the same page. It therefore comes first, ahead of any markup and any status code - because it decides today's revenue, while the technical points decide the visibility of the day after tomorrow.
Second comes the notification. It captures the share that postpones the purchase, and it turns a lost visit into an address. Third comes the state logic: the field in the data model that separates temporary from permanent, and the decision about address and status code derived from it. Only then comes the markup, because without clean state logic it merely delivers a wrong value faster.
This order is uncomfortable because the technical points are easier to tick off. It pays off anyway, because markup describes a state that has to exist before it can be described. How answer systems now evaluate these details is covered in the article on product pages in AI answers.
Implementation in the shop
In a shop built on Shopware in its open-source form the places sit close together: the availability rules on the item, the delivery of the markup in the template, the redirect table for discontinued items and the feed into comparison portals. The effort rarely lies in a single place but in the fact that all four have to deliver the same truth. We implement this in existing shops and first check where the four drift apart - see Shopware agency and technical SEO.
- Introduce a state field: an enumeration field on the item holding the six states from the table, maintained from stock and procurement, not by hand.
- One derivation point: a function that turns stock, reorder and state field into the value for the markup and the text on the page.
- Maintain the redirect table: every discontinued address gets its target or its status code 410 in the same work step.
- Check run across the address list: measure the status code per address and hold it against the expected state - a run that can be scheduled and that names deviations.
- Test data without real customer data: the check run belongs on a copy, not on the production system; how such a copy is created is covered in the article on staging with test data.
One note on measuring itself: a check run across a few thousand addresses creates load and looks like a foreign fetch in the access data. Anyone filtering bot traffic in parallel should mark their own run beforehand, otherwise they measure their own defence as well - the topic is covered in the article on bot traffic in the online shop.
The figures on frequency and on customer reactions come from the study by Gruen and Corsten on reducing out-of-stocks in fast-moving consumer goods (2008) and from the analysis by Gruen, Corsten and Bharadwaj (2002) reproduced within it; both refer to physical retail. The list of availability values comes from Schema.org, the details on processing by search from the Google Search Central documentation and the Search Console Help, the status codes from RFC 9110, and the competition-law requirements from the annex to section 3 paragraph 3 UWG as published by Gesetze im Internet.
Typically not, as long as the item comes back. The page keeps its address and its status code 200 but changes the content: date, substitute, notification. It only belongs offline once the item is permanently discontinued - and then not by deletion but through a redirect to a successor or a deliberate status code 410 (RFC 9110).
OutOfStock describes temporarily empty stock, SoldOut the sold-out end of a run, Discontinued the retired item and BackOrder later delivery after ordering. Exactly one value belongs in the markup; several values side by side are not provided for (Google Search Central). What matters is that the value comes from the same source as the visible text on the page.
For search, typically not: all 4xx errors except 429 are treated the same (Google Search Central). The difference lies in the statement. 410 tells other systems that the condition is likely to be permanent (RFC 9110) and thereby speeds up the cleanup in portals, feeds and your own tools. Anyone who cannot judge the difference with confidence takes 404.
That depends on demand, not on the calendar. In our experience keeping it up pays off for as long as the address still receives visits or links and no successor exists. A fixed deadline in the data model helps regardless: it forces a decision instead of letting the state age unnoticed. Which addresses are still being fetched is shown by logfile analysis.
Yes, if the statement is accurate and comes from stock. The annex to section 3 paragraph 3 UWG prohibits under number 5 offers without a note that the stocking level is not expected to suffice; if the stocking period is shorter than two days, the trader carries the burden of proving that it was adequate (UWG, annex to section 3 paragraph 3, number 5). A scarcity display showing the same number on every page does not meet that requirement.
It is the measure that specifically captures the share postponing the purchase - in physical retail 15 percent were measured for that (Gruen/Corsten/Bharadwaj 2002). What matters is a narrow purpose for the consent, a confirmation, and a message that is actually triggered when the item returns. If you would like this reviewed for your assortment, a short conversation is a quick route, see contact.