WooCommerce import: Variations not showing or linking to parent
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 observe | Most likely cause |
|---|---|
| Variations imported as simple products, or attributes stripped | 1. 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 frontend | 3. Missing regular price |
| Variations linked, but dropdown shows "Any..." or won't select | 4. Parent attribute configuration |
| Import halted midway on large catalog; half the variations missing | 5. 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 variationmust be set to1. - On the parent row:
Attribute 1 value(s)must list all possible variation values separated by|. - On variation rows:
Attribute 1 namemust match the parent's attribute name exactly, andAttribute 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