Shopify Discontinued Product 404s Are Not Always an SEO Emergency

By Milan Dhameliya · · 9 min read

Deleting one Shopify product can create several Search Console 404s because Google may have indexed collection-specific product URLs as well as the canonical /products/ URL. The fix is not to redirect everything to the homepage. Here is the decision rule: redirect only URLs with a close replacement or real demand, leave honest 404s when the product is truly gone, and remember that Shopify redirects only work after the old URL is actually broken.

A discontinued Shopify product that starts showing as Not found (404) in Google Search Console is not automatically an SEO emergency. It is a lifecycle signal: Google found a URL that used to exist, tried it again, and the store correctly said the page is gone. The mistake is treating every 404 as damage. Some discontinued products deserve a precise 301 redirect. Some should stay a clean 404. The expensive middle is where merchants bulk-redirect hundreds of old product URLs to the homepage and teach Google that the replacement is useless.

The Shopify-specific trap is that one product can create more than one URL in Search Console. Your canonical product may be /products/classic-runner, but Google can also discover collection-context URLs such as /collections/running-shoes/products/classic-runner from old theme links, campaign links, breadcrumbs, feeds, or external backlinks. When the product is deleted or removed from the Online Store channel, all of those historical URLs can start reporting as 404. That looks like one product created five errors. In practice, it created five old entry points.

Why this happens on Shopify

Shopify's own URL redirect documentation is blunt about the first rule: a redirect only works from a broken URL. If the old URL still loads a valid product, collection, page, or blog article, Shopify serves that resource and ignores the redirect. That means you cannot use the native redirect table to override an active product URL while the product is still published. You need to make the source URL return 404 first by deleting it, setting the product to Draft, or removing it from the Online Store sales channel.

There are also path limits merchants only discover during cleanup. Shopify says you cannot redirect fixed paths such as /products, /collections, and /collections/all, and it specifically calls out collection tag-filtering URLs such as /collections/collection-name/tag-name as paths that cannot be redirected even when they do not match products. That matters when Search Console exports include a mix of discontinued product URLs, old tag URLs, filter paths, and query-string variants. They do not all belong in the same redirect file.

The decision rule: redirect intent, not status codes

Before adding a redirect, ask one question: is there a page that satisfies the same shopper intent? If a discontinued shoe has a newer model in the same category, redirect the old product URL to that replacement. If a seasonal collection has moved from fall to winter, redirect the old collection to the current equivalent. If the product was a one-off, had no backlinks, and no current substitute exists, let the 404 stand and remove internal links to it.

Google's faceted navigation guidance makes the same principle visible from another angle: when a URL combination has no results, the correct response can be a real 404 under that URL, not a redirect to a generic not-found page or a soft substitute. The same logic applies to discontinued products. A clean 404 is honest. A redirect to a barely related category just to make Search Console quieter is a soft-404 risk and a worse customer experience.

A practical triage workflow

  1. Export the affected URLs from Search Console. Go to Pages, open Not found (404), and export the examples. Do not work from the count alone; the examples tell you whether you are dealing with canonical product URLs, collection-context product URLs, old tag paths, app proxy paths, or query-string noise.
  2. Normalize Shopify URL variants. Group /products/handle and /collections/*/products/handle together so one discontinued product becomes one decision, not seven separate panic tickets.
  3. Check demand before redirecting. Prioritize URLs with backlinks, historical organic clicks, paid or email campaign history, or a clear replacement product. Low-value URLs with no replacement can remain 404.
  4. Remove internal links first. Search the theme, menus, blog content, metafields, and collection descriptions for the discontinued handle. A redirect fixes visitors who still arrive; it should not become the store's permanent internal linking system.
  5. Create precise redirects only where the replacement matches. Product to replacement product is best. Product to tightly relevant collection is acceptable. Product to homepage is usually a last resort.

How to find every old path for one product

Start with the canonical handle. If the old product was classic-runner, group every URL containing that handle before deciding the destination:

# Search Console export saved as gsc-404s.csv
rg -n "/products/classic-runner|/collections/.*/products/classic-runner" gsc-404s.csv

