Should out-of-stock products stay indexed for SEO?
Yes, if the product's coming back. A page that's out of stock for a few weeks has the same URL, the same links pointing at it and the same search history it had last month. Pulling it from the index throws all of that away to solve a problem that fixes itself when the delivery arrives. Stock status is one of the first decisions I check on a WooCommerce catalogue, and this one's the easiest.
The mistakes I look for are the quick fixes that feel tidy. Setting the product back to draft turns its URL into a 404 for every visitor who isn't logged in. Adding noindex asks Google to drop it. Redirecting it to its category sends the shopper somewhere they didn't ask to go, and the redirect has to be undone the day stock returns.
How do you hide out-of-stock products in WooCommerce? Tick Hide out of stock items from the catalog under WooCommerce, Settings, Products, Inventory. It's a catalogue setting, not an indexing one: WooCommerce's docs say it hides out of stock items from the store catalogue and customer view. I still check what the product URL returns and whether it's in the sitemap, a line on the checklist I run on WooCommerce stores.
| Situation | What the URL does | Availability value |
|---|---|---|
| Out of stock, coming back | Stays live and indexed | OutOfStock |
| Taking orders to ship later | Stays live and indexed | BackOrder |
| Not released yet, taking orders | Stays live and indexed | PreOrder |
| Gone for good, with a true successor | 301 to the successor | None, the old page is gone |
| Gone for good, still earning clicks, no successor | Stays live as a page pointing to alternatives | Discontinued |
| Gone for good, no clicks, links or successor | Returns a 410 | None |
How do I keep out-of-stock products useful for shoppers and SEO?
A page worth keeping has to earn its place while it can't sell. These are the five things I set up on every out-of-stock product that's coming back.
- i.
Say it plainly, with a date only if you know it
The page says it's out of stock beside the price and button, gives a back date only when the supplier's confirmed one, and links the nearest in-stock alternatives.
- ii.
What if only one variation is out of stock?
Keep the parent product live and mark just that variation out of stock. WooCommerce's variable product docs say the parent stays visible on shop and category pages as long as at least one variation is in stock, and with the hide setting on, sold-out variations drop out of the dropdown.
- iii.
Offer a back-in-stock alert or a pre-order
A notify-me form turns a dead end into a list of buyers, and a pre-order keeps the sale if you know the arrival date. A pre-order product's availability should then read
PreOrderorBackOrder, notOutOfStock. - iv.
Sort sold-out items to the end of category grids
The product stays in the category, so its internal links survive, but shoppers see what they can buy first. I do this with the sorting the store already has, or a small snippet, rather than hiding the item.
- v.
Keep Merchant Center in step with the page
Google's Merchant Center help says availability is required for all products and should always match the website, across the product data, the landing page and checkout. Its automatic item updates feature uses the landing page status to correct the feed when stock moves faster than the feed does.
How do I mark availability in the page and the markup?
Google's product documentation sends you to its merchant listing guide for availability, and that guide lists the values it accepts: BackOrder, Discontinued, InStock, InStoreOnly, LimitedAvailability, OnlineOnly, OutOfStock, PreOrder, PreSale and SoldOut. Availability is a recommended property, not a required one, and Google says not to give more than one value.
On a WooCommerce store you usually don't write this by hand. WooCommerce core builds the Product markup itself, and its code maps stock status three ways: in stock becomes InStock, on backorder becomes BackOrder, and anything else becomes OutOfStock. There's no branch for Discontinued, so a product you've stopped selling for good still tells Google it's only out of stock, unless an SEO plugin or custom code prints a different value.
My check is three things lining up on the live page: the stock message a shopper reads, the availability value in the rendered source, and the button. If the page says Out of stock while the markup still says InStock, that's the one I fix first. A cached copy or a second plugin's schema can lag behind the stock change, so I read the JSON-LD in the page source rather than trusting a settings screen.
Availability is a fact about the offer, not a setting to keep a page looking healthy. Leaving an unavailable product marked InStock doesn't protect anything. It just means the shopper finds out at the cart instead of in the results.
Rather have me do this? One person, whole job.
Book a call on UpworkWhat do I do with a product that's gone for good?
Discontinued products don't get one rule for the whole catalogue. I take each one down this ladder and stop at the first step that fits.
- Step 01
Check what the URL still earns
Clicks and impressions over 12 months in Search Console, links from other sites in a backlink export, and internal links from posts and other products. A URL with none of these has nothing to protect. One with any of them doesn't go straight to a 410.
- Step 02
301 to a true successor when there is one
The newer model, the same product under a new name, or the version that replaced it. The test is simple: would the person who searched for the old product be glad to land there? If so, it's a 301, and Google treats a permanent redirect as a signal that the target should be the canonical page.
- Step 03
301 to the closest category only when it matches
When there's no single successor but the product type still exists, the category that sells that exact type is fair. A discontinued ceramic mug can go to the ceramic mugs category, never the homepage or the shop page.
- Step 04
Keep a discontinued page when it still earns search traffic
Some products are still searched by name or part number long after they've gone. For those I keep the URL live, mark it
Discontinued, remove the add to cart button, lead with the nearest alternatives, and keep the specs people came for. - Step 05
Return a 410 when there's nothing left
No clicks, no links, no successor. Google doesn't index URLs that return a 4xx code and removes ones already indexed, so a 410 takes the product out cleanly. When a catalogue has hundreds of these, it becomes a content audit that decides prune, merge or keep for every product, rather than a one-off.
- Step 06
Clean up after the decision
The old URL comes out of the sitemap, menus, related product blocks and internal links. Then I crawl the store again to catch chains, where one old product redirects to another that's since been removed.
Don't noindex a discontinued product and leave it there for good. It stays crawlable, it keeps showing up in internal links, and anyone arriving from an old link still hits a page that sells nothing. Give it a destination or a status instead.
Why not redirect everything to the shop page?
Because Google says not to. Its site move guidance warns against redirecting many old URLs to one irrelevant destination, such as the home page, because it can confuse users and might be treated as a soft 404. On a store, the shop page is that homepage: it's related to every product and a match for none of them.
A soft 404 is Google deciding a page that answered with a success code is really a missing page. So the blanket redirect gets you a 404's outcome plus a confused shopper, and hides which products were removed behind one destination.
Mapping each old URL to its closest real page is what worked on a WooCommerce store whose daily clicks fell from 162 to 49 after a redesign. That drop was caused by renamed URLs rather than stock, but the principle carries over: a sapphire category went to the new sapphire category, not the homepage.
Watch for the plugin setting that sends every 404 to the homepage, too. It doesn't remove the dead end. It just moves it from Search Console's Not found list into Soft 404, where it's harder to fix one product at a time.
How do I find discontinued products still getting traffic?
I start from the catalogue, not from Search Console. The store export tells me which products are out of stock and which are discontinued, however the store marks that. Then I match those URLs against the Performance report by page over 12 months, because a seasonal product can look dead in a three month window and still sell every December.
Search Console truncates a report export to 1,000 rows, so a large catalogue needs the API, the BigQuery link or the bulk data export instead. It's the same page-level export I build a platform move's redirect map from, and for the same reason: it shows which URLs have earned something.
| Signal | What it means | What I do |
|---|---|---|
| Clicks in the last 12 months | People still search for it and click | A 301 to a successor, or a discontinued page with alternatives |
| Impressions but no clicks | It still ranks but doesn't earn | A 301 if a successor exists, otherwise usually a 410 |
| Links from other sites, no clicks | Link value with no search demand | A 301 to the closest real match |
| No clicks, impressions or links | Nothing to protect | A 410, and it leaves the sitemap |
| Listed as Soft 404 in Page indexing | Google already reads it as empty | Give it a real status: 301, a useful page or 410 |
After the changes go live, the Page indexing report shows how they landed: old product URLs listed as Page with redirect is what a 301 should produce. I don't promise a date for any of it to settle. What I watch for is a product URL that lost its clicks without any new URL picking them up, which usually means a redirect pointing somewhere the shopper didn't want to go.
If your catalogue has hundreds of out-of-stock and discontinued products and you'd rather one person made the call on each, that's part of the store work I do. Every decision comes with the data behind it, so you can check it yourself.
Book a call on Upwork
