Key takeaways
- A Shopify product description is body_html next to the buy box. Under 100 characters fails CRO audit A12.
- Write specs, what’s in the box, who it is for, and care. Do not write ‘premium quality’ five times.
- Five handmade descriptions are the style guide. Sample twenty generated SKUs before you run the rest.
- Catalogue copy, JSON-LD and the meta description should tell one story.
- Rankly generates descriptions, alt text and tags in bulk, in 16 languages, on Starter and Pro.
A Shopify product description is the HTML next to the buy box (body_html). It is what a shopper reads when the photos are not enough. It is what Google pulls from when it rewrites your snippet. It is what ChatGPT quotes when someone asks whether the shirt is lined.
Most catalogues fail this in one of two ways:
- Empty or tiny. A CSV import left
body_htmlblank, or someone typedNice shirt.The CRO Audit for Shopify stores fails A12 — Product description under 100 characters. That miss now names Rankly as the fix. - Long and empty. 600 words of “premium lifestyle essential crafted for the modern wardrobe” with no GSM, no fit, no care, no contents.
This guide is how to write a description a staff member would stand behind, how to do that in bulk, and how to keep it in agreement with meta tags and JSON-LD.
What the description has to do
Three audiences, one field.
| Audience | What they need |
|---|---|
| Shopper | Will this fit, last, wash, and match the photo? |
| Unique on-page copy to quote in a snippet or Shopping context | |
| ChatGPT / other models | Facts that match the Offer: name, material, use, constraints |
If you only write for the shopper, you still win the other two — as long as the facts are on the page, not in an image.
Minimum content that almost always pays:
- What it is, in the shopper’s words (
relaxed linen overshirt, notSKU HLV-04) - Specs you can defend (fabric, weight, dimensions, pack size, voltage, volume)
- What’s in the box
- Fit or use
- Care or constraints (not food-safe, not for children, hang dry)
Optional: origin, certifications (only real ones), who it is for, what it is not.
Not a substitute: reviews, a size chart image with no HTML, or a video with no transcript. Those help. They do not replace body_html.
The 100-character floor (and why it is not a target)
The CRO audit’s A12 check reads catalogue JSON description / body_html character count. Under 100 characters: fail, high confidence, fix with Rankly. Photos and video do not count.
100 characters is roughly one short sentence. A padded everyday-carry grip with a secure hold. is in the neighbourhood. Nice shirt. is not.
Do not pad to 100 with premium quality luxury design. Add a fact. Mid-weight linen overshirt, relaxed fit, corozo buttons, unlined. is already useful and already over the floor.
For search, you will usually want more: a paragraph plus four to eight bullets. Models quote bullets cleanly. Shoppers scan them. HTML lists belong here.
A labelled before / after
Example (labelled example, not a live store). Product: Harbour Linen Overshirt, sage, €120.
Before (48 characters, A12 fail):
Soft linen shirt. Great for summer. Shop now.
After (honest, still short):
Relaxed-fit overshirt in mid-weight OEKO-TEX linen (~185 GSM). Unlined,
with a chest pocket and corozo buttons. Cut to sit mid-thigh.
- Fabric: 100% linen, OEKO-TEX Standard 100 (not organic)
- Fit: relaxed; size down if you want it closer
- Care: cold wash, hang dry; heat will shrink it
- In the box: overshirt, spare button
- Ships from: EU stock
The after version can be checked against a mill cert, a size chart, and a warehouse. The before version cannot. That is the whole quality bar for AI output too: can a staff member point at the fact.
Meta title for the same SKU (see how to write Shopify meta titles and descriptions): Sage Linen Overshirt, Relaxed Fit | Harbour. Meta description: a 150-character cut of the same facts. JSON-LD description should not contradict either. Three fields, one story.
How to write one SKU by hand (the style guide)
Do this on five bestsellers before you generate anything.
- Open the product. Paste specs from the supplier sheet, not from memory.
- Write one paragraph a human would say on the phone.
- Add bullets for scan. Keep HTML simple:
<p>and<ul>. Do not paste a 4,000-pixel infographic as the only description. - Delete adjectives you would not say to a customer who asked “what is it made of?”
- Add the uncomfortable facts: not lined, runs large, not organic, not waterproof. Those cut returns.
- Save. View the live PDP. If the theme hides the description below the fold on mobile, that is a theme problem — the copy still has to exist for crawlers.
Colour-only variants can share this body. Pack-size or material variants need a line that changes. 3-pack in a shared body that also sells singles is how you get the wrong Offer quoted.
Bulk AI without inventing a mill
Native Shopify bulk is a CSV. You can blow away HTML, mismatch handles, and publish 2,000 empty <p><br></p> in an afternoon. Use CSV if you are confident. Use an app if you want a preview and a credit cap.
Rankly generates AI product descriptions, image alt text and tags in bulk, in 16 languages. That sits on Starter ($9.99/mo) and Pro ($29.99/mo). Free (100 AI credits) covers meta titles and descriptions, FAQ schema and alt text — not the bulk description pass. Pro can auto-fill missing SEO when a product changes. Billed in USD through Shopify. Compatible with all themes. Not a ranking package.
A safe bulk loop:
- Hand-write five SKUs. Those are the few-shot pattern (tone, bullet order, forbidden adjectives).
- Generate one collection. Export or open twenty products.
- Kill invented certifications, invented GSM, invented “bestseller”, invented country of origin, gendered claims the photo does not support.
- Confirm HTML lists survived (some generators dump one blob of text).
- Confirm the sage SKU did not get the sand paragraph.
- Then run the rest. On Pro, autopilot can fill missing SEO on product change — still sample new imports.
If the model only sees the title Harbour Linen Overshirt, it will guess a fabric. Feed it the spec sheet or fill metafields first. No spec sheet: write “linen (supplier does not state GSM)” rather than a fake 185.
Languages and Shopify Markets
A French storefront with an English body_html is an English product on a French URL. Models and shoppers both notice.
Starter is the Rankly plan that adds multi-language SEO and AEO for Markets. Pro can auto-translate missing SEO when you add a locale. Missing is the important word: do not blindly overwrite a translator’s page.
Watch:
- Fabric words (
shell,nap,last) - Size systems (EU vs US vs UK — do not convert a 40 to a 40)
- Legal claims (organic, medical, waterproof) that change by market
- Returns windows that differ by country — those belong on the policy page, linked from the description, not invented per SKU
Alt text and meta titles need the same locale pass. Description-only translation leaves the snippet in English.
Keep description, snippet, schema and alt in agreement
Four fields, one catalogue:
| Field | Length | Job |
|---|---|---|
body_html | Paragraph + bullets | Shopper + models |
| Meta description | ~140–155 characters | SERP snippet |
JSON-LD description / Product | Short, true | Offer graph |
| Image alt | One sentence per photo | Access + image search |
The CRO audit C6 fail is when Offer price / availability in JSON-LD disagrees with the catalogue. Description disagreement is the same class of bug in prose: FAQ says unlined, body_html says quilted. Fix at the source (the product), then regenerate the dependents.
Paste the live URL into the ChatGPT SEO check for Shopify stores after a bulk pass. That check reads public JSON-LD, robots.txt and llms.txt. Description length is the CRO audit’s job; structured data is the SEO check’s job. Run both on the same bestseller. Fails on the SEO check name Rankly as the fix-with app.
Tags are operational (linen, overshirt, sage) — filters, not a second essay. Rankly can generate them in the same bulk pass. Collection descriptions are a separate field; do not paste a product body onto a collection. Do not generate medical claims, fake reviews, or prices.
Bulk AI product descriptions are a queue with an editor. Write five. Generate twenty. Delete the lies. Then finish the catalogue. The stores that “tried AI copy” and hated it skipped the sample. The 100-character floor is how you notice they skipped it — and Rankly is the write path when the audit says the body is still empty.
Frequently asked questions
How long should a Shopify product description be?
Long enough to answer fabric, fit, what’s in the box, and care — usually a short paragraph plus bullets. The CRO audit for Shopify stores fails under 100 characters. That is a floor, not a target. 400 honest characters beat 1,200 of adjectives.
Where is the product description in Shopify?
The Description field on the product, stored as body_html. It is not the Search engine listing description (that is the meta description) and it is not alt text on images.
Can I generate Shopify product descriptions with AI?
Yes, if you feed facts and you edit lies. An AI that invents GSM, organic status, or a country of origin is worse than a short honest spec list. Rankly does bulk AI descriptions on Starter and Pro, in 16 languages, with a credit cap per plan.
How do I bulk-edit descriptions in Shopify?
CSV export/import is the native path and it is easy to smash HTML. An SEO app that writes body_html in bulk is the usual merchant path. Always sample a collection before the whole shop.
Do product descriptions help ChatGPT and Google?
Yes. Models quote the page. Google uses on-page copy when it rewrites a snippet. Empty body_html leaves them the title and a packshot. That is not enough to compare two overshirts.
Should every variant have its own description?
If the variants differ by more than colour (pack size, material, voltage, scent), yes — or a shared description plus a variant-specific line. Colour-only variants can share a body and differ in the title, meta title and alt text.



