# Shopify URL Redirects: How to Set Up 301 Redirects, Import Them via CSV, and Fix What Breaks

Source: https://digitalsprung.de/en/blog/shopify-url-redirects-guide
Language: en
Author: Werner Strauch
Published: 2026-10-10
Updated: 2026-10-10

> How to set up Shopify URL redirects one by one, via CSV import, or automatically. Covers every limitation (reserved paths, markets, query parameters) plus a CSV checker and troubleshooting tool.

**You set up Shopify URL redirects in your admin under Content → Menus → View URL redirects, either one at a time or by CSV import.** Shopify always creates a 301 redirect. But it only fires when there’s no page left at the old address. That one detail is behind most of the “my redirect isn’t working” threads in the Shopify Community.

Most guides on this topic show the click path (often the outdated one) and stop there. In practice, redirects fail elsewhere: on paths Shopify reserves, on query parameters from your old platform, on language subfolders, on chains that build up after the third rename. This guide covers all of those cases. You also get a CSV checker that cleans up your import file before you upload it, and a troubleshooting tool for the most common errors.

* * *

## What a URL redirect does in Shopify

A redirect automatically sends visitors and search engines from an old address to a new one. Anyone who opens `/old-mug` lands on `/products/blue-mug`. The server responds with status code 301 (“Moved Permanently”) and names the new target in the `Location` header.

Shopify handles redirects at the server level, before your theme loads. Visitors don’t notice any delay. You don’t need code or an `.htaccess` file for this. Shopify doesn’t give you access to the server configuration, so any tutorial built around `.htaccess` or PHP is useless for a Shopify store.

### 301 vs. 302: what the difference actually means

A 301 says: this page has moved permanently. A 302 says: this page is temporarily somewhere else. The common claim that a 302 “passes no link equity” is outdated. Google has confirmed several times that 30x redirects don’t lose PageRank.

The real difference is indexing. With a 301, Google replaces the old URL in its index with the new one. With a 302, Google may keep the old URL indexed, since it assumes the page will come back. For moves, renames, and deleted products, you always want a 301. Shopify makes that choice for you, because it only supports 301 natively.

| Status code | Meaning | Indexed URL over time | Use in Shopify |
| --- | --- | --- | --- |
| **301** | moved permanently | new URL | default for all redirects |
| **302 / 307** | temporary | usually the old URL | not native, only via apps or theme code |
| **Meta refresh / JavaScript** | redirect in the browser | unreliable | avoid |

* * *

## When you need a redirect and when you don’t

Every URL that had visitors, backlinks, or rankings needs a redirect once it stops existing. Typical triggers:

-   You change the handle of a product, collection, page, or blog post
-   You permanently delete a product or merge products
-   You restructure categories or rename collections
-   You move to Shopify from another platform
-   You change domains or merge several stores
-   You move blog posts from one blog to another (`/blogs/news/` → `/blogs/guides/`)

You don’t need a redirect for URLs with no traffic and no backlinks, like old filter or pagination pages. Those can return a 404. Google treats that as normal.

* * *

## Step by step: setting up redirects in Shopify

### Method 1: A single redirect in the admin

1.  In your Shopify admin, go to **Content → Menus**.
2.  Click **View URL redirects** in the top right.
3.  Select **Create URL redirect**.
4.  Under **Redirect from**, enter the old path, for example `/old-mug`.
5.  Under **Redirect to**, enter the target, for example `/products/blue-mug`.
6.  Save. The redirect is live immediately.

For the source, enter only the path with a leading slash, no domain. The target can be an internal path or a full external URL (`https://other-domain.com/page`).

If you’re following an older tutorial: this section used to live under **Online Store → Navigation**. Both refer to the same feature.

### Method 2: Automatically when you change a handle

When you change the URL of a product, collection, or page in the **Search engine listing** section, Shopify offers a **Create a URL redirect** checkbox. For pages, it’s checked by default. Leave it on. Shopify then creates the redirect from the old handle to the new one for you.

This automation has gaps you should know about:

-   **Bulk changes** made through product CSV imports, the bulk editor, apps, or the API don’t reliably create redirects. Check your redirect list after every bulk import.
-   **Translated handles**: According to reports in the Shopify Community, changing the URL of a translated version doesn’t create an automatic redirect.
-   **Moving blog posts**: If you move a post to a different blog, the path changes without a redirect being created.
-   **Deleted products** never get an automatic redirect.

### Method 3: CSV import for many redirects

Once you have more than about 20 redirects, importing is worth it:

