Skip to content

field note

Out of stock products and SEO: delete, redirect, or leave it live

Ecommerce

Shahid AliSeptember 5, 2026all posts

Out of stock products and SEO: delete, redirect, or leave it live

Out of stock products and SEO comes down to one decision made over and over: this product is gone, so what happens to its URL? Delete it, redirect it, or leave it sitting there saying “unavailable”?

Every article on this gives you the same three options and stops. What none of them tell you is how to check whether the choice you made landed the way you intended, and that is the part I actually spend time on. Each of these decisions leaves a different, predictable fingerprint in the Search Console Page indexing report, which means the report is how you audit your own inventory rules.

Do out of stock products hurt SEO?

They can, and the mechanism is worth understanding before you touch anything, because it is not a penalty. It is a misclassification.

John Mueller described it in a Search Central office hours session, transcribed by Search Engine Journal: “when it comes to the normal search results, it can happen that we when see that something is out of stock, we will assume it’s more like a soft 404 error, where we will drop that URL from the search results as well. Theoretically, it could affect the visibility in search if something goes out of stock.”

That is a spoken hangout as transcribed by a third party rather than Google documentation, so treat the exact wording as reported rather than official. The underlying behaviour, though, is documented, and it is the important half. Google’s HTTP status codes doc says: “Google considers the content for processing (for example, in the case of Google Search, for indexing). If the content suggests an error for Google Search, an empty page or an error message, Search Console will show a soft 404 error.”

So the trigger is the content, not the status code. A page returning a perfectly healthy 200 gets classified on what it says. Strip a product page down to a size chart and the words “this item is currently unavailable” and you have built something that reads like an error page, and it gets treated as one. That is a soft 404 in Search Console, and the URL comes out of the index.

Should I delete out of stock product pages?

Not if the product is coming back. This is the split that decides everything else, and it is worth being honest with yourself about which one you are in:

Temporarily out of stock. Keep the URL, keep the page, keep the content. Your job is to make sure it does not read as an error. Google’s Search Console documentation gives the fix directly in its soft 404 definition: “We recommend returning a 404 response code for truly ‘not found’ pages and adding more information on the page to let us know that it is not a soft 404.” Adding more information is the instruction. Full description, specifications, images, reviews, and a clear restock or notify-me path. The availability line is one element on a substantial page, not the whole page.

Permanently discontinued. Now you choose between redirecting to a genuine replacement and removing the URL, and both are legitimate.

Mark it up honestly either way. The ItemAvailability list on schema.org has nine values, and Discontinued is one of them, sitting there almost entirely unused next to the OutOfStock that everyone reaches for. If a product is never coming back and you are keeping the page, that is the accurate value.

What each decision looks like in the Page indexing report What you do with the URL Where it lands
<text x="0" y="104" fill="var(--ink)">Leave live, 200, thin "unavailable" shell</text>
<text x="560" y="104" fill="var(--volt)" font-weight="700">Soft 404</text>
<line x1="0" y1="118" x2="960" y2="118" stroke="var(--hairline)" stroke-width="1"/>

<text x="0" y="150" fill="var(--ink)">Leave live, 200, full product content</text>
<text x="560" y="150" fill="var(--ink)" font-weight="700">Indexed</text>
<text x="660" y="150" fill="var(--muted)">or drifts to Crawled, not indexed</text>
<line x1="0" y1="164" x2="960" y2="164" stroke="var(--hairline)" stroke-width="1"/>

<text x="0" y="196" fill="var(--ink)">301 to a genuine replacement product</text>
<text x="560" y="196" fill="var(--ink)" font-weight="700">Page with redirect</text>
<text x="720" y="196" fill="var(--muted)">expected, not an error</text>
<line x1="0" y1="210" x2="960" y2="210" stroke="var(--hairline)" stroke-width="1"/>

<text x="0" y="242" fill="var(--ink)">301 to a page saying "no longer available"</text>
<text x="560" y="242" fill="var(--volt)" font-weight="700">Soft 404</text>
<text x="660" y="242" fill="var(--muted)">the redirect was correct, the copy was not</text>
<line x1="0" y1="256" x2="960" y2="256" stroke="var(--hairline)" stroke-width="1"/>

<text x="0" y="288" fill="var(--ink)">301 to the homepage or a vague category</text>
<text x="560" y="288" fill="var(--volt)" font-weight="700">Soft 404</text>
<text x="660" y="288" fill="var(--muted)">relevance, so the redirect is ignored</text>
<line x1="0" y1="302" x2="960" y2="302" stroke="var(--hairline)" stroke-width="1"/>

<text x="0" y="334" fill="var(--ink)">Delete it, 404 or 410</text>
<text x="560" y="334" fill="var(--ink)" font-weight="700">Not found (404)</text>
<text x="700" y="334" fill="var(--muted)">persists for months</text>
<line x1="0" y1="348" x2="960" y2="348" stroke="var(--hairline)" stroke-width="1"/>

