Stock & inventory automation

How to remove out of stock products from Google (WooCommerce)

Sold-out and discontinued products don't fall out of Google when you'd expect them to. They sit in the results for months, pulling clicks into pages that can't sell anything, and every one of those clicks is a shopper who bounces straight to a competitor. I scanned 135 UK online shops by hand this year and 4 in 10 had exactly this problem: sold-out products still live and still ranking. Here's how to clear them properly, and how to find them all in one pass rather than one at a time.

Run the free stock checker →

In short: Google won't drop an out of stock page just because the button says sold out. For each dead product, pick one deliberate signal: 301 to a close replacement, 410 if it's gone for good, noindex if you must keep the URL, or leave it live with OutOfStock schema if it's coming back. The Search Console removals tool only hides pages for six months, and Merchant Center disapprovals are a separate problem with the same root cause: your stock data and your public listings disagreeing.

Why Google keeps showing pages you consider dead

Google doesn't know a product is discontinued. It knows the URL returns a 200, the page has content, and it used to earn clicks. As far as the index is concerned that's a healthy page, and healthy pages stay listed. Marking a product "Out of stock" in WooCommerce changes what a visitor sees, not what a crawler concludes: the status code is still 200, the title still matches the query, and unless you send a clearer signal the listing survives until Google's own quality systems slowly demote it, which takes months on a small site that gets crawled every few weeks.

Worse, ticking "Hide out of stock items from the catalog" in Settings > Products > Inventory doesn't help here either. That removes the product from your shop pages and internal search, but the URL itself still loads and still returns 200, so Google keeps it. You end up with an orphaned page: invisible to your own navigation, fully visible in search results. I've written before about how that setting behaves in the out of stock not showing guide; the short version is that hiding and removing are different operations, and Google only responds to the second.

The decision tree: 301, 410, noindex, or leave it live

There isn't one right answer for every product, which is why blanket approaches ("redirect everything to the homepage") do damage. Ask one question per product: is it coming back?

Coming back: leave it live. If the item restocks on any regular cycle, keep the page up, keep it indexed, and make the unavailability explicit in the page and its schema (more on that below). Removing a ranking page for a product you'll sell again next month throws away authority you'll want back and won't easily get.

Gone, with a close replacement: 301 redirect. If a newer model or a genuinely equivalent product serves the same search intent, a 301 passes most of the old page's ranking signals to the new URL and lands the shopper somewhere they can actually buy. In WooCommerce you'll do this with the Redirection plugin or in your server config; either way the test is honesty. Redirecting "blue kettle 1.7L" to another 1.7L kettle is a service to the visitor. Redirecting it to the homepage is not, and Google treats intent-mismatched redirects as soft 404s, which means you get none of the benefit anyway.

Gone, no replacement: 410. A 410 Gone says "this page was removed on purpose", and in my experience Google acts on it noticeably faster than a plain 404, which reads as "might be a mistake, check again later". Trash the product in WooCommerce and the URL returns 404 by default; forcing a 410 for known-discontinued URLs (Redirection can do this, or a few lines in .htaccess or your nginx config) is the stronger signal. Either code eventually works. 410 works sooner.

Must keep the URL but out of search: noindex. Occasionally you need the page reachable (old order emails link to it, or it's a bundle component) but not listed. A robots noindex meta tag does that. The catch: Google has to recrawl the page to see the tag, so on a slow-crawl site this is the slowest of the four options, and don't block the URL in robots.txt at the same time or the crawler can never see the noindex you added.

The Search Console removals tool is a painkiller, not a cure

Search Console > Removals > New request will hide a URL from results within about a day, which feels like a win. It isn't a removal. It's a suppression that lasts roughly six months, after which the page returns to the results if it's still live and indexable. Use it when a dead listing is actively costing you (a discontinued product ranking position one for a money term, pulling traffic you're bouncing daily) as a bridge while the real fix, the 301 or 410 above, gets crawled and processed. Filing removal requests without changing the page underneath is the SEO equivalent of snoozing an alarm.

Temporarily unavailable: say so in the schema

