WooCommerce import: Variations not showing or linking to parent

The short answer: WooCommerce fails to link or display variations when a variation row appears before its parent in the CSV, when stray whitespace in the Parent column breaks the SKU lookup, when a variation lacks a regular price (WooCommerce hides unpriced variations on the frontend), when parent attributes are not marked for variations (Attribute 1 variation = 1), or when an import timeout splits a product group across files.

Applies to the built-in WooCommerce CSV importer (Products → Import). Verified against WooCommerce 11.1.2 (on WordPress 7.1.2).

Which cause is yours?

What you observeMost likely cause
Variations imported as simple products, or attributes stripped1. Variation listed before parent
Parent imports, but variations are skipped with "parent not found"2. Stray whitespace or case mismatch
Variations exist in admin, but dropdown is empty on frontend3. Missing regular price
Variations linked, but dropdown shows "Any..." or won't select4. Parent attribute configuration
Import halted midway on large catalog; half the variations missing5. Server timeout broke the group

1. A variation row appears before its parent in the CSV

The built-in WooCommerce CSV importer processes files sequentially row by row. If a variation row appears before its corresponding variable parent product row, the importer cannot link it because the parent does not yet exist in the database.

Type,SKU,Name,Parent variation,TS-001-S,T-Shirt - Small,TS-001   # BAD: variation appears before its parent variable,TS-001,T-Shirt,                    # Parent is listed second variation,TS-001-M,T-Shirt - Medium,TS-001
Type,SKU,Name,Parent variable,TS-001,T-Shirt,                    # OK: parent product is always first variation,TS-001-S,T-Shirt - Small,TS-001 variation,TS-001-M,T-Shirt - Medium,TS-001

Fix: Sort your CSV so that every variable row immediately precedes its child variation rows. Never sort purely alphabetically by Name or SKU if that pushes variations above their parent.

2. Stray whitespace or case mismatch in Parent or SKU

WooCommerce matches variations to parents by comparing the variation's Parent column against the parent's SKU. Even a single trailing space copied from an Excel formula or spreadsheet will cause the match to fail silently.

Type,SKU,Name,Parent variable,TS-001,T-Shirt, variation,TS-001-S,T-Shirt - Small,"TS-001 "   # BAD: trailing space in Parent column prevents match
Type,SKU,Name,Parent variable,TS-001,T-Shirt, variation,TS-001-S,T-Shirt - Small,TS-001     # OK: clean, exact match

Fix: Trim whitespace from your Parent and SKU columns. Ensure capitalization matches identically (TS-001 vs ts-001).

Check and repair your variations automatically

Drop your CSV or Excel file into CatalogDock. The free in-browser checker moves parents ahead of variations, strips stray whitespace from Parent columns, and checks variation prices and attributes before you import.

Open the free checker →

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

3. Missing price on variation rows

This is the single most common reason why variations appear properly linked in the WordPress admin panel but remain invisible on the live product page. WooCommerce automatically hides variations from frontend dropdowns if they do not have a regular price.

Type,SKU,Name,Parent,Regular price variable,TS-001,T-Shirt,, variation,TS-001-S,T-Shirt - Small,TS-001,25.00 variation,TS-001-M,T-Shirt - Medium,TS-001,        # BAD: empty price hides variation on frontend

Fix: Ensure every variation row has a valid numeric Regular price. If a variation is free, enter 0 rather than leaving the cell empty.

4. Parent attributes not configured for variations

For WooCommerce to construct variation select dropdowns, the parent product row must declare the attribute, list all available values separated by vertical bars (|), and explicitly mark the attribute as used for variations.

Type,SKU,Name,Parent,Attribute 1 name,Attribute 1 value(s),Attribute 1 visible,Attribute 1 variation variable,TS-001,T-Shirt,,Size,Small | Medium | Large,1,1 variation,TS-001-S,T-Shirt - Small,TS-001,Size,Small,, variation,TS-001-M,T-Shirt - Medium,TS-001,Size,Medium,,

Key requirements:

  • On the parent row: Attribute 1 variation must be set to 1.
  • On the parent row: Attribute 1 value(s) must list all possible variation values separated by |.
  • On variation rows: Attribute 1 name must match the parent's attribute name exactly, and Attribute 1 value(s) must contain exactly one value.

5. Server timeout broke the product group across batches

Large CSV imports frequently trigger server limits (max_execution_time of 30 or 60 seconds, or HTTP 504 Gateway Timeout). If you try to split a large file by row count in a spreadsheet editor, a parent product often lands at the bottom of Batch 1 while its variations land at the top of Batch 2.

When Batch 2 is imported, WooCommerce cannot find the parent from Batch 1 unless "Update existing products" is enabled, and partial imports leave orphaned records.

Fix: Split catalogs into safe batches of up to 500 records where parents and all their variations are guaranteed to remain in the same file. CatalogDock generates variation-safe batch ZIPs with an IMPORT-ORDER.txt checklist automatically.

Still failing?

  • Clear WooCommerce Transients: Go to WooCommerce → Status → Tools and click "Clear product transients" and "Regenerate product attributes lookup table".
  • Global taxonomy attributes (pa_*): If your store uses global attributes rather than custom local attributes, ensure the taxonomy slug matches the WooCommerce attribute slug in Products → Attributes.
  • Getting duplicated SKU errors during import? See our guide on "Invalid or duplicated SKU" causes & fixes.

Related: Full CatalogDock Documentation · Safe import batches (≤ 500 records) · Invalid SKU troubleshooting