Skip to content
Published Authored byBilly Reiner

Schema · How-to

Shopify Brand schema

Brand is the Schema.org type for the entity that manufactures or markets a product1. On Shopify, most themes auto-emit a Brand object inside Product with name derived from product.vendor3. Google's merchant listing documentation asks only for brand.name4. The optional 2026 upgrade: add Schema.org's logo, url, and sameAs so other parsers can tie the brand to a real entity, not a free-text field.

Shopify's own Catalog optimisation doc names Vendor among the seven product fields AI platforms read2. Brand in JSON-LD is the structured-data version of that Vendor field. When the brand IS the merchant (most DTC Shopify stores), link Brand to the site-wide Organization with a shared @id so the two entities consolidate into one in AI engine knowledge graphs.

What Brand schema is

Per Schema.org v30.0, Brand is 'a name used by an organization or business person for labeling a product, product group, or similar.' Brand inherits from Intangible (Thing > Intangible > Brand). Most-used properties: name (Text), logo (ImageObject or URL), url (URL), sameAs (URL — reference pages disambiguating the brand's identity), slogan, aggregateRating, review.

Mental model: Brand is the manufacturer or marketer label attached to a Product or Service. It is not the merchant Organization that runs the storefront — though on a single-brand DTC Shopify store, the two are often the same entity. When that's the case, the cleanest implementation gives Brand and Organization a shared @id, so AI engines consolidate them.

How Brand maps to Shopify's product.vendor

Shopify's product model includes a Vendor field (Admin > Products > [product] > Product organization > Vendor). Most Shopify themes derive Brand.name from product.vendor in the auto-emitted Product schema. For a single-brand store, every product carries the same Vendor and the auto-emitted Brand is consistent. For a multi-brand retailer (a store selling 50 vendors' products), Brand.name correctly varies per product. The auto-emission usually stops at Brand.name — logo, url, and sameAs are the merchant's job.

Brand fields and what to populate

The Brand properties most-used on Shopify storefronts: name (the one Brand property Google's merchant listing documentation asks for, as brand.name), logo (ImageObject or URL — recommended; the brand's wordmark or symbol), url (URL — recommended; the brand's home page), sameAs (URL — recommended; Wikipedia, Wikidata, the brand's social profiles, the manufacturer's own site if different from the merchant).

  • name — the essential one; Google recommends brand.name on merchant listings4. On Shopify: {{ product.vendor | json }}, with no quotes around it.
  • logo — optional (Schema.org). For a single-brand store: {{ shop.brand.logo | image_url: width: 600 | prepend: 'https:' | json }} if you've set the Shopify Brand asset (image_url returns a protocol-relative URL6), or a metafield URL. A plain URL is enough; don't hard-code a width and height, because width: 600 fixes only the width. Google's Organization logo guideline asks for at least 112x112 px.
  • url — optional (Schema.org). For a single-brand store: {{ shop.url }}. For a multi-brand store: a per-vendor metafield URL if available.
  • sameAs — optional (Schema.org). URLs to the brand's verified profiles — Wikipedia/Wikidata first, then Instagram, X, LinkedIn, Facebook. For a single-brand DTC store, this is the brand's full social footprint.
  • slogan — optional. The brand tagline. Useful for AI engine entity attribution.

JSON-LD example — Brand as Product sub-object

The block below is the Brand sub-object inside your Product block (the one that replaces the theme's structured_data line) for a Shopify single-brand DTC store. The logo prints only when Settings > Brand has one. It references the site-wide Organization (defined separately in theme.liquid) by @id, so AI engines treat Brand and Organization as one consolidated entity.

JSON-LD Brand inside Product, referencing Organization by @id
"brand": {
  "@type": "Brand",
  "@id": "{{ shop.url }}#organization",
  "name": {{ product.vendor | json }},
  "url": "{{ shop.url }}",
  {%- if shop.brand.logo %}
  "logo": {{ shop.brand.logo | image_url: width: 600 | prepend: 'https:' | json }},
  {%- endif %}
  "sameAs": [
    "https://www.instagram.com/yourbrand/",
    "https://www.linkedin.com/company/yourbrand",
    "https://x.com/yourbrand"
  ]
}

For a multi-brand store, drop the logo, url, sameAs fields and emit Brand with just name derived from product.vendor. Better to ship a structurally correct minimal Brand than a fake enriched one.

Validation

Rich Results Test against a PDP with Brand authored should report Product detected, the brand name parsed inside Product, zero errors. Google reads only brand.name for merchant listings, so logo, url and sameAs won't change what the test reports; check them in the Schema Markup Validator.

For Merchant Center alignment, Brand must match the brand attribute in the Merchant Center feed. Mismatch (e.g. JSON-LD says 'Acme Co.' while the feed says 'Acme Company') causes Merchant Center disapproval even when both are structurally valid Brand entities. Audit both sources before going live.

Shopify gotchas

Three Shopify-specific gotchas. First: empty product.vendor — if a merchant leaves the Vendor field blank on a product, Shopify's auto-emitted Brand object emits with an empty name, which validators flag. Always populate Vendor or wrap the Brand emission in a Liquid conditional. Second: vendor not matching brand — some Shopify stores use Vendor as an internal supplier name instead of the consumer brand. Audit which value is in product.vendor before assuming. Third: printing product.vendor inside quote marks instead of through | json, which breaks the JSON when a vendor name contains a double quote or backslash. (Apostrophes, as in Levi's, are fine inside a JSON string; | escape would turn them into HTML entities.)

A fourth gotcha for stores running the Shopify Brand asset (Shop.brand): the shop.brand.logo Liquid object only returns a value if the merchant has populated Settings > Brand > Logo. Older stores often have this empty — verify before referencing in the JSON-LD, or branch with a Liquid conditional.