Shopify product CSV guide

Validation failed: options are not unique — compare the expressed option tuple

Shopify reports “Validation failed: options are not unique” when option values collide. Multiple rows can legitimately share a product’s URL handle; the narrower problem is that two actual variant rows for that product express the same combination of option values. Image-only continuation rows should not be mistaken for another variant.

Need the repeated rows and columns? Run the local checker. It evaluates the file in your browser and keeps image-only continuation rows out of the duplicate-option rule.

Build the identity carefully

Within a current product CSV, the URL handle groups rows belonging to a product. A variant is then distinguished by the values expressed under its option columns. For a product with Color and Size, the meaningful tuple might be (Blue, Small). If two variant rows under the same handle both express that tuple, an importer cannot treat them as two distinct option combinations merely because their SKUs, prices, inventory, or images differ.

The comparison must use the options that are actually expressed. Missing option dependencies can make a row ambiguous, so repairing duplicates by generating a made-up size or color is unsafe. Decide whether the row is accidental duplication, represents a genuinely missing option value, or belongs to a different product. The right repair changes catalog meaning and requires human judgment.

Why a repeated handle is not enough

A product commonly spans several rows. Variant rows repeat the handle so Shopify can associate them with the same product. Additional product images can also use continuation rows that repeat the handle while leaving option cells empty and supplying image data. Such an image-only row is valid in structure and is not another expressed option tuple. Deleting it as a “duplicate variant” could remove catalog imagery.

CSV SafeCheck therefore compares same-handle rows only when option values are expressed. It excludes a continuation row whose role is image data rather than a variant. This narrow rule reduces one known false positive, but it does not prove that every repeated row is semantically correct.

A conservative diagnosis sequence

  1. Sort or filter a copy by URL handle while preserving the untouched source.
  2. For each reported product, write down the option values expressed by the first variant row and the reported later row.
  3. Check whether both rows really represent variants. A row with empty option cells and only an image URL may be a valid continuation.
  4. If both are variants, compare SKU, inventory, price, barcode, and image fields to understand why both rows exist; those differences do not themselves create a distinct option combination.
  5. Remove or merge a row only when the catalog owner can identify the intended product structure. Otherwise introduce a missing legitimate option through the appropriate Shopify workflow, not an invented validator fix.
  6. Run preflight again, then inspect Shopify’s preview against a current backup before accepting an import.

What remains store-dependent

A local file cannot establish every collision. The checker does not know which handles and variants already exist in the target store, which overwrite settings the operator will choose, or whether another system will merge data before import. It also cannot verify remote image reachability or the intended image position in the live product. Store/position conflicts remain unverified, even when the file contains no duplicate expressed option tuple.

Do not silently deduplicate rows. Two syntactically duplicate variants can contain different inventory, pricing, or identifiers. Automatically choosing one would discard business data. CSV SafeCheck identifies coordinates and leaves that decision to the catalog owner.

Primary sources

Retrieved 26 August 2026. The local rule is deliberately narrower than full store-aware validation and does not guarantee acceptance.

Related guides