Which cause is yours?
| What you see | Most likely cause |
|---|---|
| Failed: “Invalid or duplicated SKU” on a variation, same SKU as its parent or a sibling | 1. SKU reused in the file |
| The file came from another store's export and has an ID column | 2. 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 nothing | 4. 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.
| Record | Type | SKU | Name | Regular price | Parent | Attribute 1 name | Attribute 1 value(s) | Attribute 1 visible | Attribute 1 global |
|---|---|---|---|---|---|---|---|---|---|
| 1 | variable | TS-001 | T-Shirt | (empty) | (empty) | Size | Small, Medium | 1 | 0 |
| 2 | variation | TS-001 | T-Shirt - Small | 25.00 | TS-001 | Size | Small | 1 | 0 |
| 3 | variation | TS-001 | T-Shirt - Medium | 25.00 | TS-001 | Size | Medium | 1 | 0 |
Record numbers exclude the header. (empty) marks an empty cell; · marks outer spaces and ↵ a line break.
| Record | Type | SKU | Name | Regular price | Parent | Attribute 1 name | Attribute 1 value(s) | Attribute 1 visible | Attribute 1 global |
|---|---|---|---|---|---|---|---|---|---|
| 1 | variable | TS-001 | T-Shirt | (empty) | (empty) | Size | Small, Medium | 1 | 0 |
| 2 | variation | TS-001-S | T-Shirt - Small | 25.00 | TS-001 | Size | Small | 1 | 0 |
| 3 | variation | TS-001-M | T-Shirt - Medium | 25.00 | TS-001 | Size | Medium | 1 | 0 |
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.
| Record | ID | Type | SKU | Name | Regular price |
|---|---|---|---|---|---|
| 1 | 412 | simple | MUG-01 | Mug | 12.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
IDcolumn 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.
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).