Ecommerce catalogues change constantly. Products sell out, come back, get replaced by a new version, change names, move collections or disappear for good. Every one of those changes affects a URL, and every URL might be linked from somewhere: your own homepage banner, a collection page, a blog post, an email campaign, a supplier's site, a Pinterest pin, a Google Shopping listing, or a customer's bookmark.
Handle those changes badly and you get two kinds of loss:
- Shoppers hit dead ends. Someone clicks "Shop the look" in last month's email and lands on a "Page not found". That's a lost sale, and they may not come back.
- Search visibility leaks away. Product pages that ranked drop out of the index, and links pointing at them stop helping you.
Here's a practical decision guide for each situation, based on what Google has actually said, and a routine to catch broken product links before your customers do.
The four product URL situations
1. Temporarily out of stock (it's coming back)
Keep the page live, returning 200, and say clearly that it's out of stock.
- Show the status prominently with an expected restock date if you know it.
- Offer a "notify me when available" option and related in-stock alternatives.
- Keep the product in your structured data, with availability set to out of stock. Google's Product structured data supports
https://schema.org/OutOfStockand related values such asPreOrderandBackOrder(Product snippet structured data). Most ecommerce platforms update this automatically from inventory. Check yours does. - If you use Merchant Center, keep the feed's availability attribute in sync.
Google's John Mueller has said that sites can handle temporarily unavailable products in different ways (marking them out of stock, using a 404, or adding noindex) and that "all of those can work for search", including the approach of keeping the page as a 200 marked out of stock and making it a 404 later if the product doesn't return (Google SEO office hours, June 18, 2021). For most stores, keeping the page live is the most customer-friendly option, because people who arrive can sign up for a restock alert instead of hitting an error.
2. Permanently discontinued, with no direct replacement
Let the URL return a real 404 or 410, and remove internal links to it.
Google's Search Console help is direct: "If you have permanently deleted content without intending to replace it with newer, related content, let the old URL return a 404 or 410." It adds that Google currently treats 410 the same as 404 (404 errors).
Make the 404 page useful: search, top categories and bestsellers. You can return a 404 status code while showing whatever helpful content you like.
Small, high-effort catalogues are an exception. In a video on Google's official Search Central (formerly Google Webmasters) channel, Google suggested that for a handful of handmade, high-effort products it can be worth keeping the page and showing related items, while for larger catalogues with hundreds or thousands of products, returning a 404 for truly gone products is reasonable (What should sites do with pages for products that are no longer available?). If you keep the page, make it obvious the item is no longer available and show alternatives prominently.
3. Replaced by a new version or a close equivalent
301-redirect the old URL to the replacement product.
"Trail Runner 3" replaced by "Trail Runner 4" is a genuine successor, so a permanent redirect sends shoppers and search signals to the right place. Google's redirect documentation describes permanent redirects (301, 308) as a signal that the target should be shown in search results (Redirects and Google Search).
Redirect only to something a shopper looking for the old product would actually want. Redirecting to a related category can be reasonable when the category is clearly the right next step. Redirecting all discontinued products to the homepage is not.
4. URL changed (same product, new handle or slug)
Always 301 the old URL to the new one, in a single hop.
This is the most avoidable product 404. It happens when someone edits a product title and the platform regenerates the URL handle, or during a migration when URL patterns change. Most platforms have a redirect tool: Shopify's is under Content → Menus → View URL redirects, and redirects "start working immediately" (Shopify Help: URL redirects). Get in the habit of checking for a redirect every time a product URL changes.
The mistake to avoid: homepage catch-alls
Some stores, or apps installed on them, redirect every missing product URL to the homepage. It looks tidy but it's a known problem. Google's help page says that "redirecting users to another page, such as the homepage, instead of returning a 404" creates soft 404s, which "can be confusing to both users and search engines" (404 errors). A shopper who clicked a specific product and lands on your homepage has no idea what happened.
If you have a "redirect all 404s" setting or app, review it.
Where broken product links hide
The product page is only half the story. The links pointing to products break just as often:
- Homepage banners and featured products pointing at items that sold out and were archived
- Collection and category pages with manually added links
- Blog posts and buying guides ("our 10 favourite…") written months ago
- Navigation menus with hand-picked product links
- Email campaigns and automations, such as abandoned-cart, win-back and welcome sequences, with hard-coded product URLs
- Social posts, pins and influencer links you can't edit, but whose targets you can redirect
- Product images referencing deleted files, leaving broken images on otherwise working pages
Fix your own links at the source. For links you can't edit (old emails, social posts, other sites), the redirect decisions above are what protect you.
A routine that catches problems early
Daily: automated crawl
Crawl the storefront daily for:
- Internal links returning 404, especially from the homepage, menus and collections
- Missing product and banner images
- Redirect chains (old handle → older handle → current)
- Links to cart and checkout URLs that fail
Use read-only crawling only. A crawler that clicks "Add to cart" or submits forms on a live store creates junk carts and orders.
Weekly: catalogue changes review
Before or after any batch of catalogue changes (seasonal range swaps, discontinued lines, renamed products):
- Export the list of product URLs being removed or changed.
- Decide for each: keep live (out of stock), 404, or 301 to a successor.
- Add the redirects.
- Search your own content (blog, menus, banners, email templates) for links to those URLs and update them.
- Re-check the list after the change: each URL should be a single-hop 301, a deliberate 404, or a live page.
A quick list check from the command line:
while read -r url; do
curl -s -o /dev/null -w "%{http_code} %{num_redirects} %{url_effective} <- $url\n" -L "$url"
done < changed-products.txt
Monthly: Search Console
Check Indexing → Pages for spikes in "Not found (404)" and "Soft 404". A soft 404 spike after installing a redirect app is a strong hint that it's sending missing products to the homepage.
Images: the quieter version of the same problem
Missing images are the product-page equivalent of broken links: the page loads but looks broken, and shoppers trust it less. They usually come from deleted media files, CDN path changes in migrations, or theme changes that reference old image sizes. I covered finding and fixing them, including mixed-content images after an HTTPS change, in Mixed Content and Missing Images: A Practical Fix Guide for Store Owners. For the Shopify-specific steps to find and fix broken links, see How to Find and Fix Broken Links on a Shopify Store.
Decision table
| Situation | Status code | Internal links | Structured data / feed |
|---|---|---|---|
| Out of stock, returning | 200 (live page) | Keep; optionally de-emphasise | Availability = out of stock / backorder |
| Discontinued, no replacement | 404 or 410 | Remove | Remove product |
| Replaced by successor | 301 → successor | Update to successor | Successor's data |
| URL/handle changed | 301 → new URL (one hop) | Update to new URL | Update URL |
| Small catalogue, high-effort item gone | 200 with clear "no longer available" + alternatives, or 404 | Remove from listings | Remove offer |
Automating the daily check
The daily crawl is the step that most stores skip, and it's where most of the lost sales come from: a dead link on the homepage can sit there for weeks.
Disclosure: I build Uchik, which focuses on exactly this. Uchik crawls your store every day with read-only GET requests (it never adds to cart, submits forms or places orders) and emails a report of broken product, collection, cart and checkout links, missing images and redirect chains, each with the page and HTML element that caused it. The features page lists the checks, the sample report includes an ecommerce example, and the FAQ covers the limits: links added only by JavaScript, such as some app-injected recommendation widgets, may be missed. It isn't a Shopify or WooCommerce app; it checks your public pages from outside. You can sign up for free.
Checklist
- [ ] Out-of-stock products stay live with clear status and correct structured data
- [ ] Discontinued products with no replacement return 404/410
- [ ] Successor products get a single-hop 301
- [ ] Every handle/slug change gets a redirect
- [ ] No "redirect all 404s to homepage" setting or app
- [ ] Banners, menus, collections, blog posts and email templates updated after catalogue changes
- [ ] Daily read-only crawl for broken product links and images
- [ ] Monthly Search Console check for 404 and soft 404 spikes
Every product URL is a promise to someone who saved it, shared it or clicked it in an email. Keeping those promises is cheaper than winning those shoppers back.
Top comments (0)