Shopify CSV import errors, and how to fix each one
Shopify's product importer is strict and its error messages are terse. Here is what each one actually means, why it happens, and the specific change that fixes it.
Re-export a working product from Shopify and compare your file against it column by column. Nine times out of ten the difference is obvious once they sit side by side.
1. Invalid or duplicated SKU
What it means: two rows carry the same SKU, or a SKU in your file already exists on another product in the store.
The fix: SKUs must be unique across the entire store, not just within your file. Sort by the SKU column and look for repeats, and remember that an old, archived product still holds its SKU. If you generated codes by hand, this is the most likely error you'll hit.
2. Variants imported as separate products
What it looks like: you expected one product with twelve variants and got twelve products.
What it means: Shopify groups rows into a product by the Handle column. Every variant of a product must repeat the same handle on consecutive rows.
The fix: the first row of a product carries the product-level data — Title, Body (HTML), Vendor, Type, Tags, Published. Every following row for that product repeats only the handle and its own variant data (option values, SKU, price, stock). Leaving the title filled in on every row is what usually causes this.
3. Option Name with a blank Option Value
What it means: you filled in Option1 Name (for example "Color") but left Option1 Value empty on that row.
The fix: the pair must always travel together. If a product has no options at all, leave both columns blank — don't put a name with no value. This bites most often when one product in a batch has fewer attributes than the rest.
4. Inventory quantities ignored
What it looks like: the import succeeds, but every variant shows zero stock.
The fix: set Variant Inventory Tracker to shopify. Shopify discards Variant Inventory Qty when the tracker column is blank, because a blank tracker means "not tracking inventory". This one is silent — no error, just missing stock.
5. SKUs and barcodes lost their leading zeros
What it means: your file said 0012-BK and Shopify received 12-BK. This is not Shopify's doing — Excel and Google Sheets convert those columns to numbers the moment the file is opened, and re-save them without the zeros.
The fix: the reliable answer is to never start a SKU or barcode with a zero. If you must, format the column as Text before opening, or don't open the CSV in a spreadsheet at all between generating and importing.
6. Strange characters, or the file won't parse
What it looks like: accented characters render as é, or the whole file lands in one column.
The fix: save as CSV UTF-8. Two separate causes hide here: wrong encoding (mangled characters) and a semicolon delimiter instead of a comma, which is the default in several European locales and puts every row in a single column. Excel's plain "CSV" export is often neither.
7. Images not imported
The fix: Image Src must be a publicly reachable https:// URL — no Google Drive or Dropbox share links, which serve a viewer page rather than the file. Shopify fetches each URL during import, so anything behind a login fails silently. Put the product-level image on the first row of the handle.
8. Missing or invalid Handle
The fix: every row needs a handle, and it must be URL-safe: lowercase letters, numbers, and hyphens only. Spaces, apostrophes, and accented characters break it. The handle is also the product's permanent URL, so keep it readable — derive it from the title rather than the SKU.
A faster way to find the culprit: import a two-row file first — one product, one variant. If that works, the schema is fine and the problem is in a specific row. Bisect from there rather than re-uploading 500 rows each time.
Or skip the debugging entirely
OtterLabel builds the CSV from structured data, so variants are grouped by handle, option pairs are never half-filled, and the inventory tracker is always set. Free, no signup.
Open the free SKU builderAlready have products? Import your CSV and it audits every SKU first.