Field notes on platform migrations, and the parts of a catalog that never show up in an export file.
A migration looks finished the moment the product counts match. Same number out of the old platform, same number into Shopify. Checkout tested, images loading, a launch call full of relieved people.
Then organic traffic starts to slide, and keeps sliding, and nobody on that call can point at what broke. Because nothing broke. Every system did exactly what it was told.
Blame the redesign first. Everyone does.
The first theory is always the redesign. New theme, new fonts, Google just needs a minute to warm up to it. It's a comfortable theory because it demands nothing.
The real mechanism is blunter. On migration day, every URL you own changes at once. Shopify locks its paths: products live under /products/, categories under /collections/, articles under /blogs/, everything else under /pages/. Your old /shop/mens/jackets/leather-bomber.html has no possible equivalent address, and no setting will create one.
So every page that ranked, every link ever earned, every bookmark and old email now points at a 404. Google doesn't punish you for moving. It just stops sending people to doors that no longer exist.

The fix is unglamorous. Crawl the old store, inventory every URL, map each one to its new address, and load the map as 301 redirects before the domain flips. Shopify will hold 100,000 redirects on standard plans and 20 million on Plus, a ceiling that tells you something about the size of the mistakes it was built to absorb.
The export file feels complete
The second loss is quieter. A product CSV carries titles, variants, prices, images, SEO titles and descriptions, and, if you format the column headers correctly, metafields. It feels complete. The feeling is the trap.
The template allows three options per product; if your old platform had five, the overflow has to go somewhere, and where it goes is a decision, not a default. Files cap at 15 MB. Everything matches by handle, and on a re-import with overwrite enabled, a blank cell beats the data it lands on.
Then there's the line in Shopify's import documentation that deserves to be taped to a wall: change a product's option values during an import and Shopify deletes the existing variant IDs and mints new ones. Every integration keyed to those IDs stops matching in the same second. No error. (We treat that page the way pilots treat checklists, having once trusted memory instead.)
Pointers, not products
Which is the actual shape of the problem. A catalog is the product table plus everything that points at it. URLs point at handles. Feeds and ERPs key on variant IDs, and a migration mints every one of those fresh. Your review app is aimed at products that no longer carry their old identity.
Move the table and forget the pointers, and you have kept the data while losing the catalog.
Migrations are where catalog debt gets paid all at once. Every shortcut, every free-text size field, every duplicate SKU that survived for years on the old platform comes due inside a single import window. Shopify's own enterprise migration guide says it plainly: data that wasn't clean on the old platform won't become clean by moving it.

The bill for a clean move
A well-run migration still has a bill, and Shopify's own SEO guide, to its credit, does not pretend otherwise. Budget a 15 to 30 percent decline in non-branded organic traffic even with redirects done properly. Most migrations settle at a decline of 10 percent or less, then recover: weeks for small sites, months for large ones.
That's the clean version. The dirty version has no ceiling, because a page that 404s long enough doesn't dip. It falls out of the index entirely, along with the years of authority it carried.
Order matters even inside the clean version. Shopify's migration manual says products first, then customers, then orders, so the three can be stitched back together. There is no import history and a running import can't be cancelled, which is a fact you want to know before the button, not after.
The checklist we run before anyone exports
- Crawl the old store before touching the new one. The URL inventory is the migration; everything else is data entry.
- Map redirects one to one and load them before the domain moves, never after.
- List every external system keyed to product or variant IDs, and plan the re-keying as its own project, because it is one.
- Clean the catalog before it travels. Dirty data ships at the same speed as clean data and costs more on arrival.
Across the 642,000+ SKUs we've processed, the pattern holds: the stores that suffer in a move are the ones with the most unaccounted pointers, not the most products. The counts will match. They always match.
Count the pointers, not the products.
If a platform move is on your roadmap, OKART's Infrastructure Stress-Test maps your catalog's URLs, IDs, and app dependencies before anything gets exported, read-only, delivered in 48-72 hours.
Sources
- Migrate to Shopify: migration methods, import order (products, then customers, then orders), and URL structure differences between platforms.
- Creating and managing URL redirects: 301 redirects, CSV import, the 100,000 redirect limit (20,000,000 on Plus), and reserved path prefixes.
- Shopify SEO Migration: How To Preserve Organic Traffic: URL mapping process, the 15-30% non-branded organic decline estimate, and recovery timelines.
- Importing products with a CSV file: the 15 MB limit, handle matching, overwrite behavior, and variant ID deletion when option values change.
- Using CSV files for products: CSV column format, metafields column support, the three-option limit, and variant row structure.
- Ecommerce Data Migration Guide: five-step migration process, data cleaning before migration, and cutover testing recommendations.
- Can you change the Shopify URL structure?: fixed /products/, /collections/, /blogs/ and /pages/ prefixes and their migration implications.






Share:
One quiet field, 10,000 categories, zero error messages
Twice a year, we check whether Shopify just made us obsolete