WooCommerce products without a brand

A product without a brand disappears from the one filter shoppers use most once they know what they want, and it drops out of brand pages and feed attributes along with it. CatalogLift finds every published product with no brand assignment in stores that use brands, so you can set the right one from your own list and let the next scan confirm it.

Categories & attributes Medium severity Fix in CatalogLift

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.

Fair questions, straight answers.

Which brand field does this check look at?

The WooCommerce Brands taxonomy (product_brand), which ships with WooCommerce itself and is what the storefront brand filter, brand archive pages and most feed plugins read. A brand typed into the description or an attribute doesn't count, because nothing on the storefront can filter on it.

My store doesn't use brands at all. Will everything be flagged?

No. The scan only raises this finding for stores that already assign brands to at least one published product. If your catalog has never used the Brands taxonomy, this check stays quiet instead of flagging the whole store.

Does the AI guess the brand for me?

No. A brand is a fact about the product, so there is no AI on this path. You pick the brand from your store's own brand list inside CatalogLift and approve it; nothing reaches WooCommerce before that decision, and the next scan verifies the product now carries a brand.

Are drafts and private products checked too?

This check reads published products only. A product still in draft can wait for its brand; the finding is about products shoppers can already reach whose brand filter silently skips them.

See it on your own catalog.

Create a free account, connect your WooCommerce store and this check runs on your real products, along with the rest.

No card required. The free plan never writes to WooCommerce.