In a theme repository, look for hard-coded links that keep reintroducing the old URL:

rg -n "classic-runner|/collections/.*/products/" layout sections snippets templates assets config

If you find old collection-context product links, fix the source template to use the product's canonical URL unless there is a deliberate reason to preserve collection context:

{% comment %}
Prefer the canonical product URL for durable internal links.
Collection-context URLs can live forever in crawler data after a product is removed.
{% endcomment %}
{{ product.title }}

Creating the redirect in Shopify

Use Content > Menus > View URL Redirects > Create URL redirect. Put only the path in Redirect from, not the whole domain, and use a relative path for the target when staying on the same store:

Redirect from: /products/classic-runner
Redirect to:   /products/nova-runner

For collection-context URLs that Search Console has actually reported and that have a useful destination, add those explicitly too:

Redirect from: /collections/running-shoes/products/classic-runner
Redirect to:   /products/nova-runner

That second redirect is not always necessary, but it is worth doing when the old URL had links, clicks, or recurring crawl activity. Shopify's admin also supports CSV import for larger batches, but the same quality rule applies: a bulk redirect file should be a mapping document, not a dumping ground for every historical URL on the domain.

The Shopify Flow pattern for repeat discontinuations

If the catalog discontinues products every week, build a review queue instead of waiting for Search Console to yell a month later. Shopify Flow can create redirects, but the trigger timing matters. A "product deleted" automation is often too late to choose the best replacement because the merchandising context has already disappeared. A better workflow starts when a product is tagged discontinued or when every variant is out of stock and the team marks it as permanently retired.

Trigger: Product tagged "discontinued"
Conditions:
- Product is unavailable for restock
- Replacement product metafield is not blank
Action:
- Create URL redirect from /products/{{ product.handle }}
- Redirect to {{ product.metafields.custom.replacement_product.value.url }}
- Add task/comment for SEO review of collection-context URLs

The important detail is the replacement metafield. Automation without a human-selected substitute tends to create weak redirects. Let the merchandising team pick the destination, then let Flow remove the repetitive admin work.

What to do with market subfolders

Shopify's redirect documentation says a redirect from the primary product path can apply across market or language subfolders, so /products/blue-t-shirt can also catch /en-ca/products/blue-t-shirt and send the shopper to the equivalent subfolder destination. That is useful, but do not assume it solves every international case. If the replacement differs by market, or the discontinued product existed only in one region, create and test individual subfolder redirects so Canadian, UK, EU, and US shoppers land on the right page.

After the redirect is live, test the exact exported URLs with curl -I and confirm the final Location header. Browser testing alone can lie because 301 redirects are cached by browsers and search engines.

When a 404 is the right answer

Leave a true 404 when there is no close replacement, no meaningful traffic, and no useful page that answers the same intent. Then make the 404 useful: include search, top collections, customer support links, and a path back to current products. The goal is not to hide every missing URL; it is to stop customers and crawlers from wasting time.

There is a simple way to say this to stakeholders: redirect valuable demand, remove bad internal links, and let obsolete URLs die cleanly. Search Console will keep showing old examples for a while. That is normal. You are not trying to make the report empty overnight; you are trying to make every indexed and internally linked path tell the truth.

Technical checklist

SEO checklist

When to bring in a Shopify developer

If discontinued products are creating hundreds of URLs, the fix is usually a small system: a replacement-product metafield, a Flow or Admin API workflow, a redirect CSV review step, and a theme cleanup pass that stops collection-context URLs from being amplified internally. That is exactly the sort of Shopify SEO plumbing Code Kaarigari builds for stores that are growing faster than manual admin work can keep up.

Start with our Shopify SEO and development services, review the kind of operational cleanup we handle in our project work, keep reading practical Shopify fixes on the blog, or contact Code Kaarigari when discontinued products have turned into a recurring Search Console mess.

Sources reviewed