Moving your catalog between e-commerce platforms is one of the most critical stages of changing your sales system. When migrating from WooCommerce to Shopify, the biggest challenge is preserving database integrity—especially when the store has a complex variant structure and thousands of image files. Mistakes at this stage can break the links between products and their options or cause images to disappear on the new platform. Understanding the architectural differences between the two systems and correctly mapping fields in import files enables a smooth transition without manually fixing hundreds of SKU records.
Why Is WooCommerce Product Migration Challenging?
The main difficulty comes from fundamental differences in how the two platforms are built. WooCommerce, as a WordPress plugin, relies on a relational MySQL database. Product information, attributes, and metadata are often spread across many tables, such as wp_posts (where core product data is stored) and wp_postmeta (which holds prices, inventory levels, and attributes). Shopify is a SaaS platform with a structured, object-based data model where a product is treated as a complete object with variants attached to it.
In WooCommerce, variants are technically separate entries of type product_variation linked to a parent product. In Shopify, they are an integral part of the product object. The risk of so-called orphaned variants—options that lose their link to the main product—is high if a unique linking key is not preserved during export. A properly planned WooCommerce to Shopify migration helps you avoid the most common technical errors related to moving the database, such as lost inventory levels for specific attribute combinations or broken image URL paths. In Shopify, those files must be indexed in the internal CDN (Content Delivery Network), which requires a stable connection to the source server during import. In addition, differences in how taxonomy is handled mean that WordPress categories and tags must be precisely mapped to Shopify collections to preserve the store's navigation structure.
Preparing the WooCommerce Database for Export
Before generating an export file, you need to clean up the current database. Naming errors in attributes or missing SKU codes in WooCommerce will be copied into Shopify, making later store configuration harder. This process requires removing unnecessary data such as old product drafts, unused tags, and duplicates that could disrupt the structure of the new database. It is also worth optimizing database tables, which speeds up generating large CSV files and minimizes the risk of script timeouts on the server. An important step is standardizing units of measure and weight—Shopify prefers the decimal system, and any non-standard formats in WooCommerce can lead to errors in logistics calculations after migration.
Data Cleanup and Identifier Uniqueness
- Remove unused attributes and old product drafts that will not be migrated.
- Verify SKU codes—every product and variant must have a unique identifier that Shopify uses to sync inventory and later integrate with ERP systems.
- Check the Handle field (slug)—it must be identical for the parent product and all its variants in the CSV file so the system groups them correctly.
- Remove unnecessary metadata generated by WooCommerce plugins that have no equivalent in standard Shopify fields.
- Save the file in UTF-8 format to prevent errors displaying accented characters in names and descriptions.
- Consolidate duplicate attributes, e.g. merge "Color" and "color" into one consistent attribute.
- Remove unnecessary post revisions from the
wp_poststable, which significantly lightens the database export process.
Method 1: Shopify's Official Importer and CSV Files
Shopify's standard importer accepts CSV files with a strictly defined structure. It is important to understand that a product with variants occupies multiple rows in the file. The first row contains general product information (title, description, tags, product type), and subsequent rows describe individual variants (size, color, price, SKU, weight) while keeping the same Handle. If a product has five variants, the CSV must contain five rows with the same handle, with general product data usually filled in only on the first row. Remember that Shopify requires specific column headers, such as Variant Inventory Qty for stock levels and Variant Price for selling prices.
Step-by-Step CSV Field Mapping
During import, you map WooCommerce columns to Shopify fields. The Body (HTML) field holds the product description—Shopify accepts standard HTML tags, so formatting such as bullet lists or bold text should be preserved. The Image Src column must contain a direct, public link to the image on the WordPress server (e.g. https://yourstore.com/wp-content/uploads/photo.jpg). The Variant Grams field is also important—Shopify requires weight in grams for automatic shipping cost calculations. If weight in WooCommerce was given in kilograms, convert it before import. A full WooCommerce to Shopify migration step by step also includes verifying the consistency of this data before final import approval, which helps avoid logistics errors. Pay attention to the Variant Inventory Policy field—setting it to deny blocks sales when stock runs out, which is standard behavior in most stores.
Method 2: Advanced Migration with the Matrixify App
For stores with more than a few thousand products or complex custom fields, the standard CSV importer may not be enough. Matrixify is an advanced tool that supports Excel (.xlsx) formats, eliminating typical separator (comma vs. semicolon) and character encoding issues. Matrixify allows migration of data the standard mechanism does not support directly, such as Metafields, order history, or full customer data with addresses.
The tool also enables bulk updates after import, which is useful for large catalogs. With Matrixify, you can export data from WooCommerce using a dedicated plugin or directly from the database, then import it into Shopify using ready-made mapping templates. This lets you move not only products but also related collections, customer reviews, and 301 redirects, which is essential for preserving Google search rankings. Matrixify also handles automatic mapping of images assigned to specific variants, which in the standard CSV importer often requires manually correcting links in the appropriate rows.
How to Preserve Variant Structure and Attributes?
In WooCommerce, the number of variants and options is nearly unlimited, which is often used in industries such as apparel or furniture. Shopify imposes certain technical limits that must be considered during migration planning. The standard limit is 100 variants per product and a maximum of 3 options (e.g. Color, Size, Material). Although Shopify is gradually rolling out updates that raise these limits (in the new infrastructure for selected stores the limit rises to 2,000 variants), most stores still operate within the basic constraints. Exceeding these limits during import will cause the product to be rejected or only part of its variants to be imported.
What to Do When a Product Exceeds 100 Variants?
- Product split: Break one product into several smaller ones (e.g. by color), which improves navigation in collections and allows better photo presentation for each color version.
- Use tags: Move some product characteristics (e.g. season, style) to tags instead of creating variants from them, which lightens the product structure.
- Product Options apps: Solutions such as Bold Product Options allow unlimited customization options (e.g. engraving, fabric choice) that do not count toward the technical limit of 100 variants.
- Use Metafields to store specific technical characteristics (e.g. technical parameters, certificates) that do not require separate inventory management for each combination.
- Group products in collections: Instead of one product with 150 variants, create a collection with 3 products of 50 variants each, linking them visually on the store page with color swatches.
Moving Images—How to Avoid Broken Links?
The most common migration mistake is shutting down the old WooCommerce store immediately after generating the CSV file. Shopify does not physically download image files from the user's local disk during CSV import—the system receives a list of URLs and sends download requests to the old server to place them in its CDN. If the source server is inactive, password-protected, or blocks bots, products will be imported without images, forcing manual completion. This process can take from a few minutes to several hours, depending on the number of images and source server performance.
For the process to succeed, the WordPress server must remain publicly accessible for the entire duration of the import. Temporarily disable Hotlink Protection plugins and security systems (e.g. Wordfence, Cloudflare) that may interpret Shopify's bulk file downloads as scraping attacks. After import, Shopify automatically generates new image URLs, optimizing them for load speed and WebP format. Also transfer alt text, which in WooCommerce is stored in the media library but in Shopify must be assigned directly to the image object in the import file (Image Alt Text column). If images in WooCommerce are organized in year/month subfolders, ensure CSV paths exactly reflect that structure.
Testing and Post-Migration Verification—Checklist
After import, product status in the Shopify admin will change to Active or Draft. This is the moment for thorough content and technical verification. Properly adding products and collections in Shopify after import requires checking inventory levels and confirming that automated collections pulled products correctly based on tags or product types defined in the CSV. Also verify that sale prices (Compare at price) imported correctly and that no currency rounding errors occurred.
Post-Import Checklist
- Spot-check variants: Verify that each size and color has the correct price, SKU, and weight assigned.
- Image verification: Confirm all graphics display correctly on the product page and are assigned to the right variants (e.g. clicking "Red" changes the main image).
- Description check: Ensure HTML tags did not negatively affect the product page layout and that all internal links in descriptions work.
- Filter and navigation test: Verify that selecting attributes on the collection page shows the right products and that pagination works correctly.
- Bulk edit: Use Shopify's Bulk Editor to quickly correct data such as availability status or sales channel assignment without re-importing the entire file.
- SEO verification: Check that Meta Titles and Meta Descriptions transferred correctly and do not exceed Shopify character limits.
FAQ
Will Shopify Automatically Download Images from My Old WooCommerce Store?
Yes, provided you include direct image URLs in the CSV file and the WooCommerce server remains active and publicly accessible throughout the import process.
What Should I Do If My WooCommerce Product Has More Than 100 Variants?
Shopify's standard limit is 100 variants per product. In that case, split the product into several separate listings or use third-party product options apps.
How Do I Avoid Duplicating Products During a Repeat CSV Import?
Shopify identifies products by the Handle field. If you import a file with existing handles and enable overwrite, the system updates data instead of creating new entries.
Will WooCommerce Product Descriptions Keep Their Formatting in Shopify?
Yes, if descriptions in the CSV are saved in HTML format. Shopify interprets tags such as bold, lists, and headings in the Body (HTML) field.
How Do I Move WooCommerce Product Categories?
WooCommerce categories are best mapped to the Type or Tags field in Shopify. You can then automatically generate collections in the Shopify admin based on them.
Do I Need to Close the Store to Customers During Product Import?
No, because import runs in the background. However, it is recommended to run import on a backup copy or in a test environment before publishing changes to the live store.
Bibliography
- Matrixify Shopify Import Documentation - Official migration tools and community guides recommend temporarily disabling Hotlink Protection and security rules in Cloudflare or Wordfence (or whitelisting migration tool IPs) during import, as Shopify's bulk image downloads can be blocked as scraping or DDoS.