Product

Topic Engine Content Engine Code-to-Docs AEO Rank Research-Driven Content Autopilot Visibility Tracking Website & Migration Content Factory AEO Agency Pricing

Resources

Browse all resources → Latest articles Case Studies Blog FAQ Use Cases Knowledge Base Research Docs

JSON-LD that validates can still leave your entity graph broken

Quick Answer

JSON-LD can pass the Rich Results Test while your Organization, Person and Article share no @id. Test whether every reference resolves to one declared node, not only whether each block parses.

A commenter in a 2022 r/semanticweb thread put the method plainly: "you have to follow the triples down." Nobody has published how AI descriptions of a brand change after the graph gets fixed, and I wish somebody had. So follow them down yourself, starting with the author.

Did this answer your question?

Key Points

  • The Schema Markup Validator checks syntax and vocabulary and Google's Rich Results Test checks rich-result eligibility, so neither tests whether your author, article and company share an @id.
  • In a data.world benchmark, GPT-4 answered enterprise questions 54.2% accurately when grounded in a knowledge graph, against 16.7% on a raw SQL database of the same data.
  • In a 2025 r/TechSEO thread, most generators and plugins still emitted a single @type per block, while Yoast linked Organization, WebSite and WebPage in one @graph by @id.
Three things marketing leads believe about schema. Myth or fact?
Call each one, then see how other readers called it.
1 Giving an author an @id lets every article on the site point to the same person.
2 If the Rich Results Test passes, your author, article and company are already connected.
3 JSON-LD identifier rules are binding, so every plugin names your company the same way.
A sprawling family tree scene drawn on a large sheet spread across a wooden kitchen table, with red string pinned between some of the branching names and several small portrait frames lying loose and unconnected beside

Every block can be correct and the family still not know who belongs to whom.

Listen to this question, it comes from a 2022 r/semanticweb thread and it holds the whole problem in one line: "What if my Steve is not the same Steve as the one referred in another dataset?" The answer in that thread was that a machine only knows two Steves are one Steve when both point to the same URI. A name is not enough. A matching job title is not enough. Well, it never was, not at a wedding either.

Your JSON-LD faces the same question on every page. The article says somebody wrote it, the footer says some company publishes the site, and unless those descriptions share an @id with the author bio and the Organization block, ChatGPT, Perplexity and Google AI Overviews are left guessing whether the founder on your blog is the founder on your About page. The research section below walks through these findings. Meanwhile, open your page source and ask one thing: does the author point at the company by @id, or just say its name again?

The same thread had a smaller warning I think about more than I should. Early vocabularies hosted on domains like dogsheds.com, one commenter said, "disappeared after 2 years" when owners forgot to renew. Identifiers die when the address dies.

So below I go through what a validator looks at and what it skips, whether any of this matters when Google says AI search needs no special schema, and how to test the graph as one family, including the founder who is a Person on Monday and a company by Friday and has to carry the same last name both days.

Listen, every block on a page can be correct and the page can still be wrong, the way every sentence in a family story can be true and the story still leaves out who married whom. In a knowledge-base pilot at AEO Content, the article written by reading the product end to end, from the admin setting to the screen a user actually sees, caught the admin page calling two-factor sign-in an authenticator app while the real sign-in screen sends a one-time code by text and email. Each screen made sense alone. Together they contradicted each other, and an article written from the documentation would have repeated the wrong one.

Schema does the same thing. So ask whoever set up your markup one question: which @id does our company have, and does every page use it? An AI engine like ChatGPT or Perplexity has to read the whole house.

Practitioners smelled this years ago, you know. In a 2018 r/SEO thread on how people use Schema.org, every commenter who named a format picked JSON-LD, mostly because it pastes neatly into a header, and one of them was already adding social sameAs links to steer Google's knowledge panels, with a warning that the same links had to appear in the visible HTML too. Further down, somebody asked whether adding JSON-LD on top of old inline markup would hurt. Nobody answered. Well, that question is still sitting there, and now the machines answer it for you, not always kindly.

What does a schema validator check, and what does it never look at?

A validator reads each JSON-LD block alone, for syntax and vocabulary. It never asks whether your article, your author and your company point at each other.

