Skip to content

Ecommerce SEO

Handling out-of-stock and discontinued product pages

Keep it, redirect it or remove it: a decision tree for out-of-stock, seasonal and discontinued product pages, and what changes on the page and in the feed.

By CartKernel · Published

An out-of-stock product page is not one situation. It is at least four: temporarily out, seasonal, discontinued with a successor, and discontinued for good. Each has a right answer for the page, the status code, the feed and the structured data, and the answers differ. Get it wrong in one direction and you delete rankings the page spent years earning. Get it wrong in the other and you send buyers and crawlers to pages that can never sell anything.

The decision tree

Situation Page Status Feed availability Structured data
Temporarily out, returning Keep, with a back-in-stock path and alternatives 200 out_of_stock, or backorder with a date OutOfStock or BackOrder
Seasonal Keep, with the return window stated 200 out_of_stock until the season OutOfStock
Discontinued, successor exists Redirect to the successor 301 Remove the product Successor page carries its own
Discontinued, no successor, page has value Keep for a period with a notice and alternatives, then reassess 200 Remove the product Discontinued
Discontinued, no successor, no value Remove, drop from sitemap and internal links 410 or 404 Remove the product None

“Value” means the page has rankings, external links or steady traffic that a replacement page could inherit. Check Search Console and the inlink report before deciding, not after.

Temporarily out of stock: keep everything, change the promise

The page stays live and indexed at the same URL with the same content, because nothing about its relevance has changed. What changes is the promise. Replace the add-to-cart button with a notify-me form and a restock date if you have one. Keep the price visible, because a page with no price reads as abandoned. Show three or four alternatives from the same collection at a similar price, which is where the buyer who cannot wait should go.

In the feed, set availability to out_of_stock. If you take orders against the incoming stock, backorder or preorder with an availability date is the honest value, and those products can keep serving. On the page, the offer’s availability in product structured data should say the same thing as the feed, because Google compares them and a mismatch disapproves the product. The notify-me list is the restock launch audience, and it belongs in a flow in your email platform rather than a spreadsheet.

Seasonal: never unpublish

A product that sells every winter should be reachable every summer. Unpublishing it on most platforms returns a not-found page, and the URL loses its history each time. Leave the page live, state when the product returns, offer the notify-me form, and sink the product to the end of its collection grid while it is unavailable. When the season starts, the page is already indexed and already ranking.

Discontinued with a successor: redirect

When a product is replaced by a newer version that does the same job for the same buyer, redirect the old URL to the new one with a permanent redirect. Google’s guidance treats a permanent redirect as the strongest signal that the destination is the replacement, and rankings and links consolidate on it over time. Redirect the variant URLs too, and update every internal link so the redirect is not the only path. A short note on the successor page saying what it replaces helps the buyer who arrived looking for the old name.

The redirect has to be to a genuine equivalent. Sending a discontinued espresso machine to the coffee collection, or to the home page, is treated as a soft error rather than a redirect, and the buyer sees the wrong page either way.

Discontinued with no successor

If the page has value, keep it live for a while. Add a clear discontinued notice near the top, remove the buy button, show the closest alternatives, and set the structured data availability to discontinued. Review it after a quarter: if traffic has faded, retire it. If it still draws searches, it has become a guide to what replaced it, and it can stay.

If the page has no value, return a 410 or a 404, remove it from the sitemap, and remove every internal link to it. Both status codes tell Google the page is gone; the 410 is slightly more explicit. The mistake to avoid is redirecting every retired product to a collection by default, which fills the index with soft errors and teaches crawlers that your redirects mean nothing. The longer discussion of whether to delete out-of-stock pages covers the edge cases.

Sold-out variants

When one colour or size sells out, the product page stays exactly as it is, with that option visibly disabled and the others available. When every variant sells out, apply the temporary or discontinued rules above to the product as a whole. Variants do not get their own pages for this purpose; whether variants should have separate URLs is a different question with a different answer.

The feed side

Merchant Center accepts in_stock, out_of_stock, preorder and backorder as availability values, with an availability date required for the last two. What matters is that the value matches the page at the moment Google checks. Products that stay out of stock in the feed remain in the account without serving, which is fine; products removed from the feed and later re-added restart their history. Match the feed refresh cadence to how quickly stock moves, and if that is faster than the fetch schedule allows, how often the feed should update explains the options.

Structured data values

Google’s merchant listing documentation accepts the schema.org availability values, including InStock, OutOfStock, BackOrder, PreOrder, SoldOut and Discontinued. Use the one that matches the page state, and change it when the state changes, which means the value has to be rendered from stock data rather than typed once. A page marked InStock with no buy button is the version that draws the most disapprovals.

A discontinued product still linked from a buying guide and a collection grid will keep receiving visits it cannot serve. When a product retires, run the inlink report and update each source: swap the guide’s recommendation for the successor, remove the product from collections, and check that the sitemap generator has dropped it. Sold-out products that are coming back stay in the collection at the end of the grid; retired ones leave.

Platform notes

On Shopify, setting a product to draft or unpublishing it from the online store returns a not-found page at its URL, so the redirect or the keep-live decision has to be made before the status change, and redirects are set under URL redirects. The setting to continue selling when out of stock turns an out-of-stock product into a backorder, and the feed should say so. On WooCommerce, hiding out-of-stock items from the catalog removes them from listings while the URL keeps responding, and moving a product to the trash returns a not-found page; redirects live in the SEO plugin or the server. On both platforms, deleting a product outright frees its handle, which is rarely what you want for a URL with history.

A quarterly routine

  1. Export every product with its status, stock level and stock trend.
  2. Join with impressions and clicks from Search Console and inlinks from a crawl.
  3. Apply the tree to each product that is out of stock or discontinued.
  4. Log every redirect with the date and reason, so the next person can understand it.
  5. Check the collection grids and guides for retired products still linked.

The product page SEO work on a large catalog is as much about the pages leaving as the pages arriving. A store that handles retirement well keeps the authority it has earned; a store that unpublishes on instinct starts over every season.


Sources

Find the leak.

A free Growth Analysis ranks what your store should fix first, by revenue at stake.