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
- Your WordPress site is online and doesn’t block outside downloads, so Shopify can fetch the images.
- Your image links start with
https://and the site has no password protection. - Your Shopify store can import products (Products → Import).
- You’ll keep the image ZIP until every product and variant in Shopify has its photos.
- WooCommerce exportProducts → All Products → Export → Generate CSV
- Save every imageA ZIP plus
manifest.csv, variation images included - Shopify CSVProduct and variant image links, one per row
- Import and checkProducts → Import, then compare image counts
How Shopify brings in product photos
- Shopify’s product CSV has a Product image URL column (called
Image Srcin older templates) and a Variant image URL column. - During the import, Shopify downloads each image from its link and re-uploads it to your store. Links from other websites have to be publicly accessible, start with
https://and have no password protection. If your image links still start withhttp://, switch the site to HTTPS first, or upload the saved files to Shopify as described below. Shopify also skips image file names that end in_thumb,_smallor_medium; rename those files and upload them as described below. Shopify’s product photos can be PNG, JPEG, WebP, HEIC, GIF, TIFF, BMP or SVG; it doesn’t list AVIF, so convert any AVIF photos (their links end in.avif) and upload them as described below. - WooCommerce images live on your own website, usually under
/wp-content/uploads/. Keep the site online until the import is done, and if a security plugin or firewall blocks unknown visitors, Shopify’s downloads can fail too.
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
- Parcel’s image details spreadsheet (
manifest.csvin the ZIP) lists each saved image’s link in itsoriginal_urlcolumn, 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 theImagescell 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. - 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.
- For a variation’s own image, put its link in the Variant image URL column on that variant’s row.
- 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.
| Handle | Variant SKU | Product image URL1 | Image position2 | Variant image URL3 |
|---|---|---|---|---|
| trail-mug | MUG-01 | https://your-store.com/…/mug-1.jpg | 1 | |
| trail-mug | https://your-store.com/…/mug-2.jpg | 2 | ||
| trail-mug | MUG-01-B | https://your-store.com/…/mug-blue.jpg |
- Product image URL: one link per row, split from WooCommerce’s
Imagescell, main image first. Every row repeats the product’s handle. - Image position keeps WooCommerce’s order: 1 is the main image.
- Variant image URL goes on the variant’s own row: here the blue mug (
MUG-01-B), from its WooCommerce variation row.
- 250images per product
- 200files per upload in Content → Files
- 20 MBlargest image file in Files
- 25 MPlargest image in Files
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.
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.csvlists 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.
Parcel is an independent tool, not affiliated with WooCommerce.