Before you trust a green result, look at three things on one page:

  1. Count the script blocks. More than one usually means more than one copy of somebody.
  2. Find every author and publisher. See whether each is a full object written out again or a pointer by @id.
  3. Match every reference to a node. Each @id you point at should be declared on the page, with a type.

Listen, a validator is a proofreader, it is not a genealogist. One agency guide that sells this work says the validator catches a missing comma or an unescaped quote, and it does, and then it goes home. Lucian Ghinda's tutorial from 2025 is an honest picture of how most blogs do it: a WebSite block in one script, a BlogPosting in another, and the author written out in full inside the BlogPosting, like an uncle who comes to every wedding and introduces himself again each time. Only mainEntityOfPage carries an @id. Every block can pass. Nothing ties the man to the company. The same tutorial put JSON-LD use at around 30% of websites in 2025, citing Search Engine Journal, so this is not a corner case, this is the neighborhood.

Yoast does it the other way. It puts Organization, WebSite and WebPage nodes into one @graph array, gives each an @id, and the WebPage says isPartOf by pointing at the WebSite's @id instead of repeating it. Practitioners comparing plugin output have noticed that most generators still emit a single @type with its properties, and Yoast is the odd one out.

The common assumption is that a clean report means the entity work is done. It means the commas are right. An analysis of 5 sources behind this section shows the same split every time: validity is checked block by block, identity lives between the blocks, where nobody checks.

Even the vocabulary is forgiving about the small stuff. In schema.org GitHub issue #854, opened on Oct 28, 2015, the project aliased id and type so a publisher who forgets the @ does less damage. A forgotten @ can be forgiven. A link you never wrote cannot be, there is nothing there to forgive.

Alex and I bring a combined 40+ years of SEO and content infrastructure experience to AEO, and I would put it to any client plainly. A machine believes what you connect, not what you meant. If you want the basic terms first, our AEO FAQ on AI search walks through them. So a pass tells you the grammar is right, and the family tree, well, that is a separate document, and on most sites nobody has drawn it yet, which is how an author ends up an orphan on his own blog.

Does a broken entity graph hurt you if Google says AI Overviews need no special schema?

Maybe not for ranking, and nobody has proven schema earns citations. The damage is to attribution: a disconnected graph leaves machines guessing which company and which person said it.

I want to be fair to the skeptic here, because the skeptic has good material. Google says AI Overviews and AI Mode need no special schema.org markup, only a page that is indexed and eligible for a snippet. OpenAI, Anthropic and Perplexity have published no guidance on how their retrieval systems treat JSON-LD, according to one agency's roundup of the research. The same roundup reports a controlled test in which 1,885 pages that added JSON-LD showed no meaningful citation lift against 4,000 control pages, though every page in that test was already cited more than 100 times. So a page that was already famous got no richer. Fine. That says nothing about a page nobody has met yet.

On the other side of the table, Microsoft's Fabrice Canel said in March 2025 that schema markup helps Microsoft's language models understand web content for Copilot. Understand is the word. Not rank, not cite. Understand.

Now, listen, here is where I come down. Schema is a comprehension tool, and the graph is the part of it that carries identity. Jason Barnard said on the Search Engine Journal Show in 2021 that in his own experiment, building small child entities and linking them to the parent entity tripled the confidence score Google's Knowledge Graph held for that entity. He was talking about links, you understand, not more types, not more blocks. Links.

One AI-visibility vendor puts the failure in a sentence I keep thinking about: "The model has the fact but cannot attribute it to you, so it cites the aggregator that copied you." That is their pitch, and I hold it at arm's length. Still, it names the right fear. Your article says something smart, and the machine credits a stranger, and your author, who stayed up writing it, is nobody in particular.

A vendor's 2026 review of AEO tools also reports that Yoast added an opt-in Schema Aggregation feature in March 2026 that merges duplicate entities across a site. You do not build a merge button for a problem nobody has.

The honest position, then:

  • Graph repair is not a ranking lever. Nothing here says it is.
  • It is attribution insurance. It tells a machine the article, the person and the company are one family.
  • It breaks quietly during rebuilds. A theme swap or a plugin change can rename every identifier while every block still validates.