<text x="0" y="380" fill="var(--ink)">Add a noindex tag</text>
<text x="560" y="380" fill="var(--ink)" font-weight="700">Excluded by 'noindex' tag</text>
<line x1="0" y1="394" x2="960" y2="394" stroke="var(--hairline)" stroke-width="2"/>
Three of the seven produce a soft 404, and two of those three are redirects someone set up on purpose. Google treats all 4xx codes except 429 identically, so 404 and 410 land in the same place. Status definitions quoted from the Page indexing report documentation. Status code handling from Google's HTTP status codes documentation.

Is it better to 404 or 301 a discontinued product?

Redirect when there is a real replacement. Return a 404 when there is not.

Google’s wording on 404s is more relaxed than most people expect: “404 responses are not necessarily a problem, if the page has been removed without any replacement. If your page has moved, use a 301 redirect to the new location.” A wall of not found (404) rows after you clear out a season of dead SKUs is the report working correctly, not a fault to fix.

The trap is the redirect that is technically perfect and still fails. Someone 301s an expired product to a relevant alternative, and the destination page opens with a banner explaining that the original product is no longer available. Googlebot follows the redirect, reads the destination, sees unavailability messaging, and concludes the whole thing is a soft 404. Mueller fielded exactly this in a Webmaster Central hangout, from a publisher whose expired product pages redirected to a relevant alternate carrying that message. If you are redirecting, the destination has to look like a product you can buy, not an apology.

Redirecting everything to the homepage fails for a plainer reason. There is no relationship between the old URL and the target, so Google ignores the redirect and treats the URL as a soft 404 anyway. You get the report noise without the consolidation.

Should I use 404 or 410 for a removed product?

It makes no difference to Google, and this is worth saying plainly because the opposite advice is common.

Google’s documentation: “All 4xx errors, except 429, are treated the same: Google crawlers inform the next processing system that the content doesn’t exist. In the case of Google Search, the indexing pipeline removes the URL from the index if it was previously indexed.”

410 is the more honest signal to send to every other consumer of your site, and I still prefer it for intentional removals. Just do not expect it to speed anything up at Google, and do not let a platform that cannot serve a 410, which includes most hosted store builders, become a reason to delay a cleanup.

While you are deciding, one myth to retire: the Removals tool is not a deletion method. Google says “Requests made in the Removals tool last for about 6 months”, and separately warns “Don’t use robots.txt as a way to block your page.” Six months of hiding a URL is not the same as removing it, and blocking the crawl stops Google seeing the 404 that would have removed it properly.

Why is Google showing my product pages as soft 404?

Because something on the page or at the end of the redirect reads as an error. To confirm which, inspect the URL, run the live test, and open the rendered screenshot. If what comes back is a stripped shell with an unavailability notice where the product used to be, you have your answer without guessing.

One thing to watch while you do it. The live test in URL Inspection follows redirects and tests the final URL without telling you it followed one. So you can inspect a discontinued product URL, see a healthy indexed page, and be looking at the destination rather than the URL you typed. That catches people out constantly on redirect audits, and it is the same disagreement between tools that the report and the live test exist on either side of.

The quiet one nobody notices

The status that costs the most on a store is not soft 404. It is crawled, currently not indexed, where out-of-stock pages that are not bad enough to be classified as errors and not useful enough to earn a slot simply accumulate. Google’s definition is “The page was crawled by Google but not indexed. It may or may not be indexed in the future; no need to resubmit this URL for crawling”, and that last clause gets read as “nothing to do here”. It raises no error, triggers no alert, and quietly grows.

What I check first

I do not audit this product by product. I export the Page indexing report by status, then join it against the store’s own product feed on the availability column, and the mismatches are the entire work queue. A URL that is OutOfStock in the feed and Soft 404 in Search Console is a page that needs content, not a page that needs a redirect. A URL that is Discontinued in the feed and still Indexed is a decision nobody has made yet.

The single most useful reading habit is to watch which status moves after an inventory purge. A spike in Page with redirect is healthy and means your replacements are being found. A spike in page with redirect alongside a spike in Soft 404 means your redirect destinations are wrong, or they are carrying unavailability copy. Same action, two different report outcomes, and nothing except the report distinguishes them.

Because Search Console updates on its own schedule, I check the URLs directly rather than waiting on it, which is why I built the bulk URL inspection tool on this site. Paste the dead SKUs, get their real status back in one pass, and you know within minutes whether last week’s cleanup did what you intended.

Two platform notes from audits, since they change what is even possible:

  • On Shopify you cannot serve a 410, and deleting a product versus archiving it versus setting it to draft produce different results at the URL. If products are dropping out after they sell out rather than after you delete them, that is a different problem, and getting Shopify products indexed is the wider picture.
  • On WooCommerce, out of stock is a stock status rather than a post status. Turning on the option to hide out-of-stock items from the catalogue pulls them off every category page at once, which removes their internal links while leaving the URLs live and in the sitemap. The pages do not disappear, they just stop being linked to, and then they start drifting into crawled and not indexed.

Sources