Why a missing description holds products back
The full description is where a product page earns the purchase. It is the text a shopper reads after the photo has caught their eye, the body copy search engines index to understand what the page is about, and the field feeds and marketplaces pull to describe the item. When it is empty, all three fall back to nothing.
- Shoppers have nothing to decide on. A page with a title, a price and a blank Description tab reads as unfinished, and unfinished pages get compared against a competitor's finished one.
- Search engines see a thin page. Without body text, the product page has little to rank for beyond its title, and hundreds of such pages make the whole store look thin.
- Feeds and channels inherit the gap. Product feeds and marketplace listings that read the WooCommerce description ship an empty field, which is often rejected or ranked last.
- Imports create it quietly. A CSV column left blank or a supplier feed without long text publishes products with no description, and nobody notices until someone opens the page.
How to find missing descriptions manually
The full description lives in post_content on the product
post. With WP-CLI, this query lists published products whose
description is empty:
wp db query "SELECT p.ID, p.post_title, m.meta_value AS sku FROM wp_posts p LEFT JOIN wp_postmeta m ON m.post_id = p.ID AND m.meta_key = '_sku' WHERE p.post_type = 'product' AND p.post_status = 'publish' AND TRIM(p.post_content) = '' ORDER BY p.ID LIMIT 50;"
Adjust the table prefix if yours isn't wp_. Drop the
post_status clause to include drafts and private
products.
This finds the empty strings, but not the descriptions that only look
empty: a stray <p> </p> left by the
editor, a couple of line breaks, or a block-editor wrapper with no
text inside all pass a TRIM check while showing a blank
tab to the shopper. It also stops at the list. Writing several hundred
descriptions is the real work, and the query answers once — next
month's import can reintroduce the same gaps without anyone running it
again.
How CatalogLift finds and drafts it
Every scan reads the full description of each current product in the synced catalog, strips the HTML, decodes entities and removes all whitespace before deciding whether anything is left. If nothing is, and the product is in a published status, the product is reported at medium severity with the empty field named as evidence. Draft and private products are left alone until they go live, and the short description is checked separately so the two are never confused.
Because writing the text is the expensive part, this check carries an AI proposal. CatalogLift drafts a description from the product's own catalog data — its title, attributes, category, brand and short description — and never from facts it does not have. Each draft arrives as a before/after diff with evidence and a confidence score. You approve, edit or skip; only decided descriptions are written to WooCommerce, and the next scan verifies they landed. Because CatalogLift keeps watching, a future import that publishes products without descriptions becomes a fresh finding rather than a silent regression. The scan itself is free and nothing in the store changes until you approve.