That last one is why I tell anyone planning an AI-friendly website migration to diff their identifiers before and after launch, because the old @id for the company and the new one look alike to a person and nothing alike to a parser, and the question becomes how you would ever catch it.

If every block validates, what part of your schema has nobody tested?

Two plugins can each print an Organization block for the same company, with different phone numbers, and each block can still be valid on its own. So what did the green checkmark approve?

The example comes from a September 2026 JSON-LD guide by an AEO agency, which lists "conflicting blocks" among the mistakes unrelated to syntax. The guide also spells out each tool's job: the Schema Markup Validator checks syntax and vocabulary, and Google's Rich Results Test checks rich-result eligibility. "A missing comma or an unescaped quote makes the whole block unreadable, which the validator catches," the guide notes. A second, contradictory version of your company falls outside what either tool is built to check.

A quieter version turns up in tutorials. In a 2025 guide to JSON-LD for blogs, developer Lucian Ghinda shows WebSite and BlogPosting blocks as separate scripts, with the Person and Organization retyped inside each block instead of pointing to one shared node. Only the page itself carries an @id. A machine reading that markup finds the same name several times and must work out alone that the copies are one person.

Casey Cheshire, founder of the B2B podcasting company Ringmaster, describes the alternative as a connected @graph: "a set of nodes tied together with stable @id values, so a system can follow explicit connections between your brand, your people, and your topics instead of inferring them from prose." The standard backs the idea. The W3C JSON-LD Working Group's best practices note, advisory by its own description, says: "Adding an `id` entry (an alias for `@id`) allows the same person to be referred to from different locations."

Does the wiring matter if schema itself shows no citation effect? Google's documentation says "there are no additional requirements to appear in AI Overviews or AI Mode, nor other special optimizations necessary." An SEO software company ran a controlled test of 1,885 pages that added JSON-LD against 4,000 control pages and found no meaningful citation increase in AI Overviews, AI Mode or ChatGPT. A December 2024 study by another SEO platform found no correlation between schema coverage and citation rates.

The designs matter. Every page in the controlled test was already cited more than 100 times, so it cannot say whether markup helps a page get noticed in the first place. And as the review we read describes them, both studies measured the presence of markup. Neither is reported to have separated connected graphs from disconnected ones.

TestWhat it looks atChecks that author and publisher resolve to one declared @id?
Schema Markup ValidatorSyntax and vocabularyOutside its stated job
Google Rich Results TestRich-result eligibilityOutside its stated job
Controlled citation test, 1,885 pagesWhether adding JSON-LD changed citationsNot reported in the summary we read
December 2024 correlation studySchema coverage against citation ratesNot reported in the summary we read
A graph checkEach @id declared once, every reference resolvesYes

Among our sources, connected structure has been measured once. In a data.world benchmark by Sequeda, Allemang and Jacob, GPT-4 answered enterprise questions against a raw SQL database and against a knowledge graph of the same data.

Against a raw SQL database 16.7% accurate
Grounded in a knowledge graph of the same data 54.2% accurate
Same model, same data, different structure. GPT-4 accuracy on enterprise questions in a data.world benchmark, as summarized in a September 2026 review. The benchmark tested company databases. It did not test schema on web pages or AI citations.

Explicit, connected relationships made the same model more accurate. Whether that holds for web pages and citations, none of our sources tested.

Whether your graph connects is often settled before anyone writes markup. A May 2026 Reddit review of AEO tooling found that some platforms build one @graph per page, linking Organization, Person and article nodes through @id references. One widely used WordPress plugin outputs a connected graph and in March 2026 added an opt-in feature that merges duplicate entities. On Ghost, whether author and organization details reach the JSON-LD "depends on the theme." On Webflow, full JSON-LD is hand-added as custom code. In January 2025, a poster on r/TechSEO noted that "most generators and plugins" emit a single type and its properties, with no @graph.

