Schema

Implementing Schema.org JSON-LD for AI Entity Disambiguation

How to use Schema.org JSON-LD to make sure ChatGPT and Claude connect your brand name, domain and products to one entity, including a minimal working example and validation steps.

5 min read · Updated October 2026

JSON-LD is how you tell a machine that your brand name, your domain and your product are one thing rather than three coincidences. Without it, a model has to infer that the string in your <title> is the same entity as your domain. Structured data removes the guesswork.

What problem does JSON-LD solve for AI engines?

Entity disambiguation. If your product is called Northwind and there is also a film studio called Northwind, an AI system has no reliable way to attribute a mention to you. Organization markup with a stable @id, a canonical url and a sameAs list gives it the joins it needs.

Which schema types matter most for GEO?

  • Organization — anchors your brand as an entity. The single highest-value node.
  • WebSite — ties the domain to that entity.
  • SoftwareApplication or Product — describes what you actually sell.
  • FAQPage — pairs questions with answers. Only use it where the same Q&A is visible on the page.
  • Article — signals authorship and dates on editorial pages.

How do I connect multiple nodes into one entity?

Use a single @graph and give every node an @id. Other nodes then reference those identifiers instead of repeating the data. This is what turns separate snippets into one coherent entity description.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://your-domain.com/#organization",
      "name": "Your Brand Name",
      "url": "https://your-domain.com",
      "logo": "https://your-domain.com/logo.png",
      "sameAs": [
        "https://x.com/yourhandle",
        "https://github.com/you/repo"
      ]
    },
    {
      "@type": "WebSite",
      "@id": "https://your-domain.com/#website",
      "url": "https://your-domain.com",
      "name": "Your Brand Name",
      "publisher": { "@id": "https://your-domain.com/#organization" }
    }
  ]
}
</script>

The detail that gets skipped: the name must be identical across your <title>, your <h1>, your llms.txt and this markup. Three different names on one page defeats the purpose entirely.

How do I validate the markup?

  1. Run the URL through the Schema.org validator. Zero errors is the bar.
  2. Confirm the node types you intended are actually detected — not just that nothing errored.
  3. Check the rendered HTML source, not the editor. Client-side rendering can drop the script from the initial response.

Note that Google has narrowed FAQ rich results to a small set of sites, so low FAQPage eligibility does not mean the markup is useless — generative engines still parse it. See also optimizing headings for direct AI citation.