HomeBlog › Shopify brand entity markup for AI agents

Shopify brand entity markup for AI agents: Organization sameAs, Knowledge Graph disambiguation, and the brand property gap

2026-06-13 — ~16 min read — Brand entitysameAsOrganization schemaKnowledge GraphShopify Liquid

When a ChatGPT Shopping query mentions "Patagonia fleece under $100," the AI agent doesn't just match the string "Patagonia" — it resolves that string to a Knowledge Graph entity, then surfaces products from stores whose structured data links to that entity. Without sameAs on your brand markup, your "Patagonia" is an anonymous string. With sameAs, it's a verified entity reference that places your products inside the brand's recognized catalog. Over 89% of Shopify stores output a bare brand.name string with no entity links whatsoever.

89%
of Shopify stores have no Organization entity with sameAs links in their structured data
73%
of brand-filtered AI shopping queries use entity resolution, not string matching, to identify the target brand
4.1×
higher inclusion rate in branded AI shopping results for stores with verified brand entity markup vs. bare name strings
<45 min
to add Organization entity + sameAs + product brand references to a Dawn theme with this guide's snippet

Why AI agents resolve brand entities, not brand strings

Large language model-based shopping agents — ChatGPT Shopping, Perplexity Shopping, Google AI Mode, Shopify Global Catalog — don't work with raw strings the way a keyword search engine does. They operate on entities: nodes in a knowledge graph that represent real-world things with known properties and relationships. A brand is an entity: it has a canonical identity, a legal name, a founding date, social profiles, a headquarters address, and so on.

When a shopper query mentions a brand, the AI agent's first step is entity linking: mapping the surface string (e.g., "Patagonia") to its canonical entity in the knowledge graph (e.g., Wikidata item Q672893, the outdoor apparel company founded in 1973 by Yvon Chouinard). The agent then expands that entity to its known properties — official domains, authorized retailer relationships, product categories — and uses those to rank and filter product results.

A Shopify store whose Product JSON-LD says "brand": {"@type": "Brand", "name": "Patagonia"} is giving the AI agent a string to match. That string is ambiguous: there are dozens of entities named "Patagonia" — travel agencies, restaurants, map regions, regional food brands. An AI agent cannot reliably disambiguate from a bare string alone, especially in a multilingual or multi-market context.

A store whose JSON-LD instead says "brand": {"@type": "Brand", "@id": "https://yourstore.com/#brand-patagonia", "name": "Patagonia", "sameAs": ["https://www.wikidata.org/wiki/Q672893", "https://en.wikipedia.org/wiki/Patagonia_(clothing)", "https://www.linkedin.com/company/patagonia"]} is giving the agent a confirmed entity link. The resolution is immediate and unambiguous: your "Patagonia" is the outdoor apparel brand, and the agent can apply all of Patagonia's known properties when evaluating your listing.

Entity linking vs. string matching. String matching finds "Patagonia" wherever it appears. Entity linking finds the node representing the specific Patagonia that sells outdoor gear, and surfaces products from stores confirmed to carry it. The same gap explains why brand-filtered queries increasingly favour stores with entity-linked brand markup — the agent is more confident in the match.

Brand vs. Organization: which type to use and when

Schema.org defines two types commonly used for brand markup:

Schema.org: Brand
@type
Brand — a subtype of Intangible. Represents a brand associated with a product or service. Lightweight. Expected on Product's brand property.
Key properties
name, sameAs, logo, description, url. Does not support address, contactPoint, numberOfEmployees, or legal identity fields.
Best for
Multi-brand retailer scenarios where you need to mark up a third-party brand on individual products without declaring a full organization entity.
Schema.org: Organization (and subtypes)
@type
Organization, Corporation, LocalBusiness, etc. — represents a real-world legal or operational entity. Richer than Brand. Schema.org allows Organization where Brand is expected on the brand property.
Key properties
name, url, logo, sameAs, address, contactPoint, legalName, taxID, vatID, foundingDate, numberOfEmployees. Full legal identity support.
Best for
Your own business entity: the site-level declaration in theme.liquid that defines who you are. Also use as the brand when the manufacturer and the retailer are the same entity (DTC model).

The recommended architecture for a DTC Shopify store:

  1. Declare a site-level Organization entity in theme.liquid with @id: "https://yourdomain.com/#organization" and all applicable sameAs links.
  2. On each Product JSON-LD block, set brand to a Brand (or Organization) object that references the site entity via @id and repeats the key sameAs values.

