How to move your WooCommerce product images to Shopify

When you move from WooCommerce to Shopify, product details travel in a CSV and Shopify can fetch the photos from your WordPress site. Those links only work while your old site is online and lets Shopify in, and variation images need their own column. Here is how to move every image and keep a copy.

Before you start

  1. WooCommerce exportProducts → All Products → Export → Generate CSV
  2. Save every imageA ZIP plus manifest.csv, variation images included
  3. Shopify CSVProduct and variant image links, one per row
  4. Import and checkProducts → Import, then compare image counts
Moving images from WooCommerce to Shopify without losing any.

How Shopify brings in product photos

Step 1: keep a copy of every image

Export your products in WordPress (Products → All Products → Export, every column, Generate CSV). The Images column lists each product’s image links, separated by commas, and each variation’s row has its own image. Download them by hand (see how to download all your WooCommerce product images) or upload the CSV to Parcel and get one ZIP with a folder per product, variation images included. Keep that ZIP as your backup.

Step 2: give Shopify the links

  1. Parcel’s image details spreadsheet (manifest.csv in the ZIP) lists each saved image’s link in its original_url column, with the product’s name and SKU next to it. Leave Include image details spreadsheet ticked when you export, so the ZIP has it. Without Parcel, split the Images cell at the commas between links; a comma that is part of a link is exported as \,, so don’t split there and change it back to a plain comma.
  2. In your Shopify product CSV, put one link per row in the Product image URL column, on rows that share the product’s handle, numbered in Image position (1, 2, 3…). Shopify takes up to 250 images per product, so pick the 250 to keep for any product with more. WooCommerce lists the main image first.
  3. For a variation’s own image, put its link in the Variant image URL column on that variant’s row.
  4. Import the CSV in Shopify (Products → Import) while your WordPress site is still online.

The sample shows only the image columns. A real Shopify import file needs its other columns too, such as Title and each variant’s option values (Option1 Name, Option1 Value), which Shopify uses to match variant rows.

shopify-import.csv
HandleVariant SKUProduct image URL1Image position2Variant image URL3
trail-mugMUG-01https://your-store.com/…/mug-1.jpg1
trail-mughttps://your-store.com/…/mug-2.jpg2
trail-mugMUG-01-Bhttps://your-store.com/…/mug-blue.jpg
  1. Product image URL: one link per row, split from WooCommerce’s Images cell, main image first. Every row repeats the product’s handle.
  2. Image position keeps WooCommerce’s order: 1 is the main image.
  3. Variant image URL goes on the variant’s own row: here the blue mug (MUG-01-B), from its WooCommerce variation row.
Shopify’s limits when bringing photos in

From Shopify’s help pages, checked October 13, 2026. Shopify can change them.

If your old site is already closed

Use the files you saved in step 1. In Shopify, open Content → Files and upload the images (up to 200 at a time). Shopify takes JPEG, PNG, WebP, HEIC and GIF images up to 20 MB and 25 megapixels, and no more than 100 times wider than tall (or taller than wide), so convert any other format (such as AVIF) and shrink or crop very large or very long images first. Copy each file’s link with its Link button and use those links in the image columns. Naming files by SKU in Parcel makes matching them to products and variants quick.

After the import

Open a few products in Shopify, including some with variations, and check their images. Shopify can finish an import and still skip some images, so then export your products from Shopify and compare each product’s image count with the number of images it has in your old export. Don’t count from the image details spreadsheet alone: it lists only the images Parcel saved, while failed downloads are in failed-downloads.csv and skipped links were counted on screen. Keep the ZIP until every product has all of its images.

Free method

Downloads/

  • wc-product-export.csv

Links to your WordPress site only. They stop working when the site goes offline.

Parcel

parcel-1a2b3c4d.zip

  • MUG-01/
    • MUG-01-1.jpg
    • MUG-01-2.jpg
    • MUG-01-B-3.jpg
  • manifest.csv

Every image saved full size, variation photos in their product’s folder under their own SKU (or the product’s, when a variation has none).

The faster way: Parcel

Parcel turns the WooCommerce export into one ZIP: a folder per product, variation images in their product’s folder, files named by variation SKU, product SKU or ID, the image details spreadsheet with each saved image’s link, and a report of anything that could not be downloaded. Links Parcel can’t use, such as images hosted on another website, are counted on screen before you export; save those by hand. It downloads from your site as ParcelBot and tests a few images before you pay. It never asks for your WordPress or Shopify login. Up to 25 products is free; larger catalogs are a one-time $9, $19, or $39. No subscription.

One payment per export, no subscription. A free export can carry up to 300 MB of images; a paid one up to 1 GB.

If something goes wrong

Shopify couldn’t download images from the old site
A security plugin, firewall or password protection can block Shopify, and links must start with https://. Allow outside downloads for the move, or upload the files from your ZIP through Content → Files.
A variant has no photo in Shopify
Its image link goes in the Variant image URL column on that variant’s row. Find the file in your ZIP by the variation’s SKU, or the product’s SKU if the variation has none; manifest.csv lists every file with its original link.
The import finished but some images are missing
Shopify can skip images and still finish. Compare each product’s image count with your WooCommerce export, then add the missing ones from your ZIP.
WordPress made resized copies like -300x300
Use the links in the export, which point at the full-size uploads, not the resized copies in wp-content/uploads.

Questions

Can Shopify import images from my WooCommerce site?

Yes, while the site is online, uses https:// links and lets Shopify in: put each link in the Product image URL or Variant image URL column and Shopify downloads it during the import.

What happens to variation images?

In Shopify they go in the Variant image URL column on the variant’s row. Parcel keeps them in their product’s folder, named after the variation’s own SKU when it has one (otherwise the product’s), so they are easy to match.

How many images can a Shopify product have?

Up to 250 images per product. For any product with more, pick the 250 to keep.

Do I need to keep my WordPress site online?

Until the import is done and checked. Shopify downloads each image from your site during the import; once the site is gone, upload the saved files instead.

Does Parcel move my products to Shopify?

No. Parcel saves your images and lists their links; you build and import the Shopify CSV yourself. It never asks for your WordPress or Shopify login.

Upload WooCommerce CSV

Parcel is an independent tool, not affiliated with WooCommerce.