Structured data
MEDIUMProduct `brand` is a string or Brand/Organization object
Each Product JSON-LD node carries `brand` as either a non-empty string or an object with a non-empty `name`. Brand on every product is a primary agent filter and a required feed field.
What this check looks for
schema.org/brand has range `Text | Brand | Organization`. The legacy v1 check only accepted typed objects and failed plain-string brands — a detection bug. v2 accepts either shape. We require either: (a) a non-empty trimmed string, or (b) an object with a non-empty `name`. Coverage ≥ 90% across PDPs with Product JSON-LD passes; ≥ 50% partial; otherwise fail.
Which AI surfaces it affects
- Google AI Mode (UCP)80
- ChatGPT (ACP)60
- Microsoft Copilot60
- Meta AI60
- Perplexity40
Weighted against the live specs — ACP 2026-04-17, UCP 2026-04-08.
How to fix it
Emit `brand` as either a string or a typed Brand object on every Product
Shopify
A few minutes- In your Product JSON-LD template, set `"brand": { "@type": "Brand", "name": {{ product.vendor | json }} }`.
- Admin → Products: confirm every product has the `Vendor` field populated.
BigCommerce
A few minutes- Catalog → Brands → create or verify each brand, then assign every product to one.
- In `templates/components/products/product-view.html`, the JSON-LD should reference `"brand": { "@type": "Brand", "name": "{{product.brand.name}}" }`.
WooCommerce
A few minutes- Install "WooCommerce Brands" or "Perfect Brands for WooCommerce".
- Assign every product to a Brand; Yoast/RankMath emit it as `Product.brand` automatically once the taxonomy is active.
Custom / headless
Developer- Bind `brand` in your Product JSON-LD block to your brand field.
- Use the object form for cross-catalog disambiguation.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Example Hat",
"brand": {
"@type": "Brand",
"name": "Acme"
},
"offers": {
"@type": "Offer",
"price": "49.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
}
}
</script>The spec it's pinned to
schema.org/brand — Text | Brand | Organization
schema.org/brand accepts a Text string OR a Brand/Organization object. Either is valid; typed objects help agents disambiguate brand entities across catalogs.
Google merchant listing — brand recommended
Google's merchant listing rich result recommends `brand`; either text or a typed object is accepted.
Does your store pass this check?
Run the full audit — 82 checks across five AI shopping surfaces. Most tools only check whether you get mentioned; we check whether an agent can buy from you.