Skip to the guide

WooCommerce · Import troubleshooting

WooCommerce import: variations not showing or linking to parent

Variations need a valid parent link, a parent row before its variations and matching attributes and values. Review the file and the store state before retrying; a file check cannot see products already in your store.

Which cause is yours?

What you observeMost likely cause
Variations imported without their attributes, or the parent has no usable options1. Variation listed before parent
Parent imports, but variations fail because their parent is not found2. Stray whitespace or case mismatch
Variations exist in admin, but are missing from the dropdown on the product page3. Missing regular price
Variation shows "Any…" or an option cannot be selected4. Attribute value not listed on the parent
Large import stopped midway; some variations of a product are missing5. The import stopped inside a product group

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

The built-in importer processes the file in order. When a variation row names a Parent SKU that does not exist yet, WooCommerce creates a temporary placeholder parent without attributes, and the variation's attributes are lost; the parent row that comes later does not bring them back.

Problem: the first variation is listed before its parent TS-001.
RecordTypeSKUNameRegular priceParentAttribute 1 nameAttribute 1 value(s)Attribute 1 visibleAttribute 1 global
1variationTS-001-ST-Shirt - Small25.00TS-001SizeSmall10
2variableTS-001T-Shirt(empty)(empty)SizeSmall, Medium10
3variationTS-001-MT-Shirt - Medium25.00TS-001SizeMedium10

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

Fixed: the parent comes first, then its variations.
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: Sort your CSV so that every variable row comes before its variation rows. Never sort purely alphabetically by Name or SKU if that pushes variations above their parent. CatalogDock moves the rows for you and lists every move.

2. Stray whitespace or case mismatch in Parent or SKU

The importer finds the parent by the SKU written in the variation's Parent column. A space copied from a spreadsheet ("TS-001 ") or a different letter case (ts-001) can make that lookup fail.

Problem: the Parent of TS-001-S is "TS-001 " with a trailing space.
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-001·SizeSmall10
3variationTS-001-MT-Shirt - Medium25.00TS-001SizeMedium10

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

Fixed: every Parent is exactly the parent's SKU.
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: Trim spaces around values in the Parent and SKU columns and write the parent's SKU exactly as it is. CatalogDock trims outer spaces in Parent automatically; a case difference is reported for you to decide, because it could also be a different product.

Fixed automatically

  • Variations listed before their parent are moved below it (VARIATION_BEFORE_PARENT).
  • Outer spaces in Parent are removed when the match is unambiguous (PARENT_WHITESPACE).

Reported for you to decide

  • A Parent that names no SKU of the file (PARENT_NOT_FOUND) or differs only in letter case.
  • Variations without a price, values the parent does not list, duplicate combinations.

Needs data from your store

Global attributes and terms, and parents that already exist in your store. The website does not see them; the free WordPress plugin compares them with your store.

3. Missing price on variation rows

A common reason why variations look linked in the admin but are missing on the product page: WooCommerce does not show a variation without a price in the product page's dropdown.

Problem: the variation TS-001-M has an empty Regular price.
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 - Medium(empty)TS-001SizeMedium10

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

Fix: Give every variation row a Regular price. For a free variation write 0 instead of leaving the cell empty.

4. Parent attributes not configured for variations

In the native WooCommerce CSV, the parent row lists every value of the attribute in Attribute 1 value(s), separated by commas (the cell is quoted because it contains commas). Each variation names the same attribute and exactly one of those values. There is no separate "used for variations" column: the importer marks the attribute of a variable product as used for variations itself.

Native CSV: a parent with three sizes and one variation per size.
RecordTypeSKUNameRegular priceParentAttribute 1 nameAttribute 1 value(s)Attribute 1 visibleAttribute 1 global
1variableTS-001T-Shirt(empty)(empty)SizeSmall, Medium, Large10
2variationTS-001-ST-Shirt - Small25.00TS-001SizeSmall10
3variationTS-001-MT-Shirt - Medium25.00TS-001SizeMedium10
4variationTS-001-LT-Shirt - Large27.00TS-001SizeLarge10

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

Problem: the variation uses Large, but the parent only lists Small and Medium.
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-LT-Shirt - Large27.00TS-001SizeLarge10

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

  • On the parent row: Attribute 1 value(s) lists every value the variations use, separated by commas.
  • On variation rows: Attribute 1 name is exactly the parent's attribute name, and Attribute 1 value(s) holds one value.
  • Attribute 1 global is 0 for a local attribute (as here) and 1 for a global attribute of Products → Attributes; keep it the same on the parent and its variations.

5. Server timeout broke the product group across batches

Large imports can stop at a server limit (PHP max_execution_time, a proxy timeout such as HTTP 504). If that happens inside a product group, the parent may be created with only some of its variations.

Splitting a catalog into several files is fine in itself: a variation in a later file finds a parent that an earlier import already created, by its SKU. What you cannot easily repair is a file that stopped halfway, because running it again as a new import reports the rows that already exist instead of creating them. Updating existing products is a different job (Update existing products changes products that already exist); it is not needed just for a variation to find a parent created by an earlier file.

Fix: Import in smaller files and keep each parent together with all of its variations in one file, so that a failed file can be checked and redone as a unit. CatalogDock builds such batches (a target of 500 records; a larger group stays whole in one larger file) with an IMPORT-ORDER.txt checklist. More on server limits: 504 Gateway Timeout.

Still failing?

  • Clear product transients: In WooCommerce → Status → Tools, use "Clear transients" and "Regenerate the product attributes lookup table" if the frontend shows outdated variations.
  • Global attributes (pa_*): with Attribute 1 global = 1 the importer looks the attribute up in Products → Attributes and creates it, and any missing terms, when they do not exist; a variation's value is matched to a term by its name. A file check cannot see your store's attributes. The free WordPress plugin lists the global attributes and terms an import would create and checks variations against a parent already in the store; test on a staging copy.
  • Getting duplicated SKU errors during import? See "Invalid or duplicated SKU" causes & fixes.

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.

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

Applies to the built-in WooCommerce CSV importer (Products → Import) creating new products; importer behavior as in WooCommerce 11.1.2 (on WordPress 7.1.2). The examples are complete CSV 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).