1.  Go to **Content → Menus → View URL redirects**.
2.  Click **Import** and upload your CSV file.
3.  Shopify shows a preview. Review it and click **Import redirects**.
4.  Read the summary. Shopify lists every failed row individually.

**Export** gives you all existing redirects as a CSV at any time. Pull that export before every larger import, both as a backup and to spot conflicts.

* * *

## The exact CSV format for Shopify imports

Shopify only describes the format briefly. These are the rules:

| Rule | Correct | Wrong |
| --- | --- | --- |
| Header row | `Redirect from,Redirect to` | `From,To` or no header |
| Delimiter | comma | semicolon (default in some European Excel versions) |
| Source | `/old-mug` | `https://my-store.com/old-mug` or `old-mug` |
| Internal target | `/products/blue-mug` | `products/blue-mug` |
| External target | `https://other-domain.com/page` | `other-domain.com/page` |
| Encoding | UTF-8 | other encodings (special characters break) |
| Duplicates | each source exactly once | the same source with two targets |

A valid file looks like this:

```
Redirect from,Redirect to
/old-mug,/products/blue-mug
/category/mugs,/collections/mugs
/about-us.html,/pages/about-us
/blog/mug-care,/blogs/guides/mug-care
```

### Check your redirect CSV before importing

Paste the contents of your CSV file or load the example. The checker strips domains from the source, adds missing slashes, converts semicolons to commas, removes duplicates, self-redirects, wildcards, and reserved paths, and resolves chains to their final target. You can download the result as an import-ready file right away.

### Shopify Redirect CSV Checker

Paste your CSV, check it, download a clean file. Everything runs in your browser, no data is sent anywhere.

CSV content (Redirect from, Redirect to)

Load example Blank template (CSV)

Check CSV

* * *

## What Shopify redirects can’t do

Knowing these limits saves you most support tickets. Every point comes from the Shopify Help Center or can be verified with a simple test.

### Redirects only fire on a 404

This is the most important rule. If a product, collection, or page still exists at the old URL, Shopify ignores the redirect. In other words, you can’t redirect a live page to another page.

What that means in practice:

-   If you set a product to **draft** or hide a collection, the URL returns a 404. The redirect fires.
-   If you make the collection visible again later, the Help Center says **Shopify deletes the redirect** automatically. After seasonal collections, it’s worth checking your list.
-   To redirect an existing page, you first have to delete it or change its handle.

### Reserved and fixed paths

Shopify won’t accept redirects for these paths:

| Path | Why |
| --- | --- |
| `/` (homepage) | always exists |
| `/products`, `/collections`, `/collections/all` | fixed system pages |
| `/cart`, `/carts`, `/orders` | cart and orders |
| `/apps`, `/a/`, `/application`, `/services`, `/tools/`, `/community/` | reserved for apps and Shopify services |
| `/shop` | reserved prefix |
| `/collections/vendors`, `/collections/types` | automatic vendor and type pages |
| Collection URLs with tag filters (`/collections/mugs/red`) | filtered views |

If you want to get rid of `/collections/all`, for example, you have to replace the internal links pointing to it and design the page differently in your theme. A redirect isn’t an option here.

### No wildcards, no regex

Shopify matches every redirect exactly. A rule like “redirect everything under `/sale/*` to `/collections/sale`” doesn’t exist natively. You need one row per URL. For migrations with thousands of URLs, generate the list from a crawl or export instead of writing it by hand.

If you really need pattern rules, apps like Ablestar Link Manager or similar redirect apps can help. Check every app with `curl -I` to confirm it returns a real server-side 301. Some apps only redirect from the 404 page in the browser via JavaScript. For visitors that looks the same, but for Google it’s a weaker signal.

### Query parameters, .html, and capitalization

Legacy platforms like Magento, older WooCommerce setups, or custom PHP stores generate URLs like `/index.php?id=123` or `/product.html`. Shopify itself says redirects with query parameters “might not work as expected.” Extensions like `.html` generally work as a source. Still, test every variant after importing.

There’s no official statement on capitalization or trailing slashes (`/page/` vs. `/page`). If your old URLs used both variants, check both individually.

### Markets and language subfolders

This is where the Shopify Help Center contradicts itself. In one place, it says a redirect applies to all language and market subfolders. In another, it says redirects don’t automatically apply to all market subfolders. For stores with `/fr/`, `/en-ca/`, or `/es/`, that means: don’t rely on either statement.

Here’s the safe approach:

1.  Create the redirect for the default path (`/old-mug`).
2.  Open each language variant: `/fr/old-mug`, `/en-ca/old-mug`.
3.  If a variant doesn’t redirect, add a separate row for it (`/fr/old-mug` → `/fr/products/tasse-bleue`).
4.  If you changed translated handles, add the redirects for that language version yourself.

