The usual pattern is a plugin adding an Organization block, a theme adding a WebSite block, a breadcrumb plugin adding a third and an SEO plugin adding an Article. Four islands. Nothing in them says the article's author is the person in the Organization, so a consumer has to guess — and when it guesses wrong it merges you with someone who shares your name.
Stable identifiers are the whole trick
{
"@context": "https://schema.org",
"@graph": [
{ "@type": "Person", "@id": "https://example.com/#person", "name": "..." },
{ "@type": "WebSite", "@id": "https://example.com/#website",
"publisher": { "@id": "https://example.com/#person" } },
{ "@type": "BlogPosting",
"@id": "https://example.com/insights/slug#article",
"author": { "@id": "https://example.com/#person" },
"isPartOf": { "@id": "https://example.com/#website" } }
]
}The @id values never change, they are absolute URLs, and the fragment makes them unambiguous. Every page on this site emits the same Person @id, so a consumer reading twelve of these pages accumulates one person rather than twelve.
What you refuse to assert matters as much
Structured data is a set of claims, and a false claim is worse than a missing one. This site does not emit an Organization node for XORV AnswerRank, because XORV is a product in development and asserting that a legal organisation exists would be a fact nobody confirmed. It is modelled as a SoftwareApplication authored by a Person — which is true.
Two languages, one entity
On a bilingual site the Person and the WebSite keep the same @id in both languages, while inLanguage, name and description are localised. The alternative — a separate Arabic entity graph — asserts that there are two people, which is the exact confusion structured data exists to prevent. Reciprocal hreflang does the rest.
A graph worth emitting
- One <script type="application/ld+json"> per page, containing one @graph.
- Absolute @id URLs with fragments, identical across every page and both languages.
- Nodes reference each other by @id — never copy a Person node into an Article.
- Every asserted property is visible or true on the page itself.
- BreadcrumbList matches the breadcrumbs a human sees.
- Validate the output, not the intention — read the rendered HTML.
Sources
Related services
Related work
Read next
- AI SearchHow to build a site an AI assistant can actually citeWhat makes a web page citable by an AI assistant?
- Technical SEOTechnical SEO for a Next.js site, done once and correctlyWhat does technical SEO require on a Next.js App Router site?
- AI SearchWhat AI visibility means, and what it does notWhat is the difference between an AI mention, an AI citation and a search ranking?
- Technical SEOllms.txt, robots.txt and what actually controls an AI crawlerWhat is llms.txt, and does it control whether AI models use my site?
