GEOJACKING

Implementation · Machine-readable layer

Structured data for AI

Schema won't buy you a citation. It will stop a machine from guessing wrong about what you are, which turns out to matter more.

The short answer

Structured data doesn't make an AI cite you, but it removes ambiguity about what your page says and who is saying it.

The highest-value implementation isn't more schema types — it's a single connected @graph where every node has a stable @id, so machines resolve your organisation, author, page and topic as one coherent entity instead of four unrelated blobs.

01Start with the graph, not the types

Most sites emit three separate JSON-LD blocks that never reference each other: an Organization here, an Article there, a BreadcrumbList somewhere else. A parser has to infer that they're related. Give it explicit edges instead.

The pattern: one @graph array per page, every node carrying an @id that is a real URL with a fragment, and references between nodes done by @id rather than by repeating the object. Every page on this site does exactly that — view source and read the block in the head.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://example.com/#organization",
      "name": "Example Co",
      "url": "https://example.com/",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q000000",
        "https://www.linkedin.com/company/example-co"
      ],
      "knowsAbout": ["Retrieval augmented generation", "AI visibility"]
    },
    {
      "@type": "WebSite",
      "@id": "https://example.com/#website",
      "url": "https://example.com/",
      "publisher": { "@id": "https://example.com/#organization" }
    },
    {
      "@type": "TechArticle",
      "@id": "https://example.com/guide#article",
      "headline": "How retrieval works",
      "author": { "@id": "https://example.com/#organization" },
      "isPartOf": { "@id": "https://example.com/#website" },
      "datePublished": "2026-08-07",
      "dateModified": "2026-08-07",
      "about": { "@id": "https://example.com/#ai-visibility" }
    },
    {
      "@type": "DefinedTerm",
      "@id": "https://example.com/#ai-visibility",
      "name": "AI visibility",
      "description": "How often a brand is retrieved and cited inside AI answers."
    }
  ]
}
</script>

02The types that earn their place

Schema types ranked by usefulness for AI visibility
TypeUse it forWhy it matters here
OrganizationEvery page, via one shared nodeAnchors your brand as a resolvable entity; sameAs links it to Wikidata and other authorities
PersonAuthor bios and bylinesCarries expertise signals; connect to the same person node everywhere
Article / TechArticleGuides and postsSupplies headline, dates, author and word count in a form nothing has to infer
FAQPageGenuine question-answer pairsExplicit Q&A pairing is unusually easy for retrieval systems to consume
HowToOrdered proceduresSteps, tools and durations become discrete machine-readable objects
DefinedTerm / DefinedTermSetGlossariesUnderused and high-leverage: a formal term-to-definition mapping
BreadcrumbListEvery non-home pageCommunicates site hierarchy and topical parentage
DatasetOriginal research you publishMakes first-party data discoverable as data, not just prose
Product / OfferAnything purchasablePrice, availability and specs in a form assistants can compare
LocalBusinessPhysical locationsHours, address and service area — heavily used in local answers

03Three properties worth more than they look

sameAs

A list of authoritative URLs that refer to the same entity: Wikidata, Wikipedia, LinkedIn, Crunchbase, GitHub, official social profiles. This is the single most direct way to tell a machine “the thing on this page and the thing in that knowledge base are the same thing.” If you do one thing from this page, do this.

knowsAbout

On an Organization or Person, this declares topical expertise. It won't manufacture authority you don't have, but it disambiguates — a consultancy called “Northstar” that knowsAbout retrieval systems is clearly not the boat dealership with the same name.

speakable

A SpeakableSpecification with a CSS selector marks the passages you consider the canonical spoken summary of a page. Its official support is narrow, but it costs two lines and it states your intent about which passage is the answer. Point it at your answer block.

04Rules that keep you out of trouble

  • Markup must match visible content. No exceptions. This is the rule that triggers manual actions.
  • One canonical entity node per site, reused by @id on every page. Don't redefine your Organization with slightly different values on each template.
  • Dates in ISO 8601, and dateModified only changes when content actually changes.
  • Don't mark up navigation, ads or boilerplate as content.
  • Validate before shipping with Google's Rich Results Test and the Schema.org validator. A single trailing comma silently kills the whole block.

Diminishing returnsAdding a tenth schema type is rarely the constraint. A connected graph with five well-formed types and accurate sameAs links will outperform twenty types emitted as disconnected islands.

Related: llms.txt, honestly — the other machine-readable file everyone is arguing about.

Questions engines askFrequently asked questions

Does Google require structured data for AI Overviews?

No. Google's 2026 documentation on generative AI features (developers.google.com) states plainly that structured data isn't required for AI Overviews or AI Mode and that there's no special schema.org markup you need to add for them. That's worth taking at face value. Schema still earns its place for a different reason: it is the cheapest way to make facts about your entity unambiguous to any system that chooses to read them, including ones that aren't Google.

Should the JSON-LD say things the page doesn't?

Never. Structured data must describe content that is visible on the page. Markup that contradicts or exceeds the visible content is a spam signal under Google's structured data guidelines and can trigger manual action. It's also pointless — a model reading the page will see the mismatch.

Is Microdata or RDFa still acceptable?

Both are still valid vocabularies, but JSON-LD is the recommended format and by far the easiest to maintain because it lives in one block rather than being woven through your markup. If you're starting fresh, use JSON-LD. If you have legacy Microdata that works, migrating is low priority.