WooCommerce Product CSV Import Not Working? Fix the Delimiter, Mapping, Encoding and Images

Last updated: August 2026 · By the CSVUndo team · 8 min read

A WooCommerce product CSV import that fails — or lands in the wrong fields — almost always has one of four causes: the file is semicolon-delimited while the importer is splitting on commas, the header names don’t match anything the column-mapping screen recognises so columns default to “Do not import”, the file isn’t UTF-8 — or already has mojibake baked in — so product descriptions arrive as or é, or the Images column holds URLs your server can’t fetch. All four are fixable: type the real separator into the importer’s CSV Delimiter field under Advanced options, map unmatched headers by hand on the mapping screen, re-encode the file as UTF-8, and give every image a full public URL inside one quoted field. This guide walks through each fix in the order the importer hits them.

Which WooCommerce CSV import problem do you have?

Find your symptom in the first column, then jump to the matching section. WooCommerce rarely refuses a whole file outright — it works row by row and reports the tally at the end, so a bad image URL fails its row loudly while a dropped column passes without a word.

SymptomWhat it really meansFix
Mapping screen shows one long column like SKU;Name;Regular price…The file is semicolon- or tab-delimited and the importer split on commasSet CSV Delimiter under Advanced options, or convert the file to commas
Columns say Do not import on the mapping screenThe header names don’t match WooCommerce’s own export headersMap each column manually from the dropdown
Descriptions show é, ’ or on the storefrontThe file wasn’t UTF-8, or mojibake was baked in before uploadRepair the text, re-save as CSV UTF-8, re-import with overwrite
Rows appear under “Failed to import” with an image errorThe server couldn’t fetch a URL in the Images column, so the whole row was rejectedUse full public https URLs, comma-separated, in one quoted field

Why does WooCommerce cram every product into one column?

Because the importer split your rows on commas and your file doesn’t use commas. Excel on European regional settings saves “CSV” with semicolons — the comma is reserved as the decimal separator there — so WooCommerce sees one enormous header called SKU;Name;Regular price;Description…, matches nothing, and offers you a single unmappable column. A tab-separated export from a database or ERP produces the same one-column symptom. Our guide to why Excel saves CSV with semicolons explains the locale rule, and a CSV that opens in one column covers the same disease in Excel itself.

You have two clean fixes, and both are quick:

Switch delimiters without breaking quoting

Don’t find-and-replace semicolons in a text editor — real semicolons live inside product descriptions, and one unquoted hit shifts every field after it. Our free CSV ⇆ TSV and delimiter converter auto-detects the input separator, respects quoted fields, and rewrites the file with commas (or tabs, semicolons or pipes) while leaving every value untouched. It runs entirely in your browser — the file never leaves your device.

Open the delimiter converter →

One caution if you convert by hand instead: any field containing the new delimiter must be quoted afterwards, or it splits. The converter does this automatically; a text-editor replace does not.

Why does the column-mapping screen say “Do not import”?

Because WooCommerce auto-maps only the header names it already knows. Step two of the importer is the column-mapping screen: each header in your file is matched, case-insensitively, against the names WooCommerce writes when it exports products — ID, Type, SKU, Name, Published, Short description, Description, Regular price, Sale price, Categories, Tags, Images, Stock and the rest — and against the equivalent field slugs such as regular_price or short_description. A header it recognises is mapped for you; anything else defaults to Do not import and is dropped without a word of complaint.

That single rule explains most “my column vanished” reports:

Two mapping habits worth keeping: when updating existing products, always map ID or SKU, because that’s the key WooCommerce matches on with Update existing products ticked; and glance down the mapped list before clicking Run the importer — the screen is the last moment a dropped column is visible.

Why are product descriptions garbled after the import?

Because the bytes were wrong before WooCommerce ever saw them. WordPress stores text as UTF-8 and WooCommerce’s docs ask for UTF-8 files. The importer’s Advanced options do carry a Character encoding of the file dropdown, but it is set to Autodetect by default — and if your host lacks the mbstring PHP extension the importer warns that the file “will be treated as UTF-8” and characters in other encodings may be removed. Two different failures produce “garbage in the descriptions”, and they look slightly different:

The same trip through Excel that mangles accents usually mangles identifiers too: barcodes in the GTIN field collapse to 8.85909E+11 and SKUs like 0071589 lose their zeros — the mechanics are in why Excel converts numbers to scientific notation and why leading zeros disappear. Our repair tools fix both, with one deliberate limit: they never flag a value as Excel damage on shape alone, because 2E5 can be a genuine part number, so you confirm which columns get repaired.

