“Variant SKU already exists”: one code, two variants
Variant SKU already exists
Shopify does not enforce unique SKUs, which is exactly why this one is dangerous: most duplicate-SKU files import cleanly and the damage appears the first time something tries to count your stock.
Why Shopify raises it
A SKU is the code that identifies one variant to everything outside Shopify: your stock system, your 3PL, your accountant, a barcode scanner. Shopify’s product CSV reference treats SKU as a variant-scope column and notes that it is text, not a number — a leading zero is significant.
Shopify itself permits duplicates in the product CSV, and that is the trap: the import succeeds. The error appears when something downstream insists on uniqueness — a fulfilment service (Shopify’s reference notes that custom fulfilment services require a SKU), a stock-sync app, or a second import that tries to match on SKU and matches two things. Shopify’s common import problems page also records the related structural case: when option values are unique but a product is duplicated elsewhere in the file under the same handle, you get options are not unique instead.
How to find it in your CSV
Sort by the SKU column and scan for adjacent repeats, ignoring blank cells — a blank SKU is legal and common, and dozens of blanks are not a duplicate problem. In a spreadsheet, a count-if-greater-than-one over the non-empty SKU cells finds every case in one pass.
The usual causes are worth knowing because they change the fix. A product and its gift-boxed or bundled twin often inherit one code. A relisted item keeps the old SKU alongside the new one. And an export that was filled down in a spreadsheet gives every variant of a product the parent’s SKU — which looks like a variant problem and is really a copy-paste one.
How the converter prevents it
The sku_duplicate rule in src/lib/validate.ts indexes every non-blank SKU across the whole file — excluding extra-image rows, which carry no SKU of their own — and reports every row that shares a code, not just the second one, with the output row numbers:
SKU “WH-1003” is used on 2 rows (output rows 4, 7). A SKU must identify exactly one variant.
Reporting all of them matters: if you only flagged the later row you would not know which of the two is the one you meant to keep. It is an error, so those rows are excluded when you tick export valid rows only, and on Pro the downloadable errors.csv lists each occurrence so you can fix the source file.
Two related protections work alongside it. Leading zeros are preserved rather than parsed as numbers, so 0048123456789 does not become 48123456789 and then collide with a different product. And the converter never invents a SKU — a blank stays blank, because a generated code that looks real is worse than an obvious gap.
What a correct fix looks like
First decide whether the rows are one product or two. If a filled-down spreadsheet gave four variants the same code, the fix is per-variant suffixes — TEE-S-BLK, TEE-M-BLK — because the SKU has to distinguish what a customer actually receives.
If they are genuinely two products that share a code (a single and a multipack), give the multipack its own: CNDL-BW-1 and CNDL-BW-3. Do not resolve it by blanking one of them. A blank SKU imports fine but leaves that variant unidentifiable to every other system, which trades a visible problem for an invisible one.
If you genuinely do not use SKUs, leave the whole column unmapped. The validator will warn that SKU is not mapped — a warning, not an error — and nothing will claim to identify a variant that has no identity.
Before you retry the import
- Fix the file, not the symptom. Shopify reports the first failure it meets, so a second error usually appears once the first is cleared.
- Import into a development store or a draft-status batch first, so a half-correct file cannot put wrong data in front of customers.
- If you are overwriting existing products by handle, export your live products first: a blank cell in the import can erase a value that is currently there.
Column-by-column reference: the Shopify product CSV format. Nexum Gate is not affiliated with Shopify Inc.