### Connected domains only

Redirects only apply to domains connected under **Settings → Domains**. If an old subdomain like `shop.company.com` still points to another server, the request never reaches Shopify. Connect the domain first. If you have several domains connected, Shopify redirects them to your primary domain by default.

* * *

## Shopify URL structure and SEO: the fixed prefixes

Shopify defines the URL structure for you. Every content type has a fixed prefix you can’t change:

| Content | URL pattern |
| --- | --- |
| Product | `/products/handle` |
| Collection | `/collections/handle` |
| Product within a collection | `/collections/handle/products/handle` |
| Page | `/pages/handle` |
| Blog post | `/blogs/blog-name/handle` |
| Blog index | `/blogs/blog-name` |

Nested categories in the URL, like `/women/shoes/sneakers`, don’t exist. When you migrate, a deep category tree becomes a flat one: `/women/shoes/sneakers` turns into `/collections/womens-sneakers`. That’s not an SEO disadvantage, as long as every old URL redirects cleanly.

The `/collections/x/products/y` variant shows up when visitors navigate to a product through a collection. Shopify sets a canonical tag on those pages pointing to `/products/y`. So always redirect to `/products/y`, never to the collection variant.

* * *

## Deleted and sold-out products: where should they redirect?

This is where many stores go wrong. Redirecting to the homepage looks like the easy fix, but Google often treats it as a soft 404. The visitor was looking for a mug and lands on a page that has nothing to do with mugs. This matrix helps you decide:

| Situation | Best solution |
| --- | --- |
| Temporarily sold out | Keep the product live, show “sold out,” offer a back-in-stock alert. **No redirect.** |
| Replaced by a newer model | 301 to the successor product |
| Permanently removed, a matching collection exists | 301 to the collection |
| Permanently removed, no replacement, has backlinks | 301 to the closest related collection or a guide |
| Permanently removed, no traffic or backlinks | Let it return a 404 |
| Seasonal product coming back next year | Keep it live or set it to draft, don’t delete it |

Setting a product to draft instead of deleting it keeps its data, reviews, and handle. When it comes back, it’s available at the same URL again. Keep in mind that any redirect from that handle then stops working, because the page exists again.

* * *

## Finding and fixing redirect chains and loops

A chain happens when A points to B and B points to C. It almost always builds up gradually: a product gets renamed in 2023, again in 2025, and a migration adds a third redirect. Every chain adds load time, and Google doesn’t follow an unlimited number of hops. A loop (A → B → A) produces the “too many redirects” error.

Clean up your redirects in four steps:

1.  **Export:** Under **View URL redirects → Export**, you get every entry as a CSV.
2.  **Check:** Paste the contents into the CSV checker above. It flags every chain and loop and rewrites targets to the final destination.
3.  **Delete old entries:** Filter the affected redirects in Shopify and delete them.
4.  **Re-import:** Upload the cleaned file.

Make it a habit to check existing redirects every time you rename something. The easiest way is the **Redirect to** filter in the list: search for the old handle and point every match to the new target.

* * *

## Testing your redirects

Test a sample after every import, and all important URLs after a migration. There are three ways to do it.

**In the browser:** Open the old URL in a private window. Browsers cache 301 redirects permanently, so a regular window may show an outdated result after a change.

**In the terminal:** This command shows the server’s actual response.

```
curl -I https://your-store.com/old-mug
```

The response should show `HTTP/2 301` and a `location` header pointing to the right target. If you see `200`, the old page still exists. A `404` means there’s no matching redirect.

**With a crawler:** For many URLs, load the list into a crawler’s list mode, such as Screaming Frog. It shows the status code, target, and any chains for every URL.

#### Why isn't my Shopify redirect working?

Pick what you're seeing and get the most likely cause with a fix.

What are you seeing? The redirect exists, but the old page still loads Shopify won't let me save the redirect I end up on an old or wrong target Only URLs with ?-parameters don't redirect It doesn't work in one language or market An old subdomain or second domain doesn't redirect The page loads forever or shows "too many redirects"

Most likely cause

* * *

## Automating redirects: Shopify Flow and the API

For stores with large catalogs, automation pays off. Hardly any guide mentions these two options.

### Shopify Flow: create a redirect when archiving

Shopify Flow has a dedicated **Create URL redirect** action with fields for the path and target, plus an option to overwrite an existing redirect. A typical workflow:

1.  **Trigger:** Product updated
2.  **Condition:** status is “archived”
3.  **Action:** redirect from `/products/{{product.handle}}` to a collection you define in the workflow, such as the category for that product type

