Skip to content

Redirects · § 1.6.2

Redirect Mapping When Migrating to Shopify

Published:

The 1:1 rule (and the fallback for retired URLs)

Every indexed legacy URL should redirect 1:1 to the closest equivalent on Shopify. Same product on the old platform — same product on Shopify. Same category — same Shopify collection. Same blog post — same Shopify blog article. Where the legacy URL has no equivalent (retired products, deprecated categories, killed pages), the fallback is the parent collection or category, not the homepage. The homepage redirect is reserved for the legacy homepage only — that's the single redirect that pairs old root to new root.

The rule sounds obvious. It's also the rule that gets broken most often: stores migrating in a hurry redirect every retired URL to the homepage. Google sees thousands of 301s converging on the homepage and treats them as a soft 404 signal. Each redirect-to-homepage loses the link equity Google would have passed through to a real category page. The five-step workflow below is built around the 1:1 rule and the category fallback.

Step 1 — crawl the legacy site

Use Screaming Frog (or any crawler) to enumerate every URL Google has indexed on the legacy site. Export the list. Then cross-reference with Google Search Console's Pages report ('Indexed' tab) on the legacy property — that's the authoritative list of URLs Google actually has in its index. The union of the two lists is your redirect inventory.

For large legacy sites (10k+ URLs), filter aggressively before building the redirect map. URLs with zero impressions in the last 12 months (per GSC) usually don't justify a redirect — let them 404 unless they have inbound links. URLs with significant impressions or links justify the 1:1 mapping effort. Tooling: Screaming Frog's "Impressions" column when connected to GSC API, or the same data exported manually from GSC.

Step 2 — match URLs

For each legacy URL, identify the corresponding Shopify URL. Spreadsheet columns: Legacy URL, Shopify URL, Match type (exact / equivalent / fallback), Notes. Match exact when the product/category survived the migration. Match equivalent when the product was renamed or restructured. Match fallback when the legacy resource was retired and a category-level redirect is the right answer.

Automation helps but doesn't finish the job. A handle-based string match catches 60-80% of products if you preserved handles during migration. The remaining 20-40% require manual matching — usually because the legacy platform used non-handle URL structures (e.g. WooCommerce's ?product=123, BigCommerce's /category/sub-category/product-name) that don't map cleanly to Shopify's /products/handle.

Step 3 — handle retired URLs with category-level fallbacks

For URLs with no Shopify equivalent, redirect to the parent collection or category. A retired 'red summer dress' product redirects to /collections/dresses, not the homepage. A killed 'about-the-founder' page redirects to /pages/about, not the homepage. The principle: pass the user (and Google's PageRank) to the most topically-relevant live page available, not the most generic.

Step 4 — import to Shopify

Open Online Store > Navigation > URL Redirects. Click Import. Upload the CSV (two columns: Redirect from, Redirect to). For migrations with more than 5,000 redirects, import in batches. Wait for each batch to complete before importing the next. After import, the redirects fire immediately on the storefront — no theme-publish step required.

The detailed CSV format and the silent-skip patterns are covered in the bulk CSV article. The migration-specific guidance: build the CSV with explicit slashes (every From path starts with /), trim whitespace on every column, and remove duplicates before upload — Shopify keeps the first redirect for any given From path and silently skips duplicates.

Step 5 — post-launch verification

Within 48 hours of launch, verify the redirects with a crawler. Re-crawl the legacy site (using the indexed URLs list from step 1) and confirm each returns HTTP 301 with the right Location header. Submit the new sitemap.xml to Google Search Console. Watch GSC's Pages report over 14-30 days for the 'Page with redirect' counts climbing and the '404 (not found)' count staying near zero on legacy URLs.

Shopify's auto-generated /sitemap.xml2 picks up the new URLs automatically. Submit it once after launch, then let it auto-update as Shopify regenerates. Google's standard 48-72hr indexing window applies3: expect the new URLs to appear in search results within that window and the legacy URLs to start showing as redirected.

Platform-specific quirks

Each source platform has URL conventions that affect the mapping. WooCommerce's permalink structure varies by site — confirm whether the legacy site used /product/ or /shop/ as the base before assuming. BigCommerce uses /products/ similar to Shopify but with different handle conventions on subcategory products. Magento often uses .html suffixes and category-product nested paths. Wix, Webflow, and other site-builder platforms use platform-specific path structures that don't map to Shopify directly.

The mitigation: build the redirect map per platform, with platform-specific transformations. WooCommerce /product/red-dress → Shopify /products/red-dress (strip 'product/', add 'products/'). Magento /category/dresses/red-summer.html → Shopify /products/red-summer (strip category prefix and .html). For other site-builder platforms (Wix, Webflow), inspect the legacy path structure first and write the regex-free transformation rule in the spreadsheet before exporting the CSV.