Asttero

How to Move Products from WooCommerce to Shopify Without Losing Variants and Images

How to move products from WooCommerce to Shopify without losing variants and images

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

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?

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

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