Skip to the guide

WooCommerce · Import troubleshooting

WooCommerce import error: "Invalid or duplicated SKU"

WooCommerce could not assign a SKU because another product or variation already uses it. Check repeated SKUs, IDs copied from another store and existing items before changing the source or retrying.

Which cause is yours?

What you seeMost likely cause
Failed: “Invalid or duplicated SKU” on a variation, same SKU as its parent or a sibling1. SKU reused in the file
The file came from another store's export and has an ID column2. ID column
Skipped: “A product with this SKU already exists”3. “Update existing products” not ticked
Failed, but the SKU looks unique and the product list finds nothing4. Hidden duplicate in the store

1. The same SKU appears twice in your file

WooCommerce requires every SKU to be unique across products and variations. A common slip is giving variations the same SKU as their parent: the first row gets the SKU, the next rows with it fail.

Problem: both variations reuse the parent's SKU TS-001.
RecordTypeSKUNameRegular priceParentAttribute 1 nameAttribute 1 value(s)Attribute 1 visibleAttribute 1 global
1variableTS-001T-Shirt(empty)(empty)SizeSmall, Medium10
2variationTS-001T-Shirt - Small25.00TS-001SizeSmall10
3variationTS-001T-Shirt - Medium25.00TS-001SizeMedium10

Record numbers exclude the header. (empty) marks an empty cell; · marks outer spaces and ↵ a line break.

Fixed: every row has its own SKU; Parent still points to TS-001.
RecordTypeSKUNameRegular priceParentAttribute 1 nameAttribute 1 value(s)Attribute 1 visibleAttribute 1 global
1variableTS-001T-Shirt(empty)(empty)SizeSmall, Medium10
2variationTS-001-ST-Shirt - Small25.00TS-001SizeSmall10
3variationTS-001-MT-Shirt - Medium25.00TS-001SizeMedium10

Record numbers exclude the header. (empty) marks an empty cell; · marks outer spaces and ↵ a line break.

Fix: Give every row its own SKU. Sorting the SKU column A→Z in a copy of the sheet puts repeated values next to each other. CatalogDock lists every repeated SKU with all its records; it never changes a SKU for you, because only you know which product should keep it.

2. Your file has an ID column from another store

Database IDs from another site's export do not correspond to products in this store. The importer matches a row with an ID to the product with that ID here: without “Update existing products” such a row is skipped, with it the row overwrites whatever product has that ID in this store.

Problem: 412 is an ID from the old store; here it may be a different product.
RecordIDTypeSKUNameRegular price
1412simpleMUG-01Mug12.00

Record numbers exclude the header. (empty) marks an empty cell; · marks outer spaces and ↵ a line break.

Fix: On the WooCommerce column mapping screen, set ID to “Do not import”, or delete the ID column before uploading, so that products are matched by SKU. CatalogDock flags an ID column as a scenario it cannot verify from the file.

Fixed automatically

Nothing about SKUs: a SKU is never changed for you, because only you know which product should keep it.

Reported for you to decide

  • SKUs repeated in the file (SKU_DUPLICATE), SKUs that differ only in letter case, accents or spaces.
  • An ID column from another store (UNSUPPORTED_ID_COLUMN).

Needs data from your store

SKUs already used in your store, including drafts, private products and orphaned variations. The website compares only with a store export you supply; the free WordPress plugin reads your store and lists the rows the importer would skip.

3. You are re-importing products that already exist

If a SKU is already in your store and “Update existing products” is not ticked, the importer does not create a second product: it skips the row and reports “A product with this SKU already exists”. This is different from the failed “Invalid or duplicated SKU” rows above.

Fix: If you mean to change those products, tick “Update existing products” on the first screen of the importer: matching products are then updated by ID or SKU, and rows that match no product are skipped. If you meant to create new products, remove the rows that already exist. Updating changes live data, so try it with two rows on a staging copy first.

4. The SKU exists on something you cannot see

The uniqueness check covers products and variations in other statuses than “Published”. The SKU may belong to a draft, private or pending product, or to a variation whose parent was deleted (an orphaned variation).

Fix:

  • In Products → All Products, look at the Draft, Private and Pending lists, and search by the product name as well as the SKU.
  • Rename or remove the item that holds the SKU only after you are sure it is not needed.
  • Only if the SKU belongs to an orphaned variation: WooCommerce → Status → Tools → Delete orphaned variations removes every variation without a parent in the store. Make a backup first; this is not a general fix for SKU errors.

Still failing?

  • This guide covers the standard built-in importer (Products → Import). Third-party plugins like WP All Import follow different rules.
  • Global attributes (pa_*) depend on your store's settings, which a file check cannot see.
  • Variations failing to attach to their parent rather than failing on SKU? See variations not showing or linking.
  • Import stops partway? See 504 Gateway Timeout. Text garbled or one column only? See delimiter & encoding issues.

Check your file before you import

Drop your CSV or Excel file into CatalogDock. The in-browser checker flags repeated SKUs, case and accent collisions, and variations that reuse their parent's SKU before anything touches your store. It checks the file you give it: SKUs already in your store are only compared when you supply a store export.

Runs in your browser · No files uploaded · Never connects to your store

Applies to the built-in WooCommerce CSV importer (Products → Import); importer behavior as in WooCommerce 11.1.2 (on WordPress 7.1.2). The CSV examples are complete files you can copy or download. Each gives the result stated next to it in the CatalogDock checker (an automated file check, not an import).