A few months ago, we audited the catalog of an e-commerce site with around 4,000 items. Nice site, good traffic, serious team. And yet: 340 broken listings, 80 of them permanently discontinued, left there with no redirection, no message, no alternative. Some had accumulated inbound links from comparators. Others had held positions on long-tail queries for two years. All this, slowly, invisibly melting away. The loss wasn’t spectacular. It was silent. It’s often the worst kind.
Here’s the real problem with broken plugs: they don’t make any noise. Nobody gets an alert. The Googlebot crawler passes by, finds a page that responds 200 but displays “unavailable”, and ends up treating it as a dead end. The teams have other things to do. The form is waiting. And all the while, the crawl budget evaporates on useless URLs, the internal mesh scatters to dead ends, and users bounce off.
So, in concrete terms, what do we do?
Au sommaire de cet article :
First question to ask: is it temporary or permanent?
It seems obvious, but many teams don’t have this information in real time. ERP and CMS don’t talk to each other, or the “expected return date” field doesn’t exist. The first job is to build this bridge. Without it, all the management rules you’re going to create won’t work.
Once you know, the logic diverges radically.
If it’s temporary – keep the URL. Don’t touch the title, don’t touch the H1, don’t change the slug. That would be absurd: you’ve potentially worked for months to position this page on specific queries. You’re not going to throw it away because the supplier is behind schedule. What you do is add a banner at the top of the page – clear, honest, not a gray micro-typography that nobody reads – that says: unavailable, expected back by such-and-such a date, leave your e-mail to be alerted first. This last point is underestimated. A well-placed reminder form, connected to your emailing tool, turns a lost visit into a deferred sale. And people who sign up for this type of alert buy. The conversion rate on a “back in stock” notification is systematically higher than the site average, because intent is at its highest.
What you add below the banner is a block of alternatives. Not a mosaic of products randomly generated by a reco algorithm that pulls out anything. Selected alternatives: same use, comparable price range, available now. Two or three. Each with a concrete reason to go for it – not “similar item”, but “20% greater autonomy” or “delivery possible within 48 hours”. The nuance changes everything in the click rate.
Breaking up for good is a decision, not an oversight
This is where things get interesting – and where most sites fail through inaction.
When a product is discontinued, you have two options. And contrary to what we often read, neither is universally good. It all depends on one thing: is this URL still being searched for?
If not – if search volume has dropped to zero, if the page no longer generates any Search Console impressions, if it never really existed in the top 20 – delete it and make a 301 to the semantically closest parent category. Not to home. Not to another product that may itself disappear in six months’ time, creating a chain of redirects you’ll forget. The category. This is the hub that lasts, this is where the real strategic keyword lives, this is where you want to consolidate authority.
If so – if people are still looking for that specific model, that exact part number, that product name that no longer exists in the catalog but has a real reputation – don’t delete it. Keep the indexed page, but remove it from your internal listings: categories, internal site search, facets. A legacy=true field in WooCommerce, a metafield in Shopify, depending on your CMS. The URL remains visible to Google, it responds 200, it’s enriched with content that explains the shutdown and suggests successors – but it doesn’t pollute your active catalog. This is the distinction that Google itself suggests: a well-tagged “Discontinued” page in JSON-LD with ItemAvailability: Discontinued is treated differently from a page that responds 200 but looks half-abandoned. Schema.org values for availability are not just a technical detail: they align what the user sees, what the engine reads, and what your product feed transmits if you’re on Shopping.
An often overlooked point: customer reviews. If a discontinued listing has 40 reviews, keep them visible. Social proof doesn’t have an expiration date on a “this product has been replaced by” page. It reassures, it lends credibility to the alternative you’re offering, it anchors trust in the brand rather than in the SKU.
What it does to your architecture, and why it’s the real deal
People often talk about “losing traffic” on a broken listing. This is true. But what is less often measured is the systemic effect on the pages that count.
Every internal link that points to a dead or semi-dead URL dilutes the popularity that should be flowing to your categories, your guides, your bestsellers. It’s mechanical. Google crawls, tracks links, distributes PageRank. If 15% of your internal links end up on unmanaged, broken records, your strategic pages will capture less authority than if you had redirected or cleaned them up. This is not a theory. It’s what we systematically observe in audits of sites that have allowed this type of technical debt to accumulate.
Correction is easy to conceptualize, less easy to industrialize. You need a workflow: automatic detection of new “out of stock” statuses, triggering of a task assigned to someone (not just a ticket waiting), decision within 48 hours maximum (temporary or definitive), action in CMS, update of sitemap and product feed if concerned, verification in Search Console two weeks later. This cycle, mapped out in even a minimalist dashboard, changes the nature of the problem: you move from chaotic reactive management to predictable governance.
Implementation: what really works
On WooCommerce, the minimum viable is a hook on the “out of stock” status that triggers: display of the banner + block of alternatives + activation of the alert form. If you have a “Back In Stock Notifier” plugin, cable it to Mailchimp, Klaviyo or Brevo depending on your stack. On Shopify, the status and availability metafields are your allies, combined with a conditional template that changes the layout according to the product’s status.
For JSON-LD, the rule is simple: what the user sees must be aligned with what’s in the markup, and with what’s in the Google Merchant Center feed if you use it. A product displayed as “available” on the HTML side, but OutOfStock in the JSON-LD, is an inconsistency that crawlers notice. On the other hand, a product displayed as “broken” but still InStock in the feed is a Merchant Center disapproval that arrives unannounced.
Values to know : InStock OutOfStock , BackOrder (deferred order, future delivery), Discontinued. They are documented on Schema.org and in the Google documentation for Product snippets. These are not cosmetic options – they impact display in rich results and qualification in Shopping.
What it says about a site’s maturity
In fact, the way in which a site manages its breaks is a good indicator of its overall editorial and technical maturity. Sites that have a clear process on this subject generally also have a process for internal linking, redirects and content updates. It’s no coincidence. It’s the same discipline.
A well-managed discontinued listing is a page that continues to work for you even when the product is no longer profitable. It keeps traffic in the ecosystem, directs intent towards a possible sale, and consolidates the pages that really make your numbers. Conversely, an abandoned listing is a leak. Discreet, continuous, and very difficult to quantify a posteriori.
Might as well seal it properly.
Reference sources: Google for Developers – Product structured data (availability values and Product snippets); Schema.org – ItemAvailability; Google Merchant Center – availability attributes and feed/page consistency rules.