Why did my CSV import turn two different products into variants of one product?

If your CSV import turned two separate products into one listing with a pile of odd variants, a duplicate value in the Handle column is almost always the cause.

CSV importproduct variantsbulk importdata migrationproduct handle

What's going on

A merchant uploads a product CSV, often exported from another platform, built by a supplier, or assembled by hand in a spreadsheet, and afterward finds that products which should be completely separate listings have been merged into a single product with a confusing set of variants. Titles, images, and prices end up jumbled under one product page, and the variant dropdown looks nonsensical because it's really showing unrelated products crammed into one option matrix.

The root cause is almost always the same: two or more rows in the CSV share the same value in the Handle column. Shopify's product importer treats the Handle as the grouping key for a product, so any rows sharing a handle get combined into a single product, with the differences between those rows becoming that product's variant options. When the duplicate handle is unintentional, from a copy-paste mistake, a spreadsheet formula that generated the same slug for two different titles, or blank Handle cells auto-filled from similar product titles, the result is products getting silently merged together with no warning at upload time.

Why it happens

Shopify's product CSV format uses the Handle column as the identifier that groups spreadsheet rows into a single product. This is intentional, and is actually the mechanism Shopify expects you to use for legitimately multi-variant products: repeat the same Handle across several rows and vary the option columns (such as size or color) on each row to define that product's variants. The importer has no way to distinguish rows that share a handle on purpose, because they're variants of one product, from rows that share a handle by accident, because two unrelated products ended up with the same slug.

Accidental collisions happen most often when the Handle column is left blank and gets auto-generated from the product Title, since two products with similar or identical titles can generate the same or very similar handle. They also happen with spreadsheet formulas, find-and-replace edits, or rows copied from an existing product as a starting template where the handle wasn't updated afterward.

Because the CSV importer doesn't flag duplicate handles as an error, it just applies the grouping rule as designed, there's no warning at upload time. The problem only becomes visible once you look at the resulting product and see variants that clearly don't belong together.

5 ways to fix it

1

Deduplicate the Handle column before you import anything

Open the CSV in Google Sheets or Excel and scan the Handle column for repeats, using a formula like =COUNTIF(A:A,A2)>1 or conditional formatting for duplicate values. Any handle that repeats across rows that aren't meant to represent the same product needs to be made unique (Shopify handles use lowercase letters, numbers, and hyphens). Make this a standard pre-upload check, not a one-time fix — it takes a couple of minutes and catches the problem before it ever reaches your catalog.

2

Understand why this happens: Handle is the product-grouping key, not just a label

In Shopify's product CSV format, the Handle column determines whether a row becomes a new product or another variant of the previous row. Rows sharing a Handle are always merged into one product, with the differences between those rows becoming that product's variant options. This is actually the intended way to build multi-variant products in a CSV — repeat the handle, vary the option columns — so the merging itself isn't a bug. It only causes trouble when a Handle collision is accidental: blank Handle cells get auto-generated from the Title, and two products with similar titles can end up with the same or very similar handle.

3

Fix it after the fact by correcting the CSV and re-importing

If duplicate handles have already merged unrelated products into one listing with garbled variants, don't try to manually untangle it from the product page. Export the current state, correct the Handle column so each real product has its own unique handle, and re-import. Shopify's importer matches rows to existing products by Handle, so a corrected file will update the matching products and split them back apart rather than creating duplicates, while a Handle it doesn't recognize creates a new product. For just a few affected products, Shopify's bulk editor also lets you edit product and variant data in a spreadsheet-like view, but fixing the source file and re-importing is usually faster.

4

Import in smaller batches and check the preview screen before committing

Shopify's product importer shows a summary before it commits the import, including a count of products and variants it detected in the file. If you're bulk-importing a large catalog, split it into batches of a few hundred rows and confirm the product count roughly matches what you expect before proceeding. A noticeable mismatch between the expected and reported product count is usually the first sign that handles collided somewhere in the file.

5

Add validation tooling if you import product data regularly

If you're pulling in product data on an ongoing basis — multi-supplier catalogs, recurring feed updates, platform migrations — a spreadsheet-side validation step that flags duplicate handles, blank handles, and near-duplicate titles before upload will save far more time than fixing merged products after the fact. That could be a simple script, a spreadsheet add-on, or a dedicated import app. It's worth setting up once if CSV import is a recurring part of how you manage products, rather than something you only do occasionally.

Bottom line

There's no setting that makes Shopify smarter about this: the Handle column doing double duty as both a URL slug and a variant-grouping key is a fixed part of how CSV import works, so the fix always lives upstream, in the file you upload. Get in the habit of scanning the Handle column for duplicates before every import, and treat a product-count mismatch in the import preview as a signal to stop and check rather than click through. If CSV imports are a frequent, high-volume part of your workflow, a pre-upload validation step is worth setting up; for a one-off cleanup, correcting the CSV and re-importing is usually faster than untangling things in the bulk editor.

Still Stuck?

Browse the rest of the problem library, run a free storefront scan to catch issues like this automatically, or email us and we'll work out a custom solution for it.