Skip to main content
Back to blog
Catalog management

Import a Shopify CSV Without Breaking Your Catalog

A badly formatted CSV can wipe 5,000 products in 3 minutes. Here’s the exact Shopify CSV structure, risky columns, and a safe rollback plan.

#shopify#csv#import#catalog
Import a Shopify CSV Without Breaking Your Catalog

Import a Shopify CSV Without Breaking Your Catalog

A Shopify CSV is both the best and the worst way to manage a catalog. Best: it is the native, official format that lets you edit 10,000 products in one pass. Worst: a badly structured CSV can duplicate, overwrite, or delete your catalog in 3 minutes with no confirmation prompt.

Here is the exact structure, the 6 columns you should never edit in bulk, and the rollback process to recover quickly if something goes wrong.

The structure of a native Shopify CSV

Export a product from your Shopify admin (Products → Export) to see the official structure. Key columns:

ColumnRoleSafe to edit in bulk?
HandleUnique identifier (= URL slug)⚠️ Never
TitleProduct name✅ Yes
Body (HTML)Description✅ Yes
VendorBrand/supplier✅ Yes
TypeProduct type✅ Yes
TagsTags (comma-separated)✅ Yes, with caution
PublishedPublished yes/no (TRUE/FALSE)✅ Yes
Option1 Name, Option1 ValueName + value of the first variant⚠️ Never
Option2 Name, Option2 ValueSecond variant⚠️ Never
Option3 Name, Option3 ValueThird variant⚠️ Never
Variant SKUVariant SKU code⚠️ Never
Variant PriceVariant price✅ Yes
Variant Compare At PriceStrikethrough price (old price)✅ Yes
Variant Inventory QtyStock quantity✅ Yes
Image SrcImage URL✅ Yes
Image Alt TextImage alt text✅ Yes
SEO TitleSEO title✅ Yes
SEO DescriptionMeta description✅ Yes
Statusactive/archived/draft✅ Yes, with caution

Each row = one SKU, not one product. A product with 3 variants = 3 rows sharing the same Handle.

The 6 columns you should never edit in bulk

These columns are the integrity keys of your catalog. Changing them carelessly breaks the whole thing:

Handle

The handle generates the product's public URL. Changing a handle:

  • Changes the product URL (/products/chaussure-derby/products/chaussure-derby-v2)
  • Breaks all external backlinks
  • Breaks internal links (transactional emails, menus, Google Shopping ads)
  • Loses accumulated SEO rankings

Rule: never modify an existing Handle. Only set it when creating new products.

Variant SKU

The SKU is the identification key for variants in your inventory, your WMS, and your analytics tools. Changing it:

  • Disrupts inventory if you use an external system (ERP, WMS)
  • Breaks integrations (fulfillment providers, dropshipping suppliers)
  • Can create duplicate variants if Shopify no longer recognizes the original

Rule: edit SKU values product by product, never through a bulk CSV.

Option1 Name, Option2 Name, Option3 Name

Option names define the variant structure. Changing them after creation:

  • Invalidates existing variants (a product with Option1 Name = Taille becomes Option1 Name = Size, which creates new options)
  • Creates silent duplicates
  • Can blow up your variant count (from 20 to 200 in a few seconds)

Rule: option names are set when the product is created, period. If you need to change them, do it in the admin interface one product at a time.

Preparing the CSV: 5 checks before upload

Before any import, check the following:

Check 1 — UTF-8 encoding

Open the CSV in a text editor (VS Code, Notepad++). Make sure accented characters and special characters display correctly. If you see broken characters instead of normal text, the CSV is in latin1 or windows-1252. Convert it back to UTF-8.

Excel saves in latin1 by default — avoid Excel for editing a CSV meant for Shopify. Use LibreOffice Calc, Google Sheets, or VS Code.

Check 2 — Comma separator

A Shopify CSV uses a comma as the separator. In French locales, Excel uses a semicolon by default. If all your data appears in one column when you open it, the separator is wrong.

Check 3 — Escaping commas inside fields

If a description contains a comma, which is very common, the field must be wrapped in quotes:

Handle,Title,Body (HTML)
derby-cuir,"Leather Derby Shoe","Elegant, comfortable, made in France"

Without quotes, the comma in "Elegant, comfortable" would be interpreted as a new field and shift everything out of place.

Check 4 — Duplicate rows

A handle that appears twice in the CSV means Shopify will treat the second row as a variant, not as a new product. That can create surprises.

In Google Sheets or Excel, use Data → Remove duplicates to clean it up.

Check 5 — Special characters in image URLs

