HTML tags in CSV product descriptions: find and fix
A product description looks fine in a spreadsheet, but after import it may show raw tags such as <p>, <br> or <b>, codes such as & or , odd gaps, or sentences run together. The cause is usually markup or formatting that came along with pasted text. The example rows in this post are made up; they are not taken from a real file or from any real shop.
Why it happens. The description was copied from a web page or an editor, and its tags came along. A word processor added its own formatting, such as curly quotes or non-breaking spaces. An earlier export from another system wrote its markup into the cell as plain text. Several people edited the same column, each in a different way. Stores differ in what they do with markup in a description: some may show a small set of tags as formatting, others may print every tag as text. We have not tested any store, so check your store's own import rules before you remove anything.
Find them. 1. Keep the original file untouched and work on a copy. 2. Search the description column for "<", ">" and "&". Each hit is a candidate, not yet an error: an "&" in a name like "Salt & pepper" is fine.
Fix them. 3. Decide once, by your store's rules, whether to keep the tags it accepts or turn descriptions into plain text. 4. For plain text, replace each line-break tag (<br>, or </p> followed by <p>) with a space or a sentence break, not with a real line break inside the cell; that is a different problem, see "Line breaks inside a CSV cell: fix split rows". Then delete the other tags. 5. For plain text, replace each code with the character it stands for: & with "&", with a normal space, " with a double quote. Replace any other code between "&" and ";" the same way, and replace & last, so text such as &lt; does not turn into a tag. 6. For curly quotes, non-breaking spaces and other pasted characters, follow "Emoji and invisible characters in a product CSV" and "Hidden spaces in a product CSV: find and fix them" instead of repeating those steps here. 7. If a cleaned description contains a comma or a double quote, keep the cell wrapped in double quotes and double each inner quote, as shown in "Quotes and commas inside CSV cells: find and fix".
Recheck. 8. Save the copy as CSV with the same separator and encoding as before. Reopen it as text, search the description column again for "<" and "&", and confirm the row count matches the original. 9. Note each change (row, old text, new text), for example with "CSV correction worksheet: log each fix, recheck". Then import one test row first.
In the synthetic example below, SYN-001 has paragraph and line-break tags, SYN-002 has & and codes, and SYN-003 has a bold tag and curly quotes. In the after version the tags are gone, the codes are plain characters, and SYN-003's quotes are straight and doubled inside its quoted cell.
The free CSV check does not read description text, so it will not flag tags or codes there. In a local test with the synthetic rows below, it reported no problems for either the before or the after version, and tags or codes in the title column were not flagged either. It checks other columns, such as titles, prices, SKUs, brands, barcodes and dates, in the first 20 data rows, in your browser. Use the searches in steps 2 and 8 to find markup.
sku,name,price,description
SYN-001,Sample mug,12.50,"<p>Ceramic mug.<br>Dishwasher safe.</p>"
SYN-002,Sample bag,18.00,"Canvas bag & strap included"
SYN-003,Sample lamp,24.90,"<b>Warm</b> light, “dimmable”"sku,name,price,description
SYN-001,Sample mug,12.50,"Ceramic mug. Dishwasher safe."
SYN-002,Sample bag,18.00,"Canvas bag & strap included"
SYN-003,Sample lamp,24.90,"Warm light, ""dimmable"""Rakamların kaynağı
- HQ CEO chain draft, 27 September 2026, accepted by a separate quality agent; made-up examples only, no customer file and no test on any store; store behaviour with markup is stated hedged ("may", "some") and not tied to any named system
- Free CSV check behaviour (heloft.com/m01): no rule reads description text or looks for tags or codes; tags and codes in the description and title columns gave no problems; the first 20 data rows are checked (local run with synthetic files, 27 September 2026)