Be careful with the “product deleted” template: it builds the path from the product title. If you customized your handles, the path will be wrong. Always use the handle, and prefer archiving over deleting, because not all product data is available after deletion.

### Admin API: imports and cleanup via script

Developers can manage redirects through the GraphQL Admin API (scope `write_online_store_navigation`):

| Task | Mutation |
| --- | --- |
| Create a single redirect | `urlRedirectCreate` |
| Update or delete a redirect | `urlRedirectUpdate`, `urlRedirectDelete` |
| Import a CSV via script | `urlRedirectImportCreate`, then `urlRedirectImportSubmit` |
| Delete many at once | `urlRedirectBulkDeleteByIds`, `urlRedirectBulkDeleteBySearch` |

* * *

## Redirect app or native feature?

For most stores, the native feature is enough. An app is worth it in three cases:

-   You need **pattern rules** because thousands of old URLs follow a fixed scheme
-   You want to **log 404 errors** to keep finding missing redirects
-   You need to redirect **query-parameter URLs** from a legacy platform

For bulk import and export, many agencies use Matrixify, which handles redirects together with products and collections. Before installing anything, compare current reviews in the Shopify App Store and test which status code the app returns.

* * *

## Monitoring after changes

Setting up a redirect is half the work. The other half is checking it afterward.

In Google Search Console, check the **Page indexing** report. Under “Not found (404),” you’ll see URLs Google still knows about that don’t have a redirect. Export the list, assign a target to every relevant URL, and import the missing redirects. After a migration, do this weekly. After that, a monthly check is enough.

Don’t delete redirects after a few months. Google recommends keeping them in place for at least a year after a site move. External links to old URLs often stick around much longer. As long as you stay under the limit, there’s no reason to remove working redirects.

### Shopify URL Redirects: Checklist for Every URL Change

From export to monitoring

0 / 15 completed Download Checklist (PDF)

Preparation

-   Export existing redirects as a CSV Content → Menus → View URL redirects → Export
    
-   List affected URLs with traffic and backlinks Search Console, Performance, Pages for the last 12 months
    
-   Pick a matching target for every URL Successor, collection, or guide, never the homepage by default
    

Import

-   Save the CSV with the header Redirect from, Redirect to and commas
    
-   Source without domain, with a leading slash
    
-   Run the CSV through the Redirect CSV Checker Remove chains, duplicates, and reserved paths
    
-   Delete, archive, or draft the old pages Redirects only fire on a 404
    
-   Import the CSV and read the error report
    

Testing

-   Spot-check with curl -I: status 301 and the right target
    
-   Test language and market subfolders individually /fr/, /en-ca/, /es/
    
-   Test query-parameter and .html URLs individually
    
-   For many URLs: crawl in list mode
    

Monitoring

-   Search Console: check 404s in the Page indexing report Weekly after migrations, monthly otherwise
    
-   Import any missing redirects
    
-   Keep redirects in place for at least a year
    

Reset

### Planning a migration, relaunch, or new structure?

We audit your existing URLs, build the complete redirect map, and check after go-live that you don't lose any rankings.

Request a redirect audit

[info@digitalsprung.de](mailto:info@digitalsprung.de)

* * *

## Redirects when migrating to Shopify

When you move from another platform, almost every URL changes at once. How complete your mapping is decides whether you keep your rankings. The process in short:

1.  Collect every old URL: crawl, sitemap, Search Console, and backlink data
2.  Map each URL to a Shopify URL using the fixed prefixes above
3.  Build, check, and import the CSV **before** you switch the domain
4.  After the domain switch, test every URL in list mode
5.  Watch for 404 errors in Search Console for 30 days and fill the gaps

