Updated October 18, 2026
Shopify URL structure and how to redirect into it
Shopify's URL structure puts every product under /products/, every collection under /collections/, every page under /pages/ and every blog post under /blogs/. You can edit the handle at the end of each URL, but not the prefix, so most old URLs change when you move to Shopify and each one needs a redirect, added from Content > Menus > View URL Redirects or imported in bulk from a CSV.
Shopify calls /products and /collections fixed paths, and it won't let you redirect them or a handful of other reserved URLs. Those restrictions, and the way Shopify generates handles, decide what your redirect map can look like.
The URL patterns Shopify uses
| Content | Shopify URL | Source |
|---|---|---|
| Home page | / |
routes object |
| Product | /products/{product-handle} |
Ajax Product API |
| Collection | /collections/{collection-handle} |
URL redirects help page |
| All products | /collections/all |
routes object |
| List of all collections | /collections |
routes object |
| Page (About, Contact, policies) | /pages/{page-handle} |
Liquid basics: handles |
| Blog | /blogs/{blog-handle} |
blog object |
| Blog post | /blogs/{blog-handle}/{article-handle} |
articles object |
| Product inside a collection | /collections/{collection-handle}/products/{product-handle} |
within filter |
| Search | /search |
routes object |
| Cart | /cart |
routes object |
Two consequences shape the whole redirect map:
- Most old paths change. Shopify's own migration guide uses the example of
example.com/policies/shipping-policybecomingexample.com/pages/shipping-policy, and warns that links to individual pages on your old site likely won't load without redirects. - The same product can live at two URLs. A product is reachable at
/products/{handle}and, when a theme links to it through a collection, at/collections/{collection}/products/{handle}. Shopify's docs point out that these are the same content on separate URLs and ask you to consider the search implications. Point your redirects at the/products/{handle}form, not the collection-scoped one.
How Shopify creates handles
The handle is the only part of a Shopify URL you control. Shopify generates it from the title, and the rules are:
- Handles are always lowercase.
- Spaces and special characters become hyphens. Runs of them collapse into one hyphen, and leading ones are dropped.
- Handles must be unique. A second product titled
Potiongets the handlepotion-1. - Changing a title later does not change the handle.
That third rule breaks redirect maps built by slugifying titles in a spreadsheet. If your old catalog had two products with the same name, one of them is at -1 on Shopify, and a map that guessed the handle sends that URL to the wrong product. Build the "redirect to" column from the handles in the new store, not from the old titles.
The fourth rule matters if you clean up titles after import. The URLs keep the handles generated from the original titles until someone edits them by hand.
Mapping old URLs to Shopify
The old-side paths below are examples of common shapes, not any one platform's defaults. Check your own URLs before you copy a pattern. Coming from WordPress or WooCommerce? WordPress to Shopify redirects maps each WordPress URL type to its Shopify destination.
| Old URL | Shopify URL | Note |
|---|---|---|
/product/blue-mug/ |
/products/blue-mug |
Handle matches the old slug |
/category/mugs/ |
/collections/mugs |
Category becomes a collection |
/category/mugs/blue/ |
/collections/blue-mugs |
Collection URLs have one handle, so nested categories need a flattened handle |
/about-us/ |
/pages/about-us |
|
/policies/shipping-policy |
/pages/shipping-policy |
Shopify's own example |
/blog/2024/05/glaze-guide/ |
/blogs/news/glaze-guide |
Date folders go away |
/item.php?id=42 |
/products/blue-mug |
Query-string URLs: test first, see below |
/blue-mug.html |
/products/blue-mug |
.html rule, see below |
Map each old URL to the page that replaces it. Google's site-move guide says not to redirect many old URLs to one irrelevant destination such as the home page. The exception is consolidation: if several old pages were merged into one new page, they can all redirect there. Shopify lets you enter / as a redirect target, but using it as a catch-all for unmatched URLs is the pattern Google warns against.
URLs Shopify won't redirect
Shopify's URL redirect page lists these restrictions:
- Only broken URLs redirect. A redirect works only when the "redirect from" URL returns a 404. If a live product, page or collection sits at that path, the page wins and the redirect never fires.
- Reserved prefixes. URLs starting with
/apps,/application,/cart,/carts,/orders,/servicesor/shopcan't be redirected. If your old store kept products under/shop/..., create one test redirect before you build the map around those URLs. - Fixed paths.
/products,/collectionsand/collections/allcan't be redirected. Paths such as/collections/vendors,/collections/types,/a/,/community/and/tools/are also reserved. - Collection tag URLs. A URL like
/collections/{collection}/{tag}filters a collection by tag and can't be redirected, even when no products carry that tag. .htmlendings. A URL ending in.htmlcan't redirect to the same URL without.html, because Shopify treats the two as one URL. The rule as written covers only that pair, so test one.htmlredirect to a different path, such as/blue-mug.htmlto/products/blue-mug, before you map the rest.- Query strings. Shopify says URLs with query strings "might not work as expected" as redirect sources. If your old site used URLs like
?id=42or?page_id=7, test a handful before you rely on them.
Redirecting a URL that is still live
Since redirects only fire on 404s, retiring a product or collection takes two steps. Setting a product to Draft, removing it from all sales channels, or hiding a collection makes its URL return a 404, and then a redirect from it will work. If you later set it back to visible, Shopify deletes the redirect automatically.
When you change a collection's handle, the admin offers a checkbox to create a redirect from the old URL to the new one. The same page warns against editing handles often, because the collection might stop showing in search results.
Market subfolders
Shopify's redirect page contradicts itself on market and language subfolders. One section says redirects don't automatically apply to all market subfolders, and another says they apply to all of them. If you sell through subfolders, test one redirect under each. You can create separate redirects per subfolder if the shared one doesn't carry over.
Adding the redirects
One at a time. In the admin, go to Content > Menus, click View URL Redirects, then Create URL redirect. Put the old path in "Redirect from" and the new one in "Redirect to". Use a relative path such as /products/blue-mug for targets on your primary domain and a full URL for anything outside it. Redirects start working immediately.
In bulk. From the URL redirects screen, choose Import, upload a CSV, review it, then confirm. Shopify's help page links a sample URL redirect CSV to use as a template, so fill in its columns instead of guessing the headers. You can also export your existing redirects to CSV from the same screen, which is useful for auditing them after launch.
From code. The Admin GraphQL API exposes a UrlRedirect object with a path (the old path) and a target (where visitors are sent), created with the urlRedirectCreate mutation. Use this if your redirect map comes out of a script.
Limits. A store can hold up to 100,000 redirects unless it is on the Plus plan, which allows up to 20,000,000, according to Shopify.
After launch
- Test the URLs that earned traffic. Shopify's migration guide says to enter each original URL in a browser and confirm it lands on the target, starting with the pages that got the most traffic on the old store.
- Don't chain redirects. Google advises redirecting straight to the final destination and, where a chain can't be avoided, keeping it to three hops or fewer. On Shopify, a handle change after launch is an easy way to create one: the old-site URL redirects to the old handle, which now redirects to the new handle. Update the target of the original redirect so it points straight at the new handle.
- Keep redirects for at least a year. Google's guidance is to keep them as long as possible, generally at least 1 year.
- Be careful removing a redirect. Shopify notes that 301 redirects are cached by browsers and search engines, so a deleted redirect can keep working for visitors who already followed it.
- Fix internal links and submit the sitemap. Google recommends updating internal links to the new URLs and submitting the new sitemap in Search Console. Shopify generates one automatically at
/sitemap.xmlwith your products, collections, pages and blog posts.
If you'd rather not build the spreadsheet by hand, RedirX starts from your old and new URL inventories, proposes a destination for each old URL, keeps every proposal in review until it is confirmed, and writes the approved map for your platform, Shopify included.