This way, the site-level entity is the authoritative definition, and product-level brand properties are lightweight references that inherit entity confidence from the parent declaration.

The site-level Organization entity: @id, sameAs, and the URL pattern

The site-level Organization block belongs in theme.liquid, not in a product template. It should appear on every page of your store and define your business identity once, authoritatively. Here is the complete structure:

{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": "https://yourstore.com/#organization",
  "name": "Your Brand Name",
  "legalName": "Your Brand Name, Inc.",
  "url": "https://yourstore.com/",
  "logo": {
    "@type": "ImageObject",
    "url": "https://yourstore.com/assets/logo.svg",
    "width": 200,
    "height": 60
  },
  "description": "One sentence describing what you sell and who you serve.",
  "foundingDate": "2021",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Commerce St",
    "addressLocality": "Austin",
    "addressRegion": "TX",
    "postalCode": "78701",
    "addressCountry": "US"
  },
  "contactPoint": {
    "@type": "ContactPoint",
    "contactType": "customer service",
    "email": "support@yourstore.com"
  },
  "sameAs": [
    "https://www.wikidata.org/wiki/Q...",
    "https://en.wikipedia.org/wiki/Your_Brand",
    "https://www.linkedin.com/company/your-brand",
    "https://www.crunchbase.com/organization/your-brand",
    "https://www.facebook.com/yourbrand",
    "https://www.instagram.com/yourbrand",
    "https://twitter.com/yourbrand",
    "https://www.youtube.com/@yourbrand"
  ]
}

Three rules govern the @id convention:

  1. Use the homepage URL + a fragment. The conventional form is https://yourdomain.com/#organization. The fragment #organization is not a real anchor — it's a convention borrowed from how Google's structured data guidelines recommend forming entity identifiers within a domain.
  2. The @id must be consistent across all pages. If your product JSON-LD references "brand": {"@id": "https://yourstore.com/#organization"}, that exact string must match what's declared in the site-level block. A mismatch — even a trailing slash difference — breaks the entity link.
  3. Never use a product page URL or a collection URL as the @id. Those URLs change. The homepage URL is stable and is the canonical authority for your domain's entity identity.

sameAs links that AI agents prioritize

Not all sameAs links carry equal weight. AI agents use these signals to score entity confidence — the more authoritative and cross-referenced the source, the higher the confidence that your brand entity is genuine and correctly identified.

