← Back to blog

WooCommerce Duplicate SKUs: How to Audit and Fix Product Identifiers Safely

Learn how to find duplicate and missing WooCommerce SKUs, decide what actually needs fixing, clean variation identifiers, and verify catalog updates safely.

WooCommerce product SKU audit showing duplicate identifiers in an inventory spreadsheet

SKUs are easy to ignore while a WooCommerce catalog is small. Once the same catalog starts feeding imports, supplier spreadsheets, fulfillment systems, marketplaces or custom integrations, the SKU becomes much more important.

A duplicate SKU is not just untidy data. It can make a product update ambiguous. A blank SKU is not automatically wrong, but it can make a variation harder to identify outside WooCommerce. And a value that looks correct on screen can still contain whitespace or formatting differences that create unnecessary reconciliation work.

This guide explains how to approach a WooCommerce SKU audit without treating every warning as something that should be automatically fixed. Use the free WooCommerce SKU Audit & Duplicate Finder to inspect a CSV locally before making changes.

What WooCommerce means by SKU

WooCommerce’s product API describes sku as a unique identifier. A product ID is an internal record identifier. An SKU is a business-facing identifier that can travel through exports, integrations and inventory workflows.

WooCommerce also has a separate global unique identifier field for GTIN, UPC, EAN or ISBN. Those identifiers should not simply be treated as alternate names for an SKU. They may come from a manufacturer or standards system, while your SKU may be an internal catalog code.

Why duplicate SKUs cause practical problems

The obvious problem is that two records appear to claim the same identifier. The larger problem is what happens when another process relies on it. Consider a supplier update containing SHIRT-BLK-M. If two purchasable records use that SKU, a person may inspect names and guess which one was intended. An automated workflow needs a deterministic identifier.

WooCommerce’s CSV and API workflows make this relevant. Product APIs expose SKU as an identifier, and CSV update workflows can use identifiers to match incoming rows. WooCommerce 11.2 expanded the built-in importer so an Update existing products operation can match by ID, then SKU, then a mapped global unique identifier such as GTIN, UPC, EAN or ISBN.

Start with an export, not the live database

For a catalog audit, start with a fresh export. It creates a snapshot you can keep untouched, inspect and compare with the cleaned version later.

  1. Export the relevant products and variations.
  2. Save an untouched copy with the date in the filename.
  3. Run the working copy through the SKU Audit & Duplicate Finder.
  4. Review duplicates and blanks in context rather than bulk-replacing them immediately.

The audit tool works locally in your browser. It checks the CSV you supply; it does not query the live WooCommerce store. If a product is missing from the file, the tool cannot know about its SKU.

Classify a duplicate before fixing it

The same record appears twice in the spreadsheet

This may be an export or spreadsheet problem rather than a catalog problem. Check IDs, product names, parent references and other stable fields before changing the SKU.

Two different simple products share one SKU

This is normally the clearest case for distinct identifiers. Determine which record owns the existing SKU operationally, then create a new identifier for the other record according to your catalog policy.

Variations share an identifier

Ask whether external systems need to distinguish those variations. If red/medium and red/large are independently stocked, purchased, scanned or fulfilled, distinct variation SKUs usually make the workflow clearer.

A parent and variation relationship is being misunderstood

WooCommerce allows a variation’s SKU field to be blank. Its variable-product documentation notes that a blank variation SKU can fall back to the product-level SKU. Therefore, every variation must have an SKU is not a WooCommerce rule. The better question is whether your business process needs each variation to have its own stable identifier.

Blank SKUs are not automatically errors

WooCommerce products can exist without an SKU, making a blanket fill-every-empty-SKU operation risky. A small store may have products that never need an external identifier. A catalog connected to an ERP, warehouse, marketplace or supplier feed may benefit greatly from complete SKU coverage.

During an audit, treat blanks as a review queue. Ask whether the record is independently purchasable, separately stocked, separately identified by a supplier or fulfillment system, likely to appear in future CSV updates, or already has a stable global identifier.

Do not confuse SKU and GTIN

