What actually breaks in a migration
Three things, in order of how often we see them.
Redirects. A store with ten years of history has far more live URLs than anyone expects — old collection filters, discontinued products that still rank, blog posts linked from elsewhere. Generate the map from a sitemap and you will cover the catalogue and miss the long tail that quietly earns a third of the organic traffic.
Data that was never as clean as the export suggested. Variant options stored inconsistently, prices maintained in two systems, customer records duplicated across channels. This surfaces during mapping if you are careful and during cutover if you are not.
Integrations nobody documented. The ERP connector someone built in 2019, the spreadsheet that drives pricing, the webhook that tells the warehouse to pick. These are discovered by asking the people who use them daily, not by reading the codebase.
How we keep the risk low
We migrate data in repeated dry runs rather than once on the day, and we time each run, so cutover has a known duration. We agree a parity checklist — tax, shipping, discounts, analytics, email flows — and check it against the old store rather than against the brief.
And we capture a ranking baseline before anything moves. Without one, any post-launch traffic argument is unresolvable: you cannot tell a seasonal dip from a redirect you missed. With one, it is a five-minute question.
If you are weighing whether to move at all, the eCommerce development page covers the cheaper alternative, and the Hydrogen and Oxygen page is worth reading before anyone proposes going headless as part of the same project.