WooCommerce CSV imports for variations usually fail because of one of a small set of causes: the variation rows are not linked to their parent product, the attribute values do not exactly match the global attributes already set up, or a duplicate SKU is silently rejecting the row. Below are the specific errors that cause this, how to spot them in your file, and how to fix each one.
Why Variation Imports Break More Often Than Simple Product Imports
A regular product import is one row per product. A variation import needs two connected row types in the same file: a parent row of type “variable” and one or more child rows of type “variation” that reference it. Every child row also has to match attribute names and values character for character against what already exists in the store, or WooCommerce either creates a duplicate attribute or drops the row. That extra layer of dependency is where almost every import problem starts.
Error 1: Variation Rows Are Not Linking to the Parent
The most common failure is a set of variation rows that import successfully but never show up under the parent product’s Variations tab.
What Causes It
The Parent column (sometimes shown as parent_sku in older export formats) does not exactly match the SKU or ID of the parent product row. Even a trailing space or a mismatched case in the SKU is enough to break the link.
How to Fix It
- Confirm the parent product row has type variable and a clean SKU with no extra spaces
- Set the
Parentfield on every variation row to that exact SKU - Re-export the parent product alone first to see the exact format WooCommerce expects, then match new rows to that format
Error 2: Attribute Values Do Not Match Existing Attributes
If a product already has a Color attribute with values Red, Blue, and Green, a variation row that lists the value as “red” in lowercase, or “Red ” with a trailing space, will not match. WooCommerce may create a new near-duplicate attribute term instead of using the existing one, which then shows two nearly identical options on the storefront.
How to Fix It
- Go to Products, then Attributes, and note the exact spelling and capitalization of every existing term
- Match that spelling exactly in the CSV, including capitalization and spacing
- After importing, check the Attributes screen for accidental duplicates and merge or delete them if any appear
Error 3: Duplicate SKUs Silently Rejected
WooCommerce requires every SKU across the entire store, not just within one product, to be unique. If a variation row uses a SKU that already exists anywhere else in the catalog, that row is skipped, often without a clear error message pointing to which row caused it.
How to Fix It
- Before importing, export your full product list and scan the SKU column for the prefix you are about to reuse
- Build variation SKUs with a pattern that includes the parent SKU plus a unique suffix per attribute combination, so collisions become far less likely
- If an import completes with fewer rows than expected, check the import summary screen, which lists skipped rows, then cross-check those specific SKUs
Error 4: Special Characters and Encoding Problems
Commas, quotation marks, and accented characters inside a field can shift every column after them if the file was not saved with proper CSV quoting. This usually happens when a spreadsheet is exported from a program with different default settings than WooCommerce expects.
How to Fix It
- Save the file as CSV UTF-8 rather than a regional CSV format, particularly if attribute names include accented letters
- Wrap any field containing a comma in quotation marks, or better, avoid commas inside attribute values and descriptions entirely
- Open the file in a plain text editor after saving to confirm columns line up the way you expect, rather than trusting the spreadsheet program’s preview
Building a Clean Import File From Scratch
When an existing file has too many compounding errors to trace, it is often faster to rebuild it correctly than to keep patching it.
- Export one working variable product with a small number of variations directly from your store
- Use that exported file as the template, keeping its exact column headers and formatting
- Fill in new parent and variation rows underneath, checking that every SKU is unique and every attribute value matches existing terms
- Import a batch of five or ten rows first to confirm the structure works before running the full file
When CSV Editing Stops Being Worth the Fight
CSV import is powerful for one-time bulk creation, but it is a clumsy way to make ongoing edits, since every small correction means re-exporting, editing a spreadsheet program, and re-importing, with the risk of one of the four errors above creeping back in each time. For regular updates to prices, stock, or SKUs on products that already exist, a plugin that lets you edit variations directly in a spreadsheet-style table inside WordPress avoids the export and re-import cycle entirely. ReadyGo Variation Spreadsheet for WooCommerce is a free option for this: it shows all variations of a product as editable rows and saves changes straight back without a CSV file in between. It is useful specifically for the maintenance work that keeps breaking CSV imports. More detail is here: Variation Spreadsheet for WooCommerce.
Testing an Import Safely
Always test on a staging copy of the site if one is available. If not, at minimum export a full backup of the products table before running an import that touches variations, since a bad import can create duplicate attributes or orphaned variation rows that are tedious to clean up manually. After importing, spot check three or four products on the live storefront, confirming the price, stock status, and attribute dropdown all display correctly before considering the import finished.
Quick Reference: Required Columns for Variation Rows
- Type set to variation, with the parent row set to variable
- SKU unique across the entire store
- Parent matching the parent product’s SKU exactly
- One column per attribute, with values matching existing attribute terms exactly
- Regular price and, if used, Stock filled in for every row
Once these four error sources are ruled out, most CSV import failures for WooCommerce variations resolve on the first retry.
Error 5: Missing or Mismatched Attribute Global Flag
Every attribute column in the import file needs a matching flag that tells WooCommerce whether it is a global attribute (defined under Products, then Attributes) or a custom one entered just for that product. When this flag does not match how the attribute was originally created in the store, the importer sometimes builds a second, disconnected version of the attribute rather than reusing the one already assigned to the parent product. The variations then import without errors but do not display correctly on the front end, since the product page is still looking for the original attribute.
How to Fix It
Check the column header format in your file against a fresh export from the store. Global attribute columns are typically prefixed differently than custom ones in the raw CSV headers. Matching that prefix exactly, rather than assuming a plain attribute name is enough, resolves this in most cases.
A Note on Import Order
Parent rows should appear before their variation rows in the file, and all variations for one parent should be grouped together rather than scattered across the file. While the importer can sometimes handle out-of-order rows, keeping them grouped makes it far easier to spot a missing or mismatched Parent value by eye before you even run the import, which saves a repeat trip through the error log afterward.
