Redirects uploaded successfully — but old URLs still return "page not found"
The CSV file uploaded. The rows appear in your Shopify admin under Online Store > Navigation > URL Redirects. But when you visit one of the old URLs, it still returns a 404 instead of going where you expect. No error was thrown. Shopify reported no failures. Here are the three reasons this happens and how to check for each one.
Reason 1 — the source page is still live (the most common cause)
Shopify's redirect system only kicks in when the source URL produces a 404 — a page-not-found response. If the path in your "Redirect from" column still points to a real, active page, product, or collection in your store, Shopify serves that live content and the redirect rule is never used. It sits in your admin doing nothing.
How to check: Open an incognito browser window (so you're not logged into Shopify) and visit the exact URL that should be redirecting. If you land on a working page instead of a 404, the source is still live. To make the redirect work, you need to delete or unpublish the content at that path. Once Shopify starts returning a 404 for that URL, the redirect activates automatically — no re-upload required.
Reason 2 — absolute URLs in the "Redirect from" column
The "Redirect from" field expects a path — just the portion of the URL that comes
after your domain, starting with a forward slash. For example: /old-product-name
or /collections/summer-2025.
If your spreadsheet had full URLs in that column — starting with https:// or
http:// — Shopify strips the domain during import and attempts to save just the
path. Sometimes this conversion works cleanly. Other times it produces a mangled path that
doesn't match anything, so the redirect silently does nothing. To check: open one of your
redirect rows in the Shopify admin and look at the "Redirect from" value. If it starts with
anything other than a forward slash, that redirect won't fire.
Reason 3 — chained redirects dropped without warning
If your spreadsheet has a row where the destination URL of one redirect is also the source URL of another redirect — a chain — Shopify identifies those rows and silently drops them from the import. The import email may mention it, but the UI gives no clear signal and the row just disappears. The practical symptom: a redirect you're confident was in the file simply doesn't appear in your admin after the upload.
How to check: Search for the "Redirect from" path in your admin redirects list. If the row isn't there at all, it was a chained redirect that got dropped. Fix by collapsing the chain in your spreadsheet — if A redirects to B and B redirects to C, replace both with a single row redirecting A directly to C — then re-upload just those rows.
How to verify a redirect is actually working
After checking and fixing any of the above, confirm a redirect is live by using
curl -I in a terminal or a browser developer tools Network panel. A working
redirect returns a 301 status code with a Location header pointing
to the destination. A redirect that's listed in your admin but not firing will return a
404 — or in rare cases a 200 if the source is still live.
To avoid building a redirect file with chains or absolute-URL formatting problems in the first place, use the free tool below. It reads your spreadsheet, flags any rows with chain patterns or absolute-URL columns, and gives you a plain-language change ledger before producing the import file.