Export your product CSV from Shopify, edit the Body (HTML) column with HTML-tagged content, save the file as UTF-8, then re-import it and select “Overwrite products with matching handles.” That single option applies every change you made to matching products at once. Before any of that, run a small test batch and keep an untouched backup of your original export.
TL;DR:
- Using a small test batch and keeping an untouched backup helps prevent data loss during bulk product updates.
- It is essential to use UTF-8 encoding and double-check image URLs and HTML format to avoid import errors or garbled text.
- Overwrite products with matching handles applies all CSV columns to existing products, risking unintended data loss if fields are omitted or blanked out.
- AI-powered tools like Merchup AI can significantly reduce time spent creating and formatting descriptions while minimizing manual HTML errors.
- Translating descriptions requires separate handling for each language and verifying UTF-8 integrity, especially with non-Latin characters.
How do you set up the right CSV and columns for a Shopify import?
Start with a real export rather than a blank spreadsheet. Go to Products, select the items you want to update (or leave the filter empty to grab everything), and export. That file already has every column header Shopify expects, in the order it expects them, which saves you from guessing at field names. If you’re building a catalogue from scratch instead of updating one, Shopify’s own sample CSV template is the safer starting point than typing headers from memory.
Only one column is genuinely mandatory: Title. Everything else is optional in the sense that Shopify won’t reject the file without it, but leaving out the wrong column can quietly wipe data you didn’t mean to touch. According to Shopify’s merchant community, the required fields for import and export are minimal by design, precisely so partial updates are possible.
The columns you’ll work with most for a descriptions project:
- Handle — the unique identifier that ties rows together and matches products during re-import
- Title — the only field Shopify actually requires
- Body (HTML) — where your product description lives, formatted as HTML
- Variant SKU / Variant Price / Variant Inventory Qty — variant-level data that repeats across rows for the same handle
- Image Src — a public URL pointing to each product image
Multi-location inventory adds complexity: if your store tracks stock across several locations, inventory columns multiply per location, and a mismatched location name can leave quantities unset rather than updated. Keep the file format simple too. Save as CSV UTF-8, not the default CSV your spreadsheet tool offers, and watch out for Excel’s habit of auto-correcting quote marks, dates, and leading zeros in SKUs. Google Sheets tends to be gentler here than Excel, but both need a manual check before export.
How do you edit descriptions safely in the Body (HTML) column?
CSV cells don’t understand bold, italics, or bullet points the way a document does. A CSV only stores plain text, so rich-text formatting gets stripped unless you write it out as actual HTML inside the cell. That means a bolded phrase needs <strong> tags around it, not just a bold button click, and a bulleted list needs <ul> and <li> tags typed directly into the value.
A typical Body (HTML) cell might read:
<p>Soft-brushed cotton tee built for everyday wear.</p><ul><li>100% organic cotton</li><li>Pre-shrunk fit</li><li>Machine washable</li></ul>
If your descriptions currently live in Google Sheets, Excel, or a CMS export, none of those preserve formatting automatically when you paste into a CSV. You have three realistic options: write the HTML by hand for small batches, use a formula (Sheets’ CONCATENATE or TEXTJOIN can stitch tags around plain text columns), or generate the HTML with a tool built for the job before you ever open the CSV.
- Wrap paragraphs in
<p>tags, not line breaks alone; a raw line break in a CSV cell can break the import entirely - Use
<strong>and<em>rather than markdown-style asterisks, which Shopify won’t render - Keep the file UTF-8 encoded so accented characters, currency symbols, and em-dashes in copy survive the round trip, since UTF-8 encoding failures are the usual cause of garbled text after import
- For anything beyond the main description, structured content like size charts or care instructions often belongs in metafields rather than the Body (HTML) column, keeping the description itself clean
Pro Tip: Write your HTML in a plain text editor first, not your spreadsheet’s formula bar. Spreadsheets love to “helpfully” convert straight quotes into curly ones, which then show up as broken characters on the live product page.
For a closer look at exactly which tags behave well in the admin, our formatting guide for the Body (HTML) field walks through common snippets.
How do you import the edited CSV into Shopify admin?
Once your file is clean, the import itself takes minutes. The risk isn’t the upload, it’s the option you tick halfway through.
- In Shopify admin, go to Products, then click Import.
- Select your edited CSV file and upload it.
- Shopify shows a preview of what will change. Read it properly. This is your last checkpoint before anything happens.
- Tick “Overwrite products with matching handles” if you’re updating existing products rather than creating new ones. Leave it unticked only if you genuinely want new listings instead of updates.
- Choose whether imported products should publish immediately or stay as drafts, and confirm image behaviour: Shopify pulls images from public URLs in the Image Src column, it doesn’t accept local file paths.
- Click Import products and let the job finish.
That overwrite checkbox is doing more work than its label suggests. It matches rows by handle and applies every column in your file to the existing product, including columns you didn’t intend to touch. If your export was missing a field, or a value got blanked out during editing, the live product loses that data too. Once the import job starts, it can’t be cancelled, so the preview screen is the only real safety net you get.
Run a small preview import first, three to five products, and check the results on the storefront before you commit to the full catalogue.
What testing and backup steps prevent a bad bulk update?
Export a fresh CSV of your current products and save it somewhere outside Shopify before you change anything. That file is your only way back if an import goes wrong, since Shopify doesn’t offer an import rollback. Treat it the way you’d treat a database backup, not a temporary download you delete after five minutes.
- Test large migrations on a development store or a small tagged subset of live products first
- Version your filenames (
descriptions-export-2026-03-10.csv) rather than overwriting the same file repeatedly - Keep a simple changelog noting what each import changed and when, so a future problem is traceable to a specific date
- Never edit your only copy of the original export; duplicate it before you touch a single cell
If an import does overwrite something unintended, your backup CSV is the fix: re-import that original file with overwrite selected again, and the matching handles revert to their previous values. This only works if the backup was taken before the problematic import, which is exactly why skipping that step is the costliest shortcut in the whole process.
Pro Tip: Keep the backup CSV and the “new” CSV open in separate tabs and spot-check ten random rows against each other before you import. It takes two minutes and catches the kind of copy-paste error that a full preview screen can miss.
Our practical guide to bulk editing descriptions covers a few more workflow safeguards worth building into a repeatable process.
Why does your Shopify CSV import keep failing?
Most import errors trace back to one of four causes, and each has a specific fix rather than a vague “try again.”
- Header mismatches — a renamed or missing column confuses the importer; re-download a fresh sample or export and copy headers exactly rather than retyping them
- Encoding problems — accented letters, curly quotes, or currency symbols turning into strange characters means the file wasn’t saved as UTF-8; re-save through your spreadsheet’s “CSV UTF-8” export option specifically
- Image import failures — Shopify only pulls images from public, directly accessible URLs; a link behind a login, a local file path, or a broken URL will simply be skipped, since image imports depend entirely on publicly reachable Image Src values
- Silently ignored rows — a blank or malformed handle means that row won’t match anything, so the update never applies; check the import summary and activity log after every job, not just the preview beforehand
The import summary Shopify shows after a job finishes will tell you how many rows succeeded, failed, or were skipped. A “successful” import can still have silently ignored several rows if their handles didn’t match anything in your store.
What should the descriptions themselves actually say?
Getting the CSV mechanics right only matters if what you’re putting into that Body (HTML) column earns its place on the page. A structure that works across most Shopify catalogues follows five loose sections: a benefits-led opening line, a specifications block, a comparison or sizing block where relevant, and a closing note on care or use-case.
That structure isn’t just for human shoppers skimming on mobile. Structured blocks of specs and sizing make it easier for AI shopping agents to extract facts reliably from a product page, which increasingly matters as more purchase research happens through AI-driven answers rather than a search results page.
Merchant guidance settles on a moderate product description length generally recommended for clarity and SEO effectiveness, with a shorter benefits-led opener carrying the emotional pitch before the specs take over, according to community discussion on content length.
Simple SKUs, a plain t-shirt, a single-colour mug, don’t need all five sections stretched out. Compress the comparison and care blocks into a line or two rather than forcing padding just to hit a word count.
A short SEO checklist worth running against every batch before you import:
- Primary keyword appears naturally in the opening sentence and at least once in the specs block
- Meta description is unique per product, not a copy-paste of the Title field
- Image alt text describes the product specifically, not just “product photo”
- Basic product schema is present so search engines can parse price, availability, and reviews correctly
Our guide on Shopify product schema covers how to check whether that markup is actually rendering. For category-wide updates, build one template per product type (apparel, electronics, consumables) rather than writing every listing from a blank page, and reserve manual review time for your highest-traffic SKUs rather than spreading equal attention across the whole catalogue. The partner guide on optimising product pages for 2026 has further tactical detail on the SEO side of this if you want to go deeper.
Should you use third-party tools to bulk edit descriptions before import?
Editing hundreds of descriptions by hand inside a spreadsheet is slow and error-prone, particularly once HTML tags enter the picture. Third-party apps built specifically for bulk description editing, or AI drafting tools, tend to handle two problems spreadsheets don’t: generating genuinely varied copy across dozens of similar SKUs, and outputting clean HTML automatically instead of you typing tags by hand.
Shopify’s own AI feature, Shopify Magic, can generate description drafts directly from product details, and the guidance around it is consistent: use AI for the first pass, then edit manually. AI drafts tend to drift toward generic manufacturer-style phrasing if left untouched, and they occasionally get a spec wrong, so a human check before publishing catches both problems.
The practical workflow that scales best isn’t finding one perfect tool, it’s building a repeatable cycle: generate or template a draft, review against actual product data, export to CSV in the correct format, import with overwrite, then monitor how the change affects organic traffic and conversion rate over the following weeks. That monitoring step gets skipped more often than it should. A description rewrite that tanks conversion on your bestseller is worth catching within days, not at the next quarterly review.
Whichever tool generates the draft, the CSV rules stay the same afterwards: HTML tags in Body (HTML), UTF-8 encoding, and a preview before you commit to the full catalogue.
How do you localise or translate descriptions during a CSV import?
If you sell into more than one language market, translated descriptions need their own handling inside the CSV structure rather than being bolted onto the main Body (HTML) column. Shopify’s markets and translation features store localised content separately from the base product record, so a translated description for French or German shoppers doesn’t simply overwrite the English one, it sits alongside it.
The practical approach for a bulk project: finalise and import your base-language descriptions first, confirm they’re correct on the live site, then handle translations as a distinct pass using Shopify’s translation editor or a locale-specific CSV workflow rather than trying to cram every language into one file. Mixing languages inside a single Body (HTML) column, hoping Shopify will sort them by locale automatically, doesn’t work and creates a confusing product page.
A few things worth checking before you localise at scale:
- Confirm which markets are active in your Shopify settings before assuming a translation will display anywhere
- Keep HTML structure consistent across language versions, translated bullet points still need
<li>tags, not just translated text pasted into the same cell - Watch encoding closely here specifically. Non-English characters, accents, umlauts, and non-Latin scripts are exactly where UTF-8 failures show up most often, since these are the characters that get mangled when a file is accidentally saved in the wrong format
- Treat each locale as its own small test-and-import cycle rather than one giant multilingual batch, so a mistake in one language doesn’t touch the others
Translation work is one of the few parts of this process where rushing the batch size genuinely costs you more time later than doing it in smaller, verified chunks.
How do you update descriptions without wiping other product data?
The overwrite option is powerful precisely because it’s total: it applies every column in your CSV to the matching handle, not just the columns you meant to change. That’s the single most common way store owners accidentally lose data during a descriptions-only update, they export a partial file, add descriptions, and re-import, not realising the missing columns get treated as blank rather than “leave unchanged.”
The safest pattern is to always start from a full, current export rather than a trimmed-down file. Export everything, edit only the Body (HTML) column, leave every other column exactly as it came out, then re-import with overwrite. Because every other field matches what’s already live, nothing else changes, only the description does.
If you’re working from a partial file for a good reason, perhaps you’re managing descriptions in a separate system, keep the untouched columns populated with their current values rather than leaving them empty. An empty Variant Price cell in an overwrite import doesn’t mean “don’t touch the price,” it can mean “set the price to nothing,” depending on the field. When in doubt, populate rather than omit.
For anything beyond a straightforward description swap, appending new information to an existing description rather than replacing it entirely, pull the current Body (HTML) value into your working file first, add your new content around it, and re-export. That way the update layers onto what’s there instead of starting from a blank cell and losing the parts you meant to keep.
What do practitioners get wrong when bulk-updating descriptions?
The mistake that costs people the most time isn’t a formatting error, it’s skipping the small test batch because “it’s just descriptions, what could go wrong.” A single overwrite import touches every matched handle at once, and a missing column or a stray find-and-replace catches products you never meant to include.
A find-and-replace across a thousand rows of HTML is genuinely useful, but run it on a copy first and scan the diff before touching the live file. In practice, category templates save more time than clever spreadsheet formulas: build one HTML skeleton per product type, drop in variables per SKU, and you’ll write far less repetitive markup by hand. A quick mobile preview after import catches line-break and spacing issues that look fine in the admin desktop view but break on a phone screen.
Our step-by-step tutorial is worth a look if you want to see the whole draft-to-CSV workflow in practice rather than piecing it together from documentation alone.
— Jamie Moss
Speed up safe bulk description updates with Merchup AI
Merchup AI turns the slowest part of this whole process, writing and HTML-formatting hundreds of descriptions by hand, into a task measured in minutes rather than days.
Instead of drafting copy in a spreadsheet and manually wrapping every paragraph and bullet in HTML tags, Merchup AI generates description drafts against your product data, applies a drag-and-drop template consistently across a whole category, and outputs content already formatted correctly for the Body (HTML) column. That removes two of the most error-prone steps in a bulk import: writing enough unique copy to avoid duplicate-content issues across similar SKUs, and hand-coding HTML tags that a single missed closing bracket can break. The content lines up with the CSV structure this article has walked through, so the overwrite step at import time behaves as expected. See the workflow in the 30 second tutorial, or start generating descriptions for your own catalogue on the Merchup AI product page.





Comments
No comments yet — be the first to share what you think.