Why a missing brand holds products back
WooCommerce ships a Brands taxonomy, and once a store starts using it the whole storefront leans on it: the layered-navigation filter, the brand archive page, the brand line in product feeds. A product without a brand isn't listed as “no brand” anywhere. It is simply absent.
- Brand filters skip it. A shopper who narrows the category to the brand they trust never sees the product, however well it matches the rest of their search.
- Brand pages under-count. The brand archive shows a partial range, so a shopper browsing everything from one maker leaves with the wrong impression of what you stock.
- Feeds send an empty attribute. Shopping feeds carry the brand as a field of its own; when it is empty, the listing is weaker in comparison shopping and may be flagged as incomplete.
- Reporting goes quiet. Sales by brand, stock by brand and margin by brand all leave these products out, so the numbers describe only part of the catalog.
How to find missing brands manually
Brands live in the term tables, so the check is a join between products
and their product_brand relationships. This WP-CLI query
lists published products that have none:
wp db query "SELECT p.ID, p.post_title FROM wp_posts p LEFT JOIN ( SELECT tr.object_id FROM wp_term_relationships tr JOIN wp_term_taxonomy tt ON tt.term_taxonomy_id = tr.term_taxonomy_id WHERE tt.taxonomy = 'product_brand' ) b ON b.object_id = p.ID WHERE p.post_type = 'product' AND p.post_status = 'publish' AND b.object_id IS NULL ORDER BY p.ID LIMIT 100;"
Adjust the table prefix if yours isn't wp_. If your store
still uses a separate brands plugin with its own taxonomy, put that
taxonomy name in place of product_brand.
The list is the easy part. The query returns IDs, so fixing a long list means opening each product in wp-admin, finding the right brand in the taxonomy box and saving. It also answers for one moment: the next CSV import that leaves the brand column blank, or the next product created from a supplier feed, puts fresh gaps back on the list with nothing to tell you they are there.
How CatalogLift finds it
Every scan reads the brand assignments as they came from WooCommerce for each published product in the synced catalog. It first checks whether the store uses brands at all; only when at least one published product carries a brand does a product without one become a finding, at medium severity, with the product and the empty brands field as evidence. A store that has never used the Brands taxonomy is not flagged wholesale.
There is no AI on this path, because a brand is a fact about the product, not something to draft. You pick the correct brand from your store's own brand list inside CatalogLift and approve it. Nothing is written before that decision; on it, CatalogLift writes the brand to WooCommerce and the next scan verifies the product now carries one. Because CatalogLift keeps watching, an import that adds products without a brand shows up as a fresh finding instead of a quiet regression, and the first scan costs nothing and needs no card.