A

Structured data

MEDIUM

Product `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
  1. In your Product JSON-LD template, set `"brand": { "@type": "Brand", "name": {{ product.vendor | json }} }`.
  2. Admin → Products: confirm every product has the `Vendor` field populated.

BigCommerce

A few minutes
  1. Catalog → Brands → create or verify each brand, then assign every product to one.
  2. In `templates/components/products/product-view.html`, the JSON-LD should reference `"brand": { "@type": "Brand", "name": "{{product.brand.name}}" }`.

WooCommerce

A few minutes
  1. Install "WooCommerce Brands" or "Perfect Brands for WooCommerce".
  2. Assign every product to a Brand; Yoast/RankMath emit it as `Product.brand` automatically once the taxonomy is active.

Custom / headless

Developer
  1. Bind `brand` in your Product JSON-LD block to your brand field.
  2. 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.

schema.org/brand

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.

Related structured data checks

← All 82 checks