Source URL pattern Priority Notes
Wikidata https://www.wikidata.org/wiki/Q{id} Highest Primary structured knowledge base for LLMs. If you have a Wikidata item, this is your most valuable sameAs.
Wikipedia https://en.wikipedia.org/wiki/Brand_Name Highest Wikipedia articles are a prerequisite for most Knowledge Graph panels. Brands with articles are treated as established entities.
Google KG https://www.google.com/search?kgmid=/g/{id} High Direct Knowledge Graph entity URL. Find your kgmid via the Knowledge Graph Search API or by inspecting your Google Search knowledge panel.
LinkedIn Company https://www.linkedin.com/company/slug High Primary corporate identity verification source. Used by B2B-oriented AI agents and for trust scoring.
Crunchbase https://www.crunchbase.com/organization/slug Medium Startup and business data. Used by research-oriented agents. More relevant for younger or VC-backed brands.
Facebook https://www.facebook.com/brandslug Medium Use the canonical page URL, not a numeric ID URL. Verify it is the official page (checkmark present).
Instagram https://www.instagram.com/brandhandle Medium High-signal for DTC and lifestyle brands where Instagram is the primary brand channel.
Twitter / X https://twitter.com/brandhandle Medium Use the twitter.com form (not x.com) for cross-system compatibility. Both resolve, but twitter.com has broader sameAs recognition.
YouTube https://www.youtube.com/@handle Lower Include if you actively publish video content. Less weight than LinkedIn or Wikidata for pure brand resolution.
Emerging brands without Wikidata or Wikipedia entries: Most Shopify stores under 5 years old won't have these. That's fine — list LinkedIn, Crunchbase (if applicable), and your official social profiles as the minimum viable sameAs set. As the brand grows, a Wikidata item can be created (it's an open database — any notable business qualifies). A Wikidata entry is the single highest-leverage sameAs you can add to your entity markup when the brand is ready for it.

Product brand property: the @id linking pattern

The product-level brand property is where most Shopify stores fail. Dawn themes output this:

{
  "@type": "Product",
  "name": "Trail Running Jacket",
  "brand": {
    "@type": "Brand",
    "name": "Patagonia"
  }
}

This is a floating entity — a Brand with a name and no identity signals. The AI agent sees "Patagonia" and must guess which Patagonia this is from context alone. The correct pattern links to the site-level entity or declares its own sameAs set:

Pattern A — DTC store (your brand = your store entity):

{
  "@type": "Product",
  "name": "Trail Running Jacket",
  "brand": {
    "@type": "Organization",
    "@id": "https://yourstore.com/#organization",
    "name": "Your Brand Name"
  }
}

Here, the @id ties the product-level brand declaration back to the full Organization entity defined in theme.liquid. The AI agent resolves the @id to the entity with all its sameAs links — you don't need to repeat them on every product.

Pattern B — multi-brand retailer (you carry third-party brands):

{
  "@type": "Product",
  "name": "Trail Running Jacket",
  "brand": {
    "@type": "Brand",
    "@id": "https://yourstore.com/#brand-patagonia",
    "name": "Patagonia",
    "url": "https://www.patagonia.com/",
    "sameAs": [
      "https://www.wikidata.org/wiki/Q672893",
      "https://en.wikipedia.org/wiki/Patagonia_(clothing)",
      "https://www.linkedin.com/company/patagonia",
      "https://www.instagram.com/patagonia"
    ]
  }
}

In Pattern B, the @id is a local identifier — it marks this declaration as your store's definition of the Patagonia entity — while sameAs provides the external references that link it to the actual Patagonia corporate entity in external knowledge bases. The url property pointing to Patagonia's official domain adds another disambiguation signal.

The multi-brand scenario: boutiques and marketplace stores

Shopify stores that carry multiple brands — a boutique selling 30 apparel labels, a sporting goods store carrying a dozen equipment brands — face a different problem than DTC stores. They cannot define a single site-level brand entity and reference it from every product. Each product belongs to a different brand entity with different sameAs links.

The practical solution is a brand metafield that stores a JSON array of sameAs URLs per brand. Here's how to structure the metafield:

Then in your product Liquid template, you serialize this metafield into the sameAs array on the brand object. The full Liquid snippet in the next section handles both the DTC and multi-brand cases.

For multi-brand stores, also maintain a separate brand reference file (a Shopify page or a JSON file in assets/) that lists every brand you carry with its canonical Wikidata/Wikipedia identity. This serves two purposes: it acts as the data source for your metafield population workflow, and it signals to crawlers that you are an authorized retailer of those brands — a trust signal some AI agents use when ranking search results.

What Dawn outputs vs. what it should output

What Dawn 9+ outputs by default
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Trail Running Jacket",
  "brand": {
    "@type": "Brand",
    "name": "Patagonia"
  },
  "offers": {
    "@type": "Offer",
    "price": "149.00",
    "priceCurrency": "USD"
  }
}

/* No @id on brand */
/* No sameAs links */
/* No site-level Organization entity */
/* "Patagonia" is an unresolved string */
What it should output (DTC pattern)
/* In theme.liquid (site-wide): */
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": "https://yourstore.com/#organization",
  "name": "Your Brand",
  "url": "https://yourstore.com/",
  "sameAs": [
    "https://www.wikidata.org/wiki/Q...",
    "https://www.linkedin.com/company/your-brand",
    "https://www.instagram.com/yourbrand"
  ]
}

/* In product template: */
{
  "@type": "Product",
  "name": "Trail Running Jacket",
  "brand": {
    "@type": "Organization",
    "@id": "https://yourstore.com/#organization",
    "name": "Your Brand"
  }
}

The left side is what 89% of Shopify stores ship. The right side is what resolves entity identity for AI agents. The gap is not a complex schema.org feature — it's two additions: a site-level entity block in theme.liquid, and an @id reference on the product-level brand property.

Liquid implementation for Dawn themes

The implementation has two files: theme.liquid for the site-level Organization, and snippets/product-brand-schema.liquid for the product-level brand property. Split into a snippet so you can call it from main-product.liquid and any other templates that output Product JSON-LD.

Step 1 — Site-level Organization entity in theme.liquid

Add this block inside the <head> section of theme.liquid, after your existing JSON-LD blocks. Replace all placeholder values with your real data.