Image Src must be a public URL, accessible without auth. Test 3-5 random URLs with curl -I https://cdn.example.com/image.jpg — you need a 200 response. If your URLs contain spaces or special characters, URL-encode them (%20 for a space).

Managing variants without creating duplicates

A product with 3 variants is described across 3 CSV rows:

Handle,Title,Option1 Name,Option1 Value,Variant SKU,Variant Price
derby-cuir,Leather Derby,Size,42,DERBY-BLK-42,149.00
derby-cuir,,,,,
derby-cuir,,,,,

Row 1: full product with Title and Option1 Name Rows 2-3: ONLY the Handle and variant values (Option1 Value, SKU, Price, etc.). Do not repeat Title, Body, Vendor, etc. — otherwise Shopify treats them as modifications and may duplicate data.

This is the native Shopify CSV syntax. It feels odd at first, but it is strict.

Images: Drive vs CDN vs Shopify Files

Three options for image URLs:

Option 1 — Google Drive

❌ Does not work for Shopify. Drive returns an HTML page, not a direct image. Shopify fails silently.

Option 2 — Public CDN (Cloudflare Images, Amazon S3 + CloudFront, Bunny CDN)

✅ Recommended for large imports. Images are hosted outside Shopify, then Shopify downloads them during import.

Typical cost: €1-€5 per month for 1,000 images in a CDN.

Option 3 — Shopify Files

✅ Manual image upload in Shopify Content → Files, then use the Shopify URLs in the CSV. Works for small catalogs (<500 images).

Limit: uploading to Shopify Files is manual, not scriptable for 10,000 images.

Recommendation: public CDN for the initial import, then Shopify hosts the images automatically after import.

Rollback before publishing

Shopify does not provide native rollback for a bad CSV import. But you can prepare a rollback in advance:

Step 1 — Export before import

Right before the import, export your full catalog (Products → Export → CSV file for Excel, Numbers, or other spreadsheet programs). Store that export with the date in the filename (catalog-2026-04-23-before-import.csv).

Step 2 — Import with publishing set to draft mode

Edit your CSV so that Published = FALSE or Status = draft for all imported products. The products are created but invisible on the store.

Step 3 — Manual check

In the admin, review 20 random imported products. Check:

  • Images loaded correctly
  • Variants are correct
  • Price is correct
  • Description is clean

Step 4 — Publish in batches

If everything is correct, publish. If a problem is detected, you only need to delete the draft products, re-import the backup CSV, and start again.

If the damage is already done

If the import overwrote your live catalog without going through draft mode:

  1. Immediately import your backup CSV — it will overwrite the current state
  2. URLs and reviews are preserved (Shopify identifies them by Handle)
  3. Expect 1-2 hours for Google to re-crawl and re-rank

Alternatives to the native CSV: when to switch to a specialized tool

The native CSV is powerful but heavy to manage. For regular operations on more than 1,000 products:

  • Matrixify (formerly Excelify): the most complete, handles complex relationships, about $20/month
  • Shopify Flow: built-in Shopify automation, ideal for triggers (low stock, tag, etc.)
  • Ecomptimize: optimizes descriptions, metas and SEO across the whole catalog; the source file stays downloadable for 30 days so you can reimport if anything goes wrong

For bulk rewriting product descriptions with quality control, a dedicated tool is far better than CSV. See Ecomptimize for Shopify.

FAQ

Can you import a partial CSV, for example just prices?

Yes. Export everything, keep only the Handle + Variant SKU columns + the columns you want to change, and delete the other columns from the CSV. Shopify will match by SKU and only update the columns present.

How many rows can a CSV have?

Technically unlimited, but in practice Shopify recommends fewer than 50,000 rows per file. Above that, split it into multiple files with a unique Handle per product.

Does a Shopify import overwrite existing images?

If your CSV contains an Image Src column with a different URL from the existing one, yes — Shopify downloads the new image and replaces it. If you do not want to change images, remove the Image Src and Image Alt Text columns from the CSV.

How do you run a production import with no downtime?

Use Published = FALSE/Status = draft and publish in batches once validated. The live catalog is not affected during the import. No customer-visible downtime.

What happens if a Handle already exists in Shopify?

Shopify updates the existing product (matched by Handle). The CSV columns overwrite existing values. Columns missing from the CSV are preserved.

Can I import reviews via CSV?

No, not through the product CSV. Reviews are managed through Shopify Product Reviews (dedicated export/import in the app) or through your reviews provider (Yotpo, Judge.me).


To run your Shopify imports with a before/after preview and AI quality review, see Ecomptimize for Shopify.


Did you enjoy this article?

Import a Shopify CSV Without Breaking Your Catalog — Ecomptimize