For platform-specific details and a full URL mapping, see our [Shopware to Shopify migration guide](https://digitalsprung.de/blog/shopware-to-shopify-migration). If you’re only changing domains, our guide to [domain migration without losing rankings](https://digitalsprung.de/blog/domain-migration-guide-without-losing-rankings) walks you through it.

* * *

## Frequently asked questions about Shopify URL redirects

### How do I set up a 301 redirect in Shopify?

In your Shopify admin, go to Content → Menus and click View URL redirects. Select Create URL redirect, enter the old path under Redirect from (for example /old-page) and the new target under Redirect to. Once you save, the redirect is live immediately. Shopify creates a 301 automatically.

### Why isn't my Shopify redirect working?

The most common cause: a page still exists at the old URL. Shopify redirects only fire when the old address returns a 404. Other causes are reserved paths like /collections/all, query parameters in the URL, a language subfolder without its own redirect, a domain that isn't connected, or your browser cache. Test in a private window or with curl -I.

### How many redirects can a Shopify store have?

A Shopify store can hold up to 100,000 URL redirects. On Shopify Plus, the limit is 20 million.

### What should the CSV file for a Shopify redirect import look like?

The file needs the header row Redirect from,Redirect to, commas as the delimiter, and UTF-8 encoding. The first column holds the old path without the domain and with a leading slash, the second holds the target as a path or full URL. Each source may appear only once. Depending on regional settings, Excel may save with semicolons, which causes import errors.

### Does Shopify support 302 redirects?

Not natively. Every redirect in the Shopify admin is a 301. You can only set a 302 or 307 through apps or custom theme code. For permanent changes like renames, deletions, and migrations, a 301 is the right status code anyway.

### Can I redirect /collections/all or /products?

No. Shopify doesn't allow redirects for /products, /collections, /collections/all, the homepage, or /cart, /orders, /apps, /a/, and other reserved paths. Collection URLs with tag filters are excluded as well. Change the internal links pointing to those pages instead.

### Does Shopify create redirects automatically?

Partly. When you change the handle of a product, collection, or page in the admin, Shopify offers a Create a URL redirect checkbox. Deleted products, bulk changes via import or API, moved blog posts, and translated handles don't reliably get automatic redirects. You need to create those yourself.

### Can I set up wildcard redirects in Shopify?

Not with the native feature. Shopify matches every redirect exactly, and patterns like /sale/\* aren't supported. For pattern rules, you need a redirect app. Check whether the app returns a real server-side 301 or only redirects in the browser via JavaScript.

### Do redirects apply to language and market subfolders like /fr/?

Shopify's Help Center gives contradictory information on this. Test every language variant individually, for example /fr/old-page. If the redirect doesn't fire there, create a separate redirect for that subfolder. Changing translated handles doesn't create automatic redirects.

### Where should I redirect a deleted product?

To the successor product if there is one, otherwise to the matching collection. Google often treats a redirect to the homepage as a soft 404. If the product had no traffic and no backlinks, it's fine to let the URL return a 404. Keep temporarily sold-out products live instead of redirecting them.

### How long should a redirect stay in place?

Google recommends at least one year after a site move. In Shopify, there's no reason to remove working redirects as long as you stay under the limit. External links to old URLs often remain for years.

### Does an .htaccess file work on Shopify?

No. Shopify is a hosted platform without access to the server configuration. You set up redirects exclusively through the admin, CSV import, Shopify Flow, the Admin API, or apps.

* * *

## Sources

-   Shopify Help Center: [URL redirects](https://help.shopify.com/en/manual/online-store/menus-and-links/url-redirect), accessed October 10, 2026
-   Shopify Help Center: [Shopify Flow: Create URL redirect action](https://help.shopify.com/en/manual/shopify-flow/reference/actions/create-redirect-url), accessed October 10, 2026
-   Shopify Help Center: [Adding and editing pages](https://help.shopify.com/en/manual/online-store/add-edit-pages), accessed October 10, 2026
-   Shopify Help Center: [Collection settings](https://help.shopify.com/en/manual/products/collections/collection-settings), accessed October 10, 2026
-   Shopify.dev: [UrlRedirect (GraphQL Admin API)](https://shopify.dev/docs/api/admin-graphql/latest/objects/UrlRedirect), accessed October 10, 2026
-   Shopify.dev: [urlRedirectImportCreate](https://shopify.dev/docs/api/admin-graphql/latest/mutations/urlRedirectImportCreate), accessed October 10, 2026
-   Shopify.dev: [urlRedirectBulkDeleteBySearch](https://shopify.dev/docs/api/admin-graphql/latest/mutations/urlRedirectBulkDeleteBySearch), accessed October 10, 2026
-   Google Search Central: [Redirects and Google Search](https://developers.google.com/search/docs/crawling-indexing/301-redirects)
-   Google Search Central: [Site moves with URL changes](https://developers.google.com/search/docs/crawling-indexing/site-move-with-url-changes)
-   Ablestar: [Overview of URL redirects in Shopify](https://support.ablestar.com/article/217-overview-of-url-redirects-in-shopify), accessed October 10, 2026
-   Shopify Community: [301 redirects in Shopify URL translations](https://community.shopify.com/t/301-redirects-in-shopify-url-translations/283759/3), accessed October 10, 2026
-   Shopify Community: [Why won’t my URL redirect work?](https://community.shopify.com/t/why-wont-my-url-redirect-work/338491), accessed October 10, 2026