Excel keeps at most 15 significant digits, so every digit from the 16th onward in a barcode or serial number is replaced with a zero the moment the file is opened and saved. Digits truncated that way are no longer in the file, and no tool can regenerate them — those rows need a fresh export from your source system. The full story is in why Excel changes 16-digit numbers to zeros.

Why don’t product images import from the CSV?

Because the Images column is a list of URLs your server must fetch, live, during the import. WooCommerce takes each address in the Images field, downloads it into the Media Library, and attaches it — the first URL becomes the featured image, the rest become the gallery. If the server (not your laptop) can’t retrieve even one of those addresses, WooCommerce abandons that whole row: the product is never created, and it is listed on the final screen under “Failed to import” with a Reason for failure in the import log. The usual culprits:

If the images are already in your Media Library, you can reference them by filename instead of a full URL. And on shared hosting, remember every image is a fresh download at import time — a thousand-product file with four images each can simply outlive the server’s patience, so import large catalogues in batches.

How do you prepare a WooCommerce CSV that imports first time?

Six habits cover essentially every failure on this page:

  1. Keep an untouched copy of every export. Repairs work on what survives; the original is the only perfect backup.
  2. Never double-click a CSV into Excel. Open a blank workbook and use Data → From Text/CSV with SKU and barcode columns typed as Text — or edit in Google Sheets, which stays UTF-8 throughout.
  3. Save as CSV UTF-8 (Comma delimited) — that one choice prevents the delimiter problem and the encoding problem at once.
  4. Test with ten rows first. Import a small slice, check the mapping screen, a description with an accent, and one product’s images — then run the full file.
  5. Mind the upload cap. WooCommerce inherits your host’s PHP upload limit, often just a few megabytes on shared hosting. If your catalogue is bigger, our CSV splitter cuts it into parts with the header repeated in each; being honest about our own limits, it accepts files up to 60 MB and warns above 12 MB, because the whole split runs in a single browser tab.
  6. Re-run imports with Update existing products ticked, so rows matching an existing ID or SKU are updated in place instead of raising duplicates — but rows that match nothing are skipped, not created, so bring brand-new products in on a separate pass with the box unticked.

Frequently asked questions

Why is my WooCommerce product CSV import not working at all?

The four usual causes are a semicolon or tab delimiter the importer is not expecting, header names the column-mapping screen does not recognise, a non-UTF-8 encoding that garbles or halts the import, and image URLs the server cannot fetch. The first two are fixed inside the importer itself; the encoding and image problems are fixed in the file before you upload it again.

How do I change the CSV delimiter in the WooCommerce importer?

On the importer’s first screen, expand Advanced options below the Update existing products checkbox and type your file’s real separator into the CSV Delimiter field — a semicolon for most European Excel exports. If you would rather standardise the file itself, convert it to commas with our free delimiter converter and leave the importer’s setting alone.

Why does the column mapping screen show Do not import next to my columns?

WooCommerce auto-maps only header names it recognises from its own export format, such as Name, SKU, Regular price and Images. Anything else — Product Title, price_gbp, or a header with a typo — defaults to Do not import. Nothing is wrong with your data; open the dropdown next to each unmapped column and point it at the right product field manually.

Why are accents garbled (é, ’) in my descriptions after importing?

The text was damaged before you uploaded it: somewhere along the way the file was saved in a non-UTF-8 encoding, or an earlier Excel round-trip baked mojibake like é into the bytes, and WooCommerce imported what it was given. Repair the text with our broken-characters fixer, re-save as CSV UTF-8, then re-import with Update existing products ticked so the clean rows overwrite the garbled ones.

Why didn’t my product images import from the CSV?

Because your server has to fetch every URL in the Images column at import time. Local paths like C:\photos\mug.jpg, URLs behind a login, and links with unencoded spaces all fail, and WooCommerce then rejects the entire row — the product is listed under “Failed to import” rather than arriving without pictures. Use full public https URLs separated by commas — the first becomes the featured image — and keep the whole list inside one quoted field so it cannot split across columns.

Sources: the importer flow, the CSV Delimiter advanced option, the column-mapping behaviour and the Images column format are documented in WooCommerce’s own product CSV importer and exporter reference; the delimiter, encoding and number-damage patterns are the same Excel behaviours covered throughout the CSVUndo guides.