Imports match by Handle — and overwrite, not merge

Products got overwritten after import — existing products changed or disappeared

You uploaded a CSV to make one small change, and now other fields on those products are blank, wrong, or gone — or a completely different product changed instead of the one you meant. Shopify's import matched your rows to existing products and replaced their data with exactly what was in the file, including anything you left out. Drop your file in below and the free checker will show you what it will actually overwrite before you upload it.

fix-shopify-products · xlsx-for-ai

What you'll see

The import completes with no error message. Afterward, some products are missing a description, images, tags, or other fields that definitely existed before — or, less commonly, a product you never touched has changed, while the one you meant to edit looks untouched. Nothing in Shopify's import summary calls this out as a problem, because from the importer's point of view nothing went wrong: it matched your rows to existing products and wrote exactly what those rows contained.

The root cause: imports match by Handle, not by intent

Shopify's product CSV importer decides which existing product a row belongs to primarily using the Handle column — the URL slug for the product — together with the variant's option values (like Size or Color) and SKU within that handle. Critically, a CSV import is not a partial update or a "patch." For every row Shopify matches to an existing product, it treats the values in that row as the complete, new, authoritative values for those fields going forward. There's no concept of "leave this field alone because the column wasn't included with new data" — a blank cell in a matched column is written as a blank, replacing whatever was there.

The two common triggers

The first is re-importing a trimmed file. If you exported your products, then deleted columns you didn't think you needed to touch, edited a couple of fields, and re-uploaded, Shopify still matches those rows by Handle — but now the Body (HTML) description, Image Src, or Tags columns you removed are simply blank in the file, and if they weren't removed but just left empty, the result is the same: the live product loses that data. The second trigger is duplicate or colliding Handles: if two different products end up with the same Handle — from copy-pasted rows, or handles that were auto-generated from very similar product titles — uploading one row can overwrite the other product's data instead of, or in addition to, the one you intended.

How to check before you re-upload

Always re-import using the full current export of your products rather than a version stripped down to just the columns you're intentionally changing — that way, fields you're not touching are re-written with their own correct current values instead of being left blank. Before uploading, verify Handle values are unique per product, especially if any were typed or copied by hand. Use the checker above to see, in plain language, what the file will actually write to each matched product, and consider testing with a single row first when you're not sure how a change will land.

More Fix a broken Shopify products export — free. guides

← All Fix a broken Shopify products export — free. guides