Side by side, the sources leave a gap. Validators grade one block at a time. The citation studies, as reported, grade whether markup exists. The evidence that structure helps machines comes from connected data, and the standard names @id as the way to refer to one entity from many places. None of our sources measured connectivity on web pages, so no one can yet say whether it moves citations. What it does decide is whether your markup states that this article, this author and this company belong together, or leaves a machine to guess.

  • View the source of one article and count the Organization blocks. If two tools each print one, compare their values line by line.
  • Check whether the article's author and publisher are @id references to nodes declared once, or full objects retyped inside every block.
  • When someone cites a study saying schema does nothing for AI citations, ask whether it compared connected graphs with disconnected ones, and whether its pages were already heavily cited.
  • Ask your CMS vendor, theme developer or plugin maker whether author and organization data reach your JSON-LD at all, and whether each entity keeps one stable @id across pages.

How we checked this

We read a W3C working group note, Google's documentation on AI features, a developer's tutorial, a podcasting company's article on schema, two Reddit threads, and two September 2026 articles by an AEO agency. This section uses none of our own figures. We know the controlled citation test, the December 2024 study and the data.world benchmark only through that agency's summaries, and we did not read the original reports, so whether the studies tested connectivity in some form we did not see is still open. The Reddit tooling review's author is unidentified and may be connected to a tool it lists. We sell AEO services and audits, the agency sells similar work, and Ringmaster sells podcast production, so all three of us have a stake. Still unknown: whether connected graphs change citation rates. One review found no published guidance from OpenAI, Anthropic or Perplexity on how they treat JSON-LD.

  1. W3C JSON-LD Working Group, JSON-LD best practices note, editor's draft, July 2026.
  2. Google Search Central, AI features and your website documentation, retrieved October 29, 2026.
  3. Lucian Ghinda, tutorial on JSON-LD schema for blogs, March 2025.
  4. Casey Cheshire, Ringmaster, article on podcast schema markup, October 2026.
  5. r/cms_tips, AEO tools review thread, May 2026.
  6. r/TechSEO, discussion of @graph in plugin JSON-LD, January 2025.
  7. An AEO agency's guides to adding JSON-LD and to JSON-LD and AI citation, September 2026. These summarize the 1,885-page controlled test, the December 2024 correlation study and the data.world benchmark.

How do you test JSON-LD as one connected graph instead of block by block?

Expand every block to full URIs, list each declared @id beside each reference, and fail the page when an author or publisher points at nothing.

Here are the five steps I would run on any page, in this order:

  1. Collect every block from the raw HTML. View the source, not the browser inspector, and copy out each application/ld+json script, the plugin's, the theme's, the one somebody pasted in years ago and forgot.
  2. Expand them. The JSON-LD Working Group's Best Practices note says expanded form is useful when validating that entity descriptions "say what the publisher means." Expansion turns a short term like familyName into http://schema.org/familyName, as the Linking Data in JSON Community Group's API note shows, so two blocks can no longer hide behind different shorthand.
  3. Confirm one entry point. The same Working Group note says a document SHOULD be a single top-level object. A single @graph gives you that.
  4. Make two lists and diff them. One list holds every @id declared as a node with a type. The other holds every @id referenced by author, publisher, isPartOf, worksFor and friends. Anything referenced but never declared is an orphan.
  5. Repeat across three page types. Home, an article, an author page. The company's @id must be the same string on all of them.

That last step is the one people skip. A graph can be perfect on one page and split across the site, the home page calling the company one thing, the blog template calling it another, both valid, both lonely.

Now, a word on the rules themselves. The Working Group labels its note unofficial and says its SHOULD language is advisory. Nobody is going to arrest you. So you hold yourself to it, the way you hold yourself to calling your mother.

Two judgment calls come up every time. First, the identifier is not the thing. The Best Practices note warns that a Wikidata page for a person is a description of him, not the man himself, so I keep a profile URL in sameAs and mint the @id on a domain the company owns and controls. Linked-data practitioners have said the same for years: an identifier you own outlives the hosting deal you forgot to renew.

Second, the founder who is also the firm. A performer once described marking up both a Person and an Organization on one site, while the ticketing platform's own event markup left the performer out entirely. The link existed on one side only. If you are both, declare both and connect them, or a credential lands on the wrong one, or on neither, and you are a stranger at your own party.

This is the same discipline we bring to research-driven content built on evidence: you trace each claim to its source, and you trace each entity to its node. Then you run the diff again after the next plugin update, because the plugin, believe me, has not read this.