Modern WooCommerce exposes a global unique identifier separately from SKU for GTIN, UPC, EAN or ISBN values. You might have an internal SKU such as TS-BLK-M and a manufacturer-issued GTIN for the same item. Keeping both lets internal operations and external channels use the appropriate identifier.

WooCommerce 11.2’s importer matching makes global identifiers more operationally useful because mapped GTIN/UPC/EAN/ISBN values can participate in matching after ID and SKU. That is a reason to audit global-identifier duplicates too, not a reason to replace your SKU scheme with barcodes.

Watch for almost-invisible differences

A spreadsheet can contain ABC-100 and ABC-100 with trailing whitespace. Humans see the same code; software may not. Case is another policy decision. Relying on case alone to distinguish physical inventory is fragile when data moves through spreadsheets and third-party systems, so the WPToolix audit offers case-insensitive duplicate comparison as an explicit option.

Spaces inside an SKU are also worth reviewing. They are not universally invalid, so the tool flags them for inspection rather than declaring them broken.

Design an SKU convention before bulk cleanup

If an audit uncovers hundreds of missing or inconsistent values, define the convention before generating replacements. A useful convention is predictable, stable and independent of attributes that change frequently.

For example: TS100-BLK-M, TS100-BLK-L, and TS100-NVY-M. Avoid encoding temporary prices or marketing copy. If you need to create a large variation matrix, the WooCommerce Variation & SKU Generator can help plan combinations before they enter the catalog.

Be careful when changing existing SKUs

An SKU can be referenced outside WooCommerce. Before changing an established identifier, check supplier sheets, warehouse labels, accounting exports, POS systems, marketplace feeds and custom integrations. A technically cleaner SKU that silently breaks a warehouse lookup is not an improvement.

For large changes, keep a mapping table containing product or variation ID, old SKU, new SKU, product name and attributes, reason for the change, and external systems that may require an update.

CSV updates deserve a preflight check

After fixing identifiers, do not jump directly from spreadsheet editing to a full production import. Run the cleaned file through the WooCommerce CSV Import Doctor to catch broader structural problems. Starting with a small batch or staging environment gives you a chance to verify matching assumptions before thousands of rows are processed.

A practical verification checklist

  1. Re-export a sample. Confirm stored SKUs match the intended values.
  2. Check variable products. Verify representative attributes, prices, stock and identifiers.
  3. Test storefront selection. Confirm the correct variation is purchasable and displays expected data.
  4. Test an integration path. If an ERP, fulfillment service or marketplace consumes SKUs, confirm a changed product there.
  5. Review logs and failed rows. A bulk process can contain individual exceptions.
  6. Keep the old-to-new mapping. Do not discard it immediately after import.

Recent WooCommerce import changes matter

WooCommerce 11.1 improved variation migration during Update existing products imports: a variation row that does not match an existing record can be created when it has the required parent relationship and a usable SKU or mapped global identifier. WooCommerce 11.2 then added global-identifier matching for product updates.

Together, these changes make identifier hygiene increasingly useful for migrations. They also reinforce why blindly changing SKUs immediately before an import is risky: the identifier may be part of the matching strategy.

A sensible order for fixing a messy catalog

  1. Take a fresh export and backup.
  2. Audit SKU and global-identifier duplicates.
  3. Separate true catalog conflicts from duplicate spreadsheet rows.
  4. Decide whether blank variation SKUs actually need values.
  5. Define a stable naming convention.
  6. Document old-to-new mappings.
  7. Run a structural CSV preflight.
  8. Test a small update.
  9. Verify WooCommerce plus at least one downstream system.
  10. Only then apply the broader cleanup.

Final takeaway

A good WooCommerce SKU audit is not a hunt for empty cells. It is an exercise in making product identity predictable across the systems that depend on your catalog.

Use the WooCommerce SKU Audit & Duplicate Finder to surface duplicates, blanks and formatting issues, then decide what each warning means before editing product data. If the next step is a bulk import, follow it with the CSV Import Doctor. That sequence is slower than automatic replacement, but safer than discovering after an import that a cleanup changed identifiers your operations relied on.