DopaShiftGet a scoped price

Shopify redirects: how to map old URLs and avoid traffic loss

The short answer

Shopify redirects are one-to-one rules you create under Content > Menus > URL redirects, by hand or by CSV import. They only fire for URLs that return a 404, they can't use wildcards or patterns, and some paths such as /cart, /products and /collections/all are reserved. Standard plans allow up to 100,000 redirects and Shopify Plus allows 20,000,000, so for a migration you build a full one-to-one map and import it.

How Shopify URL redirects work

A Shopify redirect has two fields: “Redirect from”, which is the old path, and “Redirect to”, which is the destination. You create them in the admin under Content > Menus, then “View URL redirects” and “Create URL redirect”. They start working immediately.

Each redirect is an exact match. /mens/running-shoe.html sends visitors to /products/running-shoe and nothing else. There is no pattern matching, so a 5,000 product catalog means 5,000 rows, plus rows for categories, pages, posts and any old URLs with backlinks.

The destination can be a relative path on your store, such as /collections/shirts, or a full URL on another domain, such as https://www.example.com/collections/shirts. To redirect to the home page, enter /.

Redirects apply across the language and market subfolders created by Shopify’s international tools, and you can also create separate redirects per subfolder when a market needs a different destination.

CSV import for a migration

Nobody types 5,000 redirects. From the URL redirects page, click Import, add your CSV, upload it, check the review screen, then confirm. Shopify provides a sample CSV to copy the format from. The same page exports your existing redirects, which is useful for a backup before a bulk change.

Our process is to build the map in a spreadsheet with two columns, old path and new path, generate it from the old site crawl, validate it, then import in batches. Batching is not a Shopify rule, it’s a practical one: when a row fails you want to know which file it was in.

Before you import, run three checks on the file. No old path may still return 200 on the new store, because that redirect will silently not fire. No destination may itself be a redirect, because that creates a chain. No two rows may share the same old path.

Redirects only fire on 404s

Shopify’s rule is that you can redirect only from broken URLs. If the old path still loads a valid page on your Shopify store, the redirect won’t work. This matters when a handle on the new store matches an old path exactly.

What Shopify can’t redirect

Shopify’s Help Center lists the paths you can’t redirect from. These are the ones that catch migrations.

RuleDetailWhat to do instead
Reserved prefixesURLs beginning with /apps, /application, /cart, /carts, /orders, /services or /shopNothing. These paths belong to Shopify.
Fixed paths/products, /collections, /collections/all, /collections/vendors, /collections/typesLeave them. They are live store pages.
Collection tag URLs/collections/name/tag can’t be redirected even when no product has that tagCreate a real collection for the tag instead.
Live URLsA path that still loads a valid page won’t redirectChange the handle, or hide the product so the URL 404s.
Query stringsShopify says redirects with query strings might not work as expectedRedirect the base path and accept the parameters are dropped.
.html to the same pathYou can’t redirect /page.html to /pagePoint it at the real Shopify folder, such as /pages/page.

Two more behaviors are worth knowing. Shopify says redirects aren’t supported on customer account menus. And if you hide a product to make its old URL 404 and later set it back to visible, Shopify deletes the redirect automatically.

The query string rule hurts stores that ranked old filter URLs, such as /shoes?color=red. Shopify treats the path as /shoes, so every color lands on the same destination. If a specific filter earned real traffic, give it a collection of its own and redirect the base path there.

Limits we verified

As of October 2026, Shopify’s Help Center says you can create a maximum of 100,000 URL redirects unless your store is on the Plus plan, which allows up to 20,000,000. For most stores the standard limit is far more than a migration needs. A 20,000 SKU Magento store with categories, CMS pages and legacy campaign URLs rarely passes 40,000 rows.

Shopify also notes that the “Redirect Limit Exceeded” error some apps surface is an API error about too many server redirects in one request, not the 100,000 store limit.

There is no documented limit on the size of a single CSV import. We keep files to a few thousand rows anyway.

Have a crawl export of your old store? Send it over and we'll return a redirect map you can import.

