October 23, 2026
BigCommerce to Shopify redirects: mapping every BigCommerce URL
Moving from BigCommerce to Shopify changes almost every URL on the store, because Shopify puts products under /products/, categories under /collections/, web pages under /pages/ and blog posts under /blogs/. Each old URL that earns traffic or links needs a 301 redirect to its closest Shopify page, which you add in Shopify's URL redirects screen, one at a time or by CSV import.
This guide covers the BigCommerce side: how to collect the old URLs, what shapes they come in, where each type should land, and what to do with the redirects BigCommerce already serves. For Shopify's own prefixes, handle rules and the paths it refuses to redirect, see Shopify URL structure and how to redirect into it.
Get the full list of old URLs before you switch
Collect the list while the BigCommerce store is still live. Once the domain points at Shopify, the old store can't tell you what it had.
- The sitemap. On a Stencil storefront the sitemap is at
/xmlsitemap.php. Since 2021 that URL returns a sitemap index that splits the store into separate sitemaps by type, such as products, categories and web content pages, so you can work through one type at a time. A Catalyst storefront serves its index at/sitemap.xmland permanently redirects/xmlsitemap.phpthere. - The redirects BigCommerce already serves. Export them before you cancel the store, as described further down. They cover URLs the store used before, which are often still linked from other sites.
- Search Console. Google's site-move guide says to start from your sitemaps, then check server logs or analytics for the URLs with the most traffic, and the Links report for pages with internal and external links. Map those first.
How BigCommerce builds its URLs
BigCommerce's developer docs say that by default it creates "SEO Optimized, short URLs" for new products and categories, generated from the product or category name. Its own examples look like this:
| Type | Example from BigCommerce's docs | Source |
|---|---|---|
| Product | /austin-coffee-cup/ |
GraphQL route lookup |
| Category | /bath/ |
Create Categories API |
| Brand | /brands/Common-Good.html |
Create Brand API |
| Web page | /my-content-page |
Create Pages API |
| Blog post | /blog/welcome-bigcommerce/ |
Create Blog Post API |
Don't assume your store matches. The structure depends on the store's URL Structure setting, which an owner can change, and any single product, category or brand URL can be edited by hand. BigCommerce's catalog API flags those with an is_customized field, set when the URL has been changed from the one BigCommerce assigned. A store that has been running for years usually holds a mix.
So check before you map. Open the product sitemap and look at a dozen URLs: are they a single segment at the root, under a category path, or under a prefix? Then sort the whole list by number of path segments. If every product has one segment, one pattern covers them. If some sit deeper, you have at least two patterns, and each needs its own rows.
BigCommerce URL to Shopify URL
| BigCommerce URL | Example | Shopify destination | Redirect? |
|---|---|---|---|
| Product | /blue-mug/ |
/products/blue-mug |
1:1 |
| Product, category-style or custom path | /mugs/blue-mug/ |
/products/blue-mug |
1:1 |
| Category | /mugs/ |
/collections/mugs |
1:1 |
| Subcategory | /mugs/stoneware/ |
/collections/stoneware-mugs |
1:1 to a flattened handle |
| Brand | /brands/Common-Good.html |
/collections/common-good |
1:1 to a vendor collection |
| Web page | /shipping-returns/ |
/pages/shipping-returns |
1:1 |
| Blog post | /blog/glaze-guide/ |
/blogs/news/glaze-guide |
1:1 |
| Blog index | /blog/ |
/blogs/news |
1:1 |
| Cart | /cart.php |
none | Can't be redirected (see below) |
| Account | /account.php |
none | 404 |
| Filtered, sorted or search URLs | /mugs/?sort=newest |
none | 404 unless it earns links |
The example paths other than the brand row are illustrations of each shape, not your store's URLs. Copy the "redirect to" value from the new Shopify store, not from a guess.
Notes on the rows:
- Products. Shopify handles are lowercase, with spaces and special characters turned into hyphens, and a second product with the same title gets
-1on the end. If two BigCommerce products shared a name, one of them lands at/products/blue-mug-1, and a map built by slugifying titles in a spreadsheet sends that URL to the wrong product. Export the handles from Shopify after the import and build the column from those. - Categories flatten. A Shopify collection URL holds one handle, so
/mugs/stoneware/can't become/collections/mugs/stoneware. A URL in that shape would be read as Shopify's collection tag filter, which can't be redirected. Give each subcategory its own collection with a flattened handle such asstoneware-mugs, and redirect the subcategory there rather than to the parent. - Brands. Shopify has no brand pages, but each product has a vendor. A smart collection with the condition "vendor is equal to Common Good" collects the brand's products automatically, and gives you a collection URL to redirect to. Shopify also serves a built-in vendor listing at
/collections/vendors?q=Common%20Good, but a query-string URL makes a weaker redirect target than a collection with its own handle and description. - The
.htmlon brand URLs. Shopify says a URL ending in.htmlcan't be redirected to the same URL without.html. A brand redirect goes to a different path, so that rule shouldn't block it, but create one brand redirect and load it in a private window before you import the rest. - Capital letters. BigCommerce's own brand example keeps capitals (
Common-Good), and Shopify handles are always lowercase. Write the "redirect from" column exactly as the old URL appears in the sitemap, capitals included. - Web pages and blog posts. Pages land at
/pages/{handle}. Posts land at/blogs/{blog-handle}/{article-handle}, as in Shopify's articles example. Shopify's help center says your online store has a default blog called News, so imported posts usually end up under/blogs/news/. If you create a blog with a different name, use its handle. - Trailing slashes. BigCommerce's examples end in a slash (
/bath/,/blog/welcome-bigcommerce/), and Shopify's URLs don't. Shopify's redirect page doesn't say how it treats the slash, so test one redirect with and without it before you import thousands.
Cart, account and filtered URLs
- Cart. BigCommerce's cart lives at
/cart.php. Shopify won't redirect any URL that begins with/cart, so a row for/cart.phpwon't take effect. A cart page has nothing to rank, so leave it out of the CSV. - Account. BigCommerce sends customers to
/account.phpafter login. These pages hold no content worth ranking, and Shopify has its own customer accounts, so let them 404. - Filtered and sorted URLs. Category pages with query strings for sorting or filters are variations of the category, not pages of their own. Shopify also warns that URLs containing query strings "might not work as expected" as redirect sources. Map the clean category URL and leave the rest, unless Search Console shows one of them earning clicks or links.
Export the redirects BigCommerce already has
A BigCommerce store that has ever changed a URL probably serves redirects already. BigCommerce's redirects docs say it creates 301 redirects when a storefront URL changes, the product API has a create_redirect option that adds one when a product URL is edited, and merchants add their own for older URLs. Those old paths stop working the moment the domain points at Shopify, because Shopify doesn't know about them.
BigCommerce has two kinds of redirect. The GraphQL route docs describe dynamic redirects, which point at a product, brand, blog post, category or page by its ID, and manual redirects, which point at a fixed URL. A dynamic redirect has no URL in it, so a plain export doesn't tell you where it went.
BigCommerce's redirects export job has an include_dynamic_target_urls option that adds a read-only column with the target URL for each dynamic redirect. Use it, or use the List Redirects endpoint, which returns a to_url field with the full destination when you request it. Then, for each old path:
- Find the BigCommerce URL it currently points to.
- Look up that URL's Shopify destination in your map.
- Add a row from the old path straight to the Shopify URL.
Don't add a row from the old path to the BigCommerce URL it used to point at. That creates a chain: old path, then the BigCommerce URL, then Shopify. Google's site-move guide advises redirecting to the final destination directly and, where a chain can't be avoided, keeping it ideally to no more than three hops and fewer than five.
Importing the redirects into Shopify
In the Shopify admin, go to Content > Menus, then View URL Redirects. From there:
- One at a time: click Create URL redirect, put the old path in Redirect from and the new one in Redirect to, then click Save redirect.
- In bulk: click Import, add a CSV file, upload it, review the import, then click Import redirects.
Shopify's sample redirect CSV has two columns:
Redirect from,Redirect to
/blue-mug/,/products/blue-mug
/mugs/stoneware/,/collections/stoneware-mugs
/brands/Common-Good.html,/collections/common-good
/shipping-returns/,/pages/shipping-returns
/blog/glaze-guide/,/blogs/news/glaze-guide
Use a relative path for targets on your primary domain and a full URL for anything outside it, per the same page. Two rules from that page decide whether a row works:
- The old path must be broken. Shopify only redirects from URLs that don't load a page. If a Shopify product, page or collection already sits at that exact path, the page wins.
- There is a cap. A store can hold 100,000 redirects, or 20,000,000 on Shopify Plus.
Import the catalog and create the collections first. A row pointing at a handle that doesn't exist yet sends visitors from one missing page to another, and you only find out by loading it.
What to leave as a 404
Google's site-move guide says content you aren't moving should return a 404 or 410, and warns against sending many old URLs to one irrelevant page such as the new home page, which can be treated as a soft 404. On Shopify, an old path with no page and no redirect returns a 404, so leaving it out of the CSV is how you choose that outcome. A reasonable split for a BigCommerce store:
- Redirect 1:1: every product, category, brand, web page and blog post you're keeping, plus anything in your Search Console export with clicks or links.
- Redirect to the nearest parent: discontinued products that earned links, to the collection that replaced them.
- Leave to 404: cart and account pages, sorted and filtered variations, and products you dropped that nobody links to.
After launch
- Load a sample of old URLs in a private window: one of each row type in the table, plus the top pages from Search Console. Each should land on the right page in one hop.
- Update internal links and the sitemap. Google's guide says to change internal links to the new URLs and make sure your sitemaps list them.
- Keep the redirects. Google recommends keeping them for as long as possible, generally at least one year.
If the domain stays the same, Google's Change of Address tool doesn't apply; it is only for moves from one domain or subdomain to another.
If you'd rather not build the spreadsheet by hand, RedirX (walkthrough) starts from your old and new URL inventories, proposes a Shopify destination for each BigCommerce URL, keeps every proposal in review until it is confirmed, and exports the approved redirects.