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.
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.
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.
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.
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.
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.