WooCommerce to Shopify Migration: What Actually Transfers via CSV (And What Doesn’t)

Published 2026-05-08

WooCommerce and Shopify have different data models. Before you spend hours trying to migrate via CSV, here’s what transfers cleanly, what requires manual work, and what you’ll need to rebuild from scratch.

What transfers via CSV: cleanly

What transfers via CSV: with manual mapping

Product variants. WooCommerce uses pa_color, pa_size as attribute keys; Shopify uses Option1 Name, Option1 Value. You need to rename the attribute columns during import.

Product categories vs collections. WooCommerce categories become Shopify collections, but the hierarchy flattens. A product in “Clothing > Men > Shirts” in WooCommerce becomes a product that needs to be added to a flat “Shirts” collection in Shopify. Manual recollection required.

Custom fields / ACF. WooCommerce products often have custom fields (via Advanced Custom Fields). Shopify calls these metafields. The CSV import doesn’t directly support metafield creation — you’ll need the metafield API or a Shopify app.

What doesn’t transfer via CSV at all

The column mismatch problem

WooCommerce’s product export CSV uses different column names from Shopify. These need renaming before Shopify can import them:

WooCommerce columnShopify equivalent
post_titleTitle
post_contentBody (HTML)
_priceVariant Price
_regular_priceVariant Compare At Price
_skuVariant SKU

A CSV column mapper handles this step — csvtocsv.com/csv-cleanup handles rename, drop, and split for any CSV, and a dedicated WooCommerce→Shopify adapter is planned.

Images: where WooCommerce migrations actually break

Everything else looks fine. Prices, titles, descriptions, variants. Then you check the storefront and every product photo is missing.

The problem is structural. WooCommerce dumps all image URLs into one cell, separated by commas or pipes. Shopify does it differently: each image gets its own row. The first row has your product data and the main photo in the Image Src column. Extra images go on rows below it, with nothing filled in except Handle, Image Src, and Image Position.

A product with 4 photos needs 4 rows in the Shopify CSV. First row: product data plus Image Position 1. Rows 2 through 4: same Handle, one image URL each, Image Position 2, 3, 4. Leave every other column blank on those extra rows.

Shopify downloads images from the URLs during import. If you already took your WooCommerce site offline, those URLs are dead and Shopify skips them without telling you. Save your images somewhere accessible before you shut down the old store.

Clean up CSV columns