Is your schema one family or a room full of strangers?

AEO Content has scored 11,000+ domains across 15 sectors and 28 categories, and an AI engine has to read your markup as one graph, whether you drew it that way or not.

The offer is plain: named in AI answers in 100 days, or we work free until you are. Start with the audit, then see which author is an orphan.

Hands matching highlighted references across two printed code sheets, with one unmatched reference circled in red
List every declared @id, then every reference. The one that points at nothing is the stranger at the table.

What should change the next time someone audits your schema?

Stop asking only whether each block is valid and start asking whether every author, publisher and page points to one declared @id. Then ask to see where each one is declared.

Here is where I think this goes. In a 2025 r/TechSEO thread, a poster noticed that most generators and plugins still emit a single @type per block, while Yoast wraps Organization, WebSite and WebPage into one @graph and has the page point at its site by @id instead of repeating it. One commenter said the point was to avoid defining the same Organization info in multiple places. Another called it a workaround for syntax. Well, both can be right. The family still has to sit at one table.

My bet is that the pasted, block-by-block habit fades over the next year or two and the connected graph becomes the ordinary way a site introduces itself. Maybe the validators catch up, maybe not. Until then, listen, the uncle keeps introducing himself at every wedding, and ChatGPT keeps wondering whether he's even related to you.

Summarize This Article With AI

Open this article in your preferred AI engine for an instant summary.

Frequently Asked Questions

What else do people ask about broken entity graphs?

What is an entity graph in schema markup?

An entity graph is the set of things your markup declares, your company, your authors, your articles, plus the @id references that say how they belong to each other. Bill Hartzer, on The Agency Insider Show in 2025, defined an entity as anything that has a Wikipedia page. A person counts. So does a concept.

Does fixing my @id links replace ordinary on-page work?

No. Hartzer said on the same show that title tags have mattered from 1996 to today, along with plain H1, H2 and H3 structure and real lists. A connected graph tells the engine who wrote the page, it does not make a sloppy page worth quoting.

Is it bad to keep old inline markup next to new JSON-LD?

Somebody asked exactly this in a 2018 r/SEO thread and nobody answered. I'd worry less about the two formats and more about whether both name your company with the same identifier. Two descriptions with two names is how one family turns into two.

Should a small team fix this by hand?

For a handful of templates, maybe. Reading the site end to end, page type by page type, is where the contradictions show up, the way they did in the knowledge-base pilot described above.

How do I get someone to check my site's graph?

Write to AEO Content through the contact page and say which page types carry your author and company markup, so the first look starts there and not at the homepage.

Written by

Michael Kansky

Co-Founder, AEO Content

Michael Kansky is a serial founder and operator and co-founder of AEO Content, where he shapes product and go-to-market strategy for an AI-search content optimization platform.

Connect on LinkedIn

Related posts

Every AI SEO tool should pass this five-engine coverage test

Editor measuring the opening answer paragraph of a printed article draft with a ruler and red pen

AEO content: the 3 numbers that predict AI citations

Marketing lead comparing two AI visibility reports printed three months apart

Citation durability: the 90-day number AEO specialists should publish

Pricing

Simple, flat monthly pricing.

Everything included. No per-seat games. Cancel anytime: your content, your repo.

Growth

$99 /mo

Start showing up in AI engines.

Start with Growth

What's included

  • AEO Website + Cloudflare CDN
  • 10 AEO articles / month
  • 5 prompts tracked weekly
  • Monthly re-audits + alerts
  • Reddit reply drafts + mention monitoring
Most chosen

Premium

$250 /mo

The package marketing teams settle on.

Start with Premium

Everything in Growth, plus

  • 20 AEO articles / month
  • Publish to 2+ site sections
  • 20 prompts tracked daily + threat analysis
  • Bi-weekly re-audits
  • Brand voice profile + strategy call

Business

$500 /mo

Hand us your domain. We run AEO end-to-end.

Talk to us

Everything in Premium, plus

  • 30 AEO articles / month
  • Social media on 6 networks
  • Up to 100 competitors + API
  • Weekly re-audits
  • Dedicated AEO strategist