How to fix "options are not unique" in a Shopify product CSV
"Options are not unique" means Shopify found two rows that describe the same variant: same handle plus the same combination of option values (for example, the same product in Medium / Black twice).
Sometimes the duplicate is real; sometimes it is invisible — a trailing space makes "Black" and "Black " two different values in one tool and a conflict in another.
Check your file before you import it
Free preflight and fixes in your browser. Nothing is uploaded.
What actually creates the conflict
Three patterns cause nearly all occurrences:
- Duplicate option rows: the same handle and the same Option1/2/3 values appear twice, often after merging two supplier files.
- Duplicate handles: two product rows share a handle. Shopify keeps one and merges or overwrites the other — a silent data loss risk.
- Invisible characters: trailing spaces, non-breaking spaces or line breaks inside option values create phantom duplicates.
Find them before Shopify does
The fastest approach is to treat the combination handle + options as a key and look for repeated keys in the whole file — not just in the rows you can see. That is exactly what a preflight does.
In BeforeImport, the duplicates rule can match on the full row or on a key column, and the Shopify preset flags duplicate handles as a blocking error. Every removal is shown as a preview and can be undone before you export.
Keep the file clean going forward
When two people edit the same catalog, duplicates come back. Two habits prevent it: always start from the same export (do not merge exports by hand), and trim spaces and invisible characters as a standard step before any import.
Frequently asked questions
Why does Shopify say options are not unique when I only see one row per variant?
The conflict is usually a duplicate handle elsewhere in the file, or an invisible character that makes two option values different to your spreadsheet but colliding to Shopify. A key-based duplicate check finds both.
Does a trailing space really change an option value?
In CSV parsing, yes: "Black" and "Black " are different strings. Depending on the tool, they can either create duplicates or make two variants look different when they should match.
Should duplicate handles be removed or merged?
If the second row completes the first product (extra variant or image), keep it as a variant row with the same handle. If it contradicts the first row, remove it. In both cases, decide deliberately — never let the importer choose.
Can BeforeImport fix this for me?
It detects exact duplicates and duplicates by key column with a preview, cleans invisible characters, and exports a file with unique handles. You approve every change before exporting.
Related guides
Try it on your messiest file
Deterministic fixes, preview before every change, export CSV/XLSX and a cleaning report.
Open the free tool