{% comment %} Site-level Organization entity for brand disambiguation {% endcomment %}
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": {{ shop.url | append: "/#organization" | json }},
  "name": {{ shop.name | json }},
  "url": {{ shop.url | append: "/" | json }},
  "logo": {
    "@type": "ImageObject",
    "url": {{ shop.url | append: "/assets/logo.svg" | json }}
  },
  "description": {{ shop.description | json }},
  "email": {{ shop.email | json }},
  "sameAs": [
    {% comment %}
      Replace these with your actual sameAs URLs.
      Store them in a global metafield or hardcode them here.
      Minimum viable set: LinkedIn + one social profile.
      Priority set: Wikidata + Wikipedia + LinkedIn + Instagram.
    {% endcomment %}
    "https://www.linkedin.com/company/{{ shop.handle }}",
    "https://www.instagram.com/{{ shop.handle }}",
    "https://www.facebook.com/{{ shop.handle }}"
  ]
}
</script>
Hard-code vs. metafield for sameAs: The sameAs array cannot be reliably sourced from shop.handle alone — your LinkedIn slug, Instagram handle, and Wikidata ID are not necessarily the same as your Shopify store handle. The cleanest approach is to store the full sameAs JSON array in a shop-level metafield (custom.same_as, type json) via the Shopify admin, then output it in Liquid as {{ shop.metafields.custom.same_as | json }}. For most stores, hardcoding the 3-5 sameAs URLs directly in theme.liquid is simpler and less error-prone.

Step 2 — Product brand snippet (snippets/product-brand-schema.liquid)

Create a new file at snippets/product-brand-schema.liquid. This snippet outputs the brand property object for use inside Product JSON-LD. It handles both the DTC case (brand = your store) and the multi-brand case (brand = third-party brand with its own sameAs).

{% comment %}
  snippets/product-brand-schema.liquid
  Outputs brand entity JSON for Product JSON-LD.
  Usage: {% render 'product-brand-schema', product: product %}

  Supports two patterns:
  A) DTC — brand is your own Organization: brand.same_as metafield is blank.
     Output: @id reference to site Organization entity.
  B) Multi-brand — brand.same_as metafield is a JSON array of URLs.
     Output: Brand object with its own @id and sameAs links.
{% endcomment %}

{%- liquid
  assign brand_name = product.vendor
  assign brand_same_as = product.metafields.brand.same_as.value
  assign org_id = shop.url | append: "/#organization"
-%}

{%- if brand_same_as != blank -%}
  {%- comment %} Multi-brand pattern: third-party brand with its own sameAs {% endcomment -%}
  {%- assign brand_slug = brand_name | handleize -%}
  {%- assign brand_local_id = shop.url | append: "/#brand-" | append: brand_slug -%}
  "brand": {
    "@type": "Brand",
    "@id": {{ brand_local_id | json }},
    "name": {{ brand_name | json }},
    "sameAs": {{ brand_same_as | json }}
  }
{%- else -%}
  {%- comment %} DTC pattern: brand is the store Organization entity {% endcomment -%}
  "brand": {
    "@type": "Organization",
    "@id": {{ org_id | json }},
    "name": {{ brand_name | json }}
  }
{%- endif -%}

Step 3 — Reference the snippet in main-product.liquid

Inside the Product JSON-LD block in sections/main-product.liquid, replace the existing brand block with a render call to your new snippet:

{% comment %} Find your existing brand output — looks like this: {% endcomment %}
"brand": {
  "@type": "Brand",
  "name": {{ product.vendor | json }}
},

{% comment %} Replace it with: {% endcomment %}
{% render 'product-brand-schema', product: product %},

After adding these two changes, validate with Google's Rich Results Test and Schema.org's validator. The product JSON-LD should show an @id on the brand object and either a sameAs array (multi-brand) or a reference to the site Organization entity (DTC).

Step 4 — Populate the brand.same_as metafield for multi-brand stores

For multi-brand retailers, you need to populate the brand.same_as metafield for each product. Options:

  1. Shopify admin bulk editor — navigate to Products → any product → Metafields → add brand.same_as (JSON type) → paste the sameAs array. Repeat per brand. Best for stores with <20 brands.
  2. Shopify import CSV — add a metafield column Metafield: brand.same_as [json_string] to your product CSV and bulk import. Best for 20-200 brands with a clean product export.
  3. Admin API bulk updatePOST /admin/api/2025-01/graphql.json with productUpdate and the metafields input. Best for large catalogs with a developer-managed brand registry.

Five common mistakes that break brand entity markup

Mistake 1

Using a bare string for the brand property. Some custom Shopify themes output "brand": "Patagonia" as a plain string rather than an object. Schema.org does not accept a string value for brand — it expects a Brand or Organization object. A bare string will fail validation and receives no entity resolution credit. Always output an object with at minimum @type and name.

Mistake 2

@id mismatch between theme.liquid and product templates. If your Organization entity in theme.liquid declares "@id": "https://yourstore.com/#organization" but your product template references "@id": "https://yourstore.com#organization" (no trailing slash before the hash), the entity link is broken — these are two different URIs. Trailing slashes, HTTP vs. HTTPS, and www vs. non-www are all significant. Ensure the @id value is character-for-character identical across every file that uses it.

Mistake 3

Listing only social profiles and skipping Wikidata/Wikipedia. Social profile URLs have medium entity resolution confidence — they're self-asserted and the platform doesn't verify your brand identity. Wikidata and Wikipedia entries are independently curated third-party sources that AI knowledge bases actively index. If your brand is eligible for a Wikidata item (a real business that can be verified), create one — it's the highest-leverage sameAs addition you can make. Wikidata is an open database and any notable business qualifies; the bar is lower than Wikipedia.

Mistake 4

Applying your store's Organization sameAs to third-party brands. A boutique that links a Patagonia product's brand to the boutique store's own LinkedIn page is sending a false signal — it says the boutique and Patagonia are the same entity, which they are not. Keep your site Organization sameAs strictly for your own business identity. Third-party brands must have their own sameAs set pointing to their own external profiles, not yours.

Mistake 5

Omitting the Organization entity entirely and only fixing the product brand property. The product-level brand object gains most of its entity confidence by linking back to the site-level Organization entity. If you add @id on the product brand but never declare the full Organization entity in theme.liquid, the @id reference is a dead link — the agent cannot resolve it to a known entity with sameAs signals. Always implement the site-level Organization block first; the product-level brand property is a pointer to it.

FAQ

Does Shopify Dawn output brand entity markup with sameAs by default?
No. Shopify Dawn outputs a Product JSON-LD block that includes a brand property as a simple Brand object with only the name field populated — for example, {"@type": "Brand", "name": "Patagonia"}. There is no @id, no sameAs, and no site-level Organization entity in the default theme. AI shopping agents cannot link your "Patagonia" string to the world-famous outdoor brand's Knowledge Graph entity without sameAs. You need to add the Organization entity and sameAs links manually using the Liquid snippet approach in this guide.
Should I use Brand or Organization as the schema type for my Shopify store's brand markup?
Use Organization (or a more specific subtype like Corporation or LocalBusiness) for your own business entity defined at the site level in theme.liquid. Use Brand for the brand property on individual Product objects when marking up third-party brands — but always include @id and sameAs. For a DTC store where the seller and the brand are the same entity, using Organization for both the site entity and the product brand property is correct and preferred — it signals that the manufacturer/brand identity is your company, not an opaque third party.
What sameAs links carry the most weight for AI shopping agent brand resolution?
In order of entity resolution priority: (1) Wikidata item URL — the primary structured knowledge base used by LLMs; (2) Wikipedia article URL — signals mainstream brand recognition; (3) Google Knowledge Graph entity URL via kgmid — direct signal for Google AI Mode and Google Shopping; (4) LinkedIn Company page — primary B2B and corporate identity verification; (5) Crunchbase — startup and company data used by research-oriented agents; (6) Official social profiles in order: Facebook, Instagram, Twitter/X, YouTube. For emerging brands without Wikidata or Wikipedia entries, LinkedIn plus two social profiles is the minimum viable sameAs set.
Do I need separate sameAs for every brand I sell if I run a multi-brand Shopify store?
Yes — for each brand you carry, the brand property on each Product should include sameAs links for that specific brand, not your own store's links. A boutique selling Nike, Adidas, and Patagonia needs to output each brand as a distinct entity with its own @id and sameAs references on each product JSON-LD block. The recommended implementation is a brand.same_as metafield (JSON type) that stores the sameAs URL array per brand, populated once per brand via bulk edit or import, then serialized into the product JSON-LD via the Liquid snippet in this guide.
Does CatalogScan check for brand entity markup and sameAs links?
Yes. CatalogScan checks whether your Shopify store's product JSON-LD includes a brand property that is an entity object (not a bare string), whether that object has an @id, and whether either the product-level brand or the site-level Organization includes at least one sameAs link to an authoritative external source. Stores that output only a bare {"@type": "Brand", "name": "..."} block with no @id and no sameAs are flagged in the brand entity signal of the 18-signal AI readiness report. Run a free scan to see whether your brand markup passes.

Is your brand entity markup resolving correctly?

CatalogScan checks brand @id, sameAs links, and Organization entity declarations across your entire product catalog — in 90 seconds, no login.

Run a free scan More guides