For products that are out of stock but staying live, the page's structured data should say what the button says. WooCommerce outputs Product schema with an Offer, and the offer's availability property should read https://schema.org/OutOfStock when the product's stock status is out of stock. Core WooCommerce handles this correctly on simple products; where I see it break is themes and SEO plugins that override the schema output, or stock status that's wrong in the database to begin with, so the page claims InStock against an unavailable product. Check with Google's Rich Results Test on one known sold-out URL. If the schema says InStock, you're publishing a false availability claim on every dead product you have, and Google increasingly uses that field to annotate listings and rank shopping experiences.

Merchant Center: the same disease, different symptom

If you run Shopping ads or free listings, availability mismatches show up as item disapprovals in Merchant Center rather than stale organic listings, usually flagged as "availability mismatch" after an automatic crawl finds your landing page disagreeing with your feed. The mechanics differ from organic (feeds refresh on their own cadence, and "automatic item updates" can patch some of it), but the root cause is identical: what you actually have in stock and what you're publicly claiming have drifted apart. I've covered the feed side properly in the Google Shopping out of stock errors guide; the WooCommerce-specific point is that fixing your organic dead listings and fixing your feed disapprovals is one job, not two, because both read from the same stock data.

Finding them all at once, not one at a time

Everything above assumes you know which products are the problem. Most owners don't, and the numbers get big quietly. One kitchenware shop I scanned had 525 dead listings out of 2,740 products, a fifth of the catalogue. An aquatics store had 360, including a £1,085 item still pulling clicks from search into a page that couldn't take an order. Nobody let it get that way on purpose; products die one at a time and no one process ever surfaces the accumulated pile. (What that pile costs in bounced traffic and wasted crawl budget is its own subject, which I've broken down in what dead listings actually cost.)

To build the list yourself: in Search Console, Performance report, filter pages containing /product/, export, then cross-reference against a WooCommerce product export filtered to out of stock status (Products screen, filter by stock status, or a quick query on wp_postmeta for _stock_status = outofstock). Every URL on both lists is a dead listing earning impressions. It's tedious, it works, and you'll need to redo it every month, because products keep selling out. Or run my free stock checker, which scans your live store and produces the same list in minutes without touching anything.

And once you've cleared the backlog, the durable fix is stopping the pile rebuilding: stock status that's actually accurate (which, if you sell on more than one channel, means proper sync, covered in the WooCommerce stock sync guide) plus a deliberate rule for what happens to a product when it dies. Shops that decide the rule once stop having this problem. Shops that handle each dead product ad hoc are the 4 in 10.

How long does Google take to drop an out of stock product page?

Weeks to months on its own. Google recrawls small ecommerce sites slowly, and a page that returns 200 with no clear removal signal stays indexed. A 410 or a redirect gets acted on at the next crawl; doing nothing means the listing lingers as long as Google feels like keeping it.

Should I 301 redirect or 410 a discontinued WooCommerce product?

301 if there is a genuinely close replacement or a relevant category page that serves the same search intent. 410 if there is nothing equivalent, because a 410 tells Google the page is gone deliberately and gets it dropped faster than a 404. Never redirect everything to the homepage.

Does the Search Console removals tool permanently remove a page?

No. It hides the URL from results for about six months, then the page comes back if it still returns 200 and is indexable. It is a stopgap for urgent cases, not a fix. The permanent removal has to come from the page itself: a 410, a redirect, or noindex.

Will marking a product OutOfStock in schema remove it from Google?

Not from organic search. Offer availability set to OutOfStock keeps your rich result honest and stops Shopping surfaces showing it as buyable, but the blue-link listing stays. It is the right signal for temporarily unavailable items, not a removal mechanism.

About the author

Jordan Bee builds automation for UK online retailers at GlideOps. In June 2026 he manually audited 135 UK online shops, finding 4 in 10 showing sold-out products still live and ranking on Google, research that underpins these guides and the free dead-listing checker. He has built stock-sync systems covering 91,000+ products for UK retailers.

Find every dead listing on your store in minutes

The free checker scans your live store and lists every product that's out of stock but still public, so you can work the decision tree on real URLs instead of guessing, no changes made.

Run the free stock checker →