I've done enough PrestaShop to Shopify migrations to have a repeatable process. Most agencies don't. They write a migration script, copy the data, hope for the best, and wonder why SEO drops 40% post-launch. Here's how to do it properly.
PrestaShop's data model is deeply relational—products, combinations, attributes, and features have a normalised structure that doesn't map directly to Shopify's flatter model of products and variants. Customers who've used module-heavy PrestaShop installs often have customisations with no Shopify equivalent. And PrestaShop's URL structure is typically very different from Shopify's, which creates significant SEO exposure during cutover.
Phase 1: Discovery and Audit (2-3 weeks)
Before writing a migration script or creating a Shopify account, we spend two to three weeks in discovery. The outputs are:
A product catalog audit covering total SKU count, number of products with combinations (multi-variant products), attribute and feature usage, image count and storage size, and an inventory of products in unusual states (drafts, archived, products with zero-inventory variants).
A customer and order data audit: total customer records, total order records, date range of orders the client wants to preserve, whether customers have saved addresses we need to migrate, and whether there's a loyalty or credit balance to account for.
An integration inventory: every system that connects to PrestaShop via API, every module that communicates with an external service, every webhook or sync job. This is where migrations get blindsided—the client didn't tell you about the custom module they use for B2B pricing, and it turns out that module syncs with their ERP twice a day.
A URL audit: using Screaming Frog or Ahrefs, crawl the existing PrestaShop store and export all URLs that are indexed or have inbound links. Flag any URL patterns that Shopify cannot replicate natively.
Phase 2: Data Transformation Design (1 week)
PrestaShop combinations map to Shopify variants, but the mapping isn't 1:1. PrestaShop allows up to three attributes per product combination; Shopify supports up to three options but with different naming conventions. PrestaShop features (specifications) don't have a direct Shopify equivalent—they need to become metafields or be added to the product description.
We document the full transformation logic before writing code:
- Product combinations → Shopify variants (with option consolidation) - PrestaShop features → Shopify product metafields - Customer groups → Shopify customer tags - CMS pages → Shopify pages or blog posts - PrestaShop categories → Shopify collections (automated and manual)
If the client has custom pricing by customer group (common in B2B PrestaShop stores), this needs special handling. Shopify Plus has B2B catalogs; Shopify base does not. This is a decision point that affects platform tier selection.
Phase 3: Shopify Store Setup (1 week)
While the migration scripts are being developed, we set up the Shopify store in parallel: theme installation and configuration, payment gateway setup, shipping zones and rates, tax configuration, and Shopify app installation for the integrations that will replace PrestaShop modules.
Do not use a Shopify migration app. These apps work adequately for simple catalogs but fail on complex data. They don't handle custom metafields, they mangle HTML in product descriptions, and they have no error handling for edge cases. Write the migration scripts.
Phase 4: Migration Script Development and Testing (2-3 weeks)
We use the Shopify Admin API for all data imports. The migration runs in this order:
1. Products (without inventory) 2. Product images 3. Product metafields 4. Collections and collection memberships 5. Customers 6. Orders (historical, using Shopify's order import endpoint) 7. Inventory levels
Each phase has a validation gate: count source records, count destination records, check for import errors, spot-check 20 random records for data integrity. Do not proceed to the next phase until the gate passes.
Critical gotcha: Shopify rate-limits the Admin API at 40 requests per second on standard plans, 80 on Plus. Your migration scripts must implement exponential backoff on 429 responses. If you don't, large catalog migrations will fail unpredictably.
Critical gotcha 2: Product descriptions migrated from PrestaShop often contain inline CSS, deprecated HTML attributes, and absolute URLs pointing at the old store. Clean the HTML before import. We use a sanitisation pass that strips inline styles, replaces absolute image URLs with relative paths or Shopify CDN URLs, and removes empty tags.
Phase 5: SEO Redirect Mapping
This phase runs in parallel with Phase 4. From the URL audit in Phase 1, we build a redirect map: PrestaShop URL → Shopify equivalent URL. PrestaShop product URLs typically look like `/en/category/product-name-id.html`; Shopify product URLs look like `/products/product-handle`. Category pages, CMS pages, and manufacturer pages all need redirects.
Shopify allows up to 100,000 redirects in the admin. For larger stores, we use a redirect app or implement redirects at the CDN level.
Phase 6: UAT and Staging Validation (1-2 weeks)
We give the client a staging Shopify store on a temporary domain for user acceptance testing. The checklist covers: product pages (spot-check 50 products across categories), checkout flow (complete a test purchase), customer account creation and login, all navigation and collection pages, all CMS pages, mobile responsiveness, and speed testing.
We also run a technical SEO audit on the staging store: canonical tags, hreflang if the site is multilingual, structured data for products, sitemap generation, and robots.txt.
Phase 7: Cutover
DNS cutover should happen during the lowest-traffic window in the week—typically early Tuesday or Wednesday morning.
Two hours before cutover: put the PrestaShop store in maintenance mode to prevent new orders from being placed on the old platform. Run a final delta migration of any orders and customers created since the initial migration.
At cutover time: update DNS to point to Shopify, update domain settings in Shopify admin, submit the Shopify sitemap to Google Search Console, and monitor error logs for the first 30 minutes.
Post-cutover monitoring: watch 404 rates in Search Console (should be low if redirects are correctly configured), watch organic search traffic (a 10-20% temporary dip is normal; more than that warrants investigation), and watch conversion rate against the PrestaShop baseline.
Keep the PrestaShop store accessible on its original server for 30 days post-cutover as a reference. You will need to look up historical orders that weren't fully migrated or customer data that needs cross-referencing.