Get a scoped price

Avoid chains and loops

A chain is a redirect to a URL that itself redirects. They build up over years: the 2019 URL redirects to the 2022 URL, which now redirects to the Shopify URL. Google’s crawlers follow up to 10 hops, but Google’s site move guidance says to keep chains to no more than 3 and fewer than 5, and to point each redirect straight at the final destination.

The fix is in the spreadsheet. Before import, resolve every destination to its final URL and write that as the target. If you are keeping an old domain that redirects at the domain level, remember that it adds a hop of its own before the path redirect runs.

A loop is a redirect whose destination eventually points back at its source. Shopify doesn’t stop you from creating one. Our pre-import validation flags any destination that also appears as a source.

One specific trap: a redirect from /404 to /. Shopify says it stops the theme editor from showing your 404 page. Don’t create it.

Monitoring 404s after launch

Redirects are only as good as the map, and the map is never complete on day one. For the first month, check the Pages report in Google Search Console for URLs flagged “Not found (404)” and add a redirect for each one the same day. Search Console lists the referring page for most of them, which tells you whether the broken link is yours to fix or someone else’s.

Your analytics tool is the second source. Look at page views where the title is “404 Not Found” or your theme’s equivalent, and sort by sessions. Those are the URLs real people are hitting.

Shopify caches 301s in browsers and search engines, so when you fix a wrong destination the old target may keep showing for some visitors until the cache clears. Get the map right before import and this rarely matters.

When you need an app, and why not a Function

Shopify Functions customize backend logic such as discounts, delivery options, payment options, cart validation and order routing. Shopify’s docs say Functions are never invoked directly by URL, so they can’t handle redirects. Don’t let anyone sell you a Function for this.

What you may want is a redirect app from the Shopify App Store. Shopify’s own Help Center suggests considering a third-party app when you have a large number of redirects. Apps add two things the admin doesn’t have: pattern or wildcard rules that match many old URLs at once, and automatic 404 logging inside the admin so you can create redirects from the list. For a one-time migration with a clean map, the built-in tool is enough. For a store with years of unpredictable legacy URLs, or one that changes handles often, an app earns its fee.

Redirecting the old domain

If you change domains, Shopify handles the domain level separately from path redirects. Connect the old domain to your Shopify store and set it as a redirect domain. Shopify’s domain settings describe the behavior as visitors being redirected to the primary domain when they enter the redirect domain in the address bar. Alias domains are different: they point to the store but don’t redirect to the primary domain, which would create duplicate content, so use a redirect domain for an old domain.

Once the old domain redirects to the primary domain, your path-level redirects run on the primary domain as normal. That is two hops for a visitor arriving on an old deep link, which is why we keep chains to that single pair and nothing more.

If the old domain isn’t hosted on Shopify at all, do the domain redirect at your DNS or hosting provider instead, pointing each old path to the matching Shopify URL where the provider supports it, or to the primary domain root where it doesn’t.

Frequently asked questions

Does Shopify support wildcard or regex redirects?

No. Each redirect is a single exact path to a single destination. You can use Liquid in the fields, but Shopify says it can't fully validate paths when Liquid is used. For pattern matching across thousands of URLs, you generate the rows in a spreadsheet and import them.

Are Shopify redirects 301 or 302?

Shopify URL redirects are permanent 301 redirects. Shopify notes that browsers and search engines cache them, so a redirect you delete can keep working for some visitors until the cache expires.

Why does my redirect not work?

The most common reason is that the old URL still loads a valid page. Shopify only redirects from URLs that return a 404. Other causes are a reserved path, a query string in the old URL, or an .html URL pointed at the same path without .html.

How many redirects can I import at once?

Shopify's Help Center gives a store-wide limit of 100,000 redirects on standard plans and 20,000,000 on Plus, but doesn't state a per-file limit for CSV imports. We import in batches of a few thousand rows so an error in one row is easy to find.

Planning your next step?

Tell us your version and target date. You'll get a fixed price within 2 business days.

Get a scoped price