← Back to writing
Writing · structured data

When Two Schema Graphs Collide, AI Drops Your Brand

By Leo Nguyen · Sep 10, 2026 · 4 min read
When Two Schema Graphs Collide, AI Drops Your Brand
Jump to section

Short version: A shopping agent doesn't read your page. It reads your graph — and most stores ship two of them without knowing it. When two JSON-LD graphs disagree, the agent doesn't merge them. It picks one. If it picks the half without your brand, it answers a buyer's question about you using someone else's facts — confidently, and with no error message anywhere.

#A shopping agent reads your graph, not your page

Most Shopify and Magento stores emit structured data (JSON-LD) from more than one source without realizing it: the theme ships its own Product, Organization, and BreadcrumbList nodes, and an SEO or reviews app ships its own set too. Both are valid. Both load. And that's the problem.

When an AI agent parses your product page, it doesn't merge the two graphs into one tidy picture. It picks. And it has no way of knowing which of your two Organization nodes is the "real" one — so it may grab the graph that's missing your brand, missing your @id links, or pointing brand at a store handle instead of the actual manufacturer.

The result isn't an error message. It's worse: the agent answers confidently, using the wrong half of your own data.

#What this looks like in the wild

On one US Shopify furniture retailer we worked with (30,855 products), the theme and an SEO app were each emitting their own Product, Organization, and Breadcrumb nodes. The graph an agent latched onto had brand attached to nothing meaningful.

In a 20-cell before/after test across four AI agents, one of them — Gemini — didn't just omit the brand. It confidently described the retailer as the wholesale brand it merely carries, and concluded it therefore "cannot sell" one of its own actual product lines. Wrong entity, wrong catalog, delivered with total confidence.

That's the signature of a competing-graph problem: not silence, but confident misidentification. An agent that can't tell who you are will answer questions about you using someone else's facts.

#Why "more schema" makes it worse, not better

The instinct when visibility is poor is to add more structured data — install another schema app, turn on more node types. If you already have a competing-graph problem, that's adding a third voice to an argument the agent is already losing.

The fix isn't more. It's one clean graph:

  1. Find every JSON-LD source. View-source on a product page and count your application/ld+json blocks. More than one Product or Organization? You have competing graphs.
  2. Deduplicate. Pick one owner for each node type — usually the theme for Product/Breadcrumb, one source for Organization. Turn off the duplicates in the other app.
  3. Wire @id so the graph references itself. Product should point to your Organization via a shared @id, and brand should resolve to the real manufacturer entity — not your store handle. This is what lets an agent connect "this product" to "this brand" to "this seller" as one coherent object.

On that retailer, deduplicating the graph and re-attaching brand to Product via a shared @id was one of five correctness fixes shipped in ten days. On re-test, the brand-entity hallucination was gone — the agent named the correct product, the correct retailer. The full narrative — symptom, cause, five fixes, dated before/after — is in Four AI Agents Told Shoppers This Furniture Store Was Out of Stock, and the client-approved case page is at luma-e.com/work/home-elegance-usa-ai-agent-commerce-readiness-2026.

#The 30-second check for your own store

Open a product page, view-source:, and search (Ctrl+F) for "@type":"Organization" and "@type":"Product". Count them. If either appears more than once, or if brand shows your store's handle instead of the manufacturer's name, an agent reading your page has to guess which version of you is true — and it will sometimes guess wrong, out loud, to a buyer.

Correctness before visibility. A store the agent reads correctly is the floor you build everything else on — the same floor that makes entity authority and citations possible in the first place.


Send one store URL and we'll run a free async AI-correctness read: we ask live AI agents about your products, check which schema graph they actually resolve, and send back a named punch-list of exactly where your JSON-LD disagrees with itself and how an agent is describing you as a result: luma-e.com/ai-readiness. No call required.

Frequently asked
Why does my store have two sets of JSON-LD?
Because more than one source is emitting it. Your theme ships its own Product, Organization, and BreadcrumbList nodes, and an SEO or reviews app ships its own set too. Both are valid schema, both load on the page, and neither knows about the other. To an AI agent parsing the page, that's two competing descriptions of who you are — and it has to pick one.
Will adding more schema apps fix low AI visibility?
Often it makes things worse if you already emit competing graphs — you're adding a third conflicting voice to an argument the agent is already losing. The fix isn't more structured data, it's one clean graph: deduplicate to a single owner for each node type, then wire @id so the nodes reference each other and brand resolves to the real manufacturer.
How do I check for competing graphs in 30 seconds?
Open a product page, view-source, and Ctrl+F for "@type":"Organization" and "@type":"Product". Count them. If either appears more than once, or if brand shows your store's handle instead of the manufacturer's name, an agent reading your page has to guess which version of you is true — and it will sometimes guess wrong, out loud, to a buyer.
NEWSLETTER

More like this, only when it's worth it

Occasional email on AI x ecommerce - how agents read stores, what breaks, what we shipped. No weekly filler.

No spam, no sequence-drip. Unsubscribe anytime.