Framework How-To Guide aiknowledgesignal.io

How to Implement JSON-LD Schema for AI Citation

JSON-LD is structured data that tells AI systems what your content means — not just what it says — so they can classify, retrieve, and re-cite it accurately.

Why it matters

AI systems do not read a page the way a person does. Before they can cite you, they have to work out which entities a page is about — which organisation, which author, which claims — and how those entities relate. Prose alone forces them to infer this. JSON-LD states it explicitly, in a machine-readable block, removing the guesswork that causes misattribution and hallucinated detail.

Structured data is one of the most reliable ways to disambiguate your organisation, connect an author to a verified profile, and mark a section as a genuine FAQ. FAQPage is useful wherever you have a genuine Q&A section — it maps onto the question-and-answer shape that generative engines extract, and Microsoft’s guidance calls out Q&A blocks — but since 2023 Google shows FAQ rich results only for well-known government and health sites. Schema is read-side infrastructure: it doesn't change your words, it changes how confidently a model can use them.

What schema does not do: Google states there is no special markup for AI Overviews or AI Mode, and markup that doesn’t match the visible content breaks its structured-data policies. Mark up what is true and visible; skip anything else.

What good looks like

A canonical page carries a small stack of complementary schema types, all consistent with the visible content and all valid:

Step by step

  1. Choose the right schema types for the page Match the @type to what the page actually is. A homepage or About page is an Organization; a blog post is an Article; a methodology or technical doc is a TechArticle; research-grade content is a ScholarlyArticle. Add Person for the author and FAQPage wherever you have a real Q&A section. Don't force a type that doesn't fit — wrong type is worse than none.
  2. Add the JSON-LD block to the page Place each schema inside a <script type="application/ld+json"> tag, usually in the <head> (the body works too). JSON-LD is Google’s recommended format — it sits separately from your visible markup, so it never disturbs layout. You can use one combined block (an @graph array) or several small blocks.
  3. Connect entities with sameAs and @id Schema's value is in the relationships. Use sameAs to point your Organization and Person at the authoritative profiles that already represent them (LinkedIn, Crunchbase, Wikidata). Give entities a stable @id and reference it across blocks so the author of an Article resolves to the same Person entity site-wide.
  4. Populate the descriptive fields Include a factual description (50–160 characters, matching your meta description; the longer ~100-word on-page abstract from Phase 5.4 can go in abstract), accurate datePublished and dateModified, and citation entries for referenced works.
  5. Validate, then verify it's in the source Run every block through the Schema Markup Validator until there are zero errors. Google’s Rich Results Test only checks types that can produce rich results, so a clean result there doesn’t validate your Person or Organization markup. Then View Source (or curl) the live URL and check the JSON-LD is in the raw HTML — not added later by JavaScript, which most AI crawlers don’t execute.
  6. Keep dateModified current — and honest When you materially update the page, update dateModified rather than republishing at a new URL. Don’t bump the date for trivial edits: Google warns against changing dates to make content look fresher than it is.

Worked examples

1 Organization + Person, linked by sameAs

The foundation block for an About page: it tells AI systems who the company is, who the author is, and ties both to verified external profiles so the entities can be disambiguated.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://aiknowledgesignal.io#org",
      "name": "AI Knowledge Signal",
      "url": "https://aiknowledgesignal.io",
      "brand": { "@type": "Brand", "name": "AI Knowledge Signal", "url": "https://aiknowledgesignal.io" },
      "sameAs": [
        "https://www.linkedin.com/company/your-company",
        "https://www.crunchbase.com/organization/your-company"
      ]
    },
    {
      "@type": "Person",
      "@id": "https://aiknowledgesignal.io/#chris",
      "name": "Christopher Foster-McBride",
      "jobTitle": "Founder",
      "worksFor": { "@id": "https://aiknowledgesignal.io#org" },
      "sameAs": [ "https://www.linkedin.com/in/christopher-foster-mcbride-42234330/" ]
    }
  ]
}
</script>
2 Article, attributed and dated, with a citation

An Article block that reuses the @ids from Example 1 so the author and publisher resolve to the same entities, and links a primary source via citation.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "TechArticle",
  "headline": "Generative Engine Optimisation: A Practical Framework",
  "description": "A 6-phase method for structuring content so AI systems cite it accurately.",
  "datePublished": "2026-05-01",
  "dateModified": "2026-10-13",
  "author":    { "@id": "https://aiknowledgesignal.io/#chris" },
  "publisher": { "@id": "https://aiknowledgesignal.io#org" },
  "citation": {
    "@type": "CreativeWork",
    "name": "GEO: Generative Engine Optimization (Aggarwal et al., KDD 2024)",
    "url": "https://arxiv.org/abs/2311.09735"
  }
}
</script>
3 FAQPage — for a genuine on-page FAQ

Wrap a genuine on-page FAQ section. Each answer should be a complete, extractable 1–2 sentences — the same text that's visible to readers.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "What is Generative Engine Optimisation (GEO)?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "GEO is the practice of structuring content so AI systems can accurately select and cite it in generated answers."
      }
    },
    {
      "@type": "Question",
      "name": "Does JSON-LD change how my page looks?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No. JSON-LD lives in a script tag in the page head and is invisible to readers; it only describes the page to machines."
      }
    }
  ]
}
</script>
4 Before / after: an unmarked vs. marked-up page

The same page, same words. The difference is whether a machine can resolve the entities with confidence.

Before No schema. The AI must guess that "DHA" on the page is the same company as the LinkedIn profile, and infer the author and publish date from prose. Misattribution and stale-date errors are likely.
After Organization + Person + Article + FAQPage, all valid, with sameAs and a populated abstract. The entity graph is explicit, the date is unambiguous, the FAQ is extractable verbatim.

Common mistakes

MistakeFix
JSON-LD injected by JavaScript after loadRender it server-side so it's in the raw HTML — headless crawlers don't run JS (see Phase 1.2).
Invalid JSON (trailing commas, unescaped quotes)Run the Schema.org Validator until zero errors; a single syntax error voids the whole block.
Schema describes content that isn't on the pageKeep markup and visible content identical — FAQ answers in schema must match the on-page text.
Wrong @type (everything tagged Article)Match the type to the page: Organization, TechArticle, ScholarlyArticle, FAQPage.
No sameAs linksPoint Organization and Person at LinkedIn / Crunchbase / Wikidata to disambiguate the entity.
Promotional description / abstractWrite 50–160 factual characters; AI systems treat marketing copy as low-signal.
Missing, stale or inflated dateModifiedUpdate it on every material change — and only then.
Expecting schema alone to earn AI citationsGoogle says no special markup is needed for its AI features; schema supports understanding, the content earns the citation.

Limits of this advice

Checklist

  • Correct @type chosen for each page (Organization / Person / Article / FAQPage as applicable)
  • JSON-LD present in the raw HTML source — confirmed via View Source or curl
  • sameAs links connect Organization and Person to verified external profiles
  • Entities share stable @ids so author/publisher resolve consistently
  • description/abstract is 50–160 factual characters
  • datePublished and dateModified present and current
  • citation added for referenced works where applicable
  • Zero errors in the Schema Markup Validator (Rich Results Test for rich-result types)