- Structured data's job in GEO is disambiguation, not decoration: it converts claims a model must infer into facts a machine can read — names, prices, specs, authorship, identity.
- Six types do most of the work for brands: Organization, Product (with offers and specs), FAQPage, Article (with author), HowTo, and
sameAslinks for entity disambiguation. - Entity consistency beats markup volume. Knowledge graphs reconcile what your site, Wikipedia, LinkedIn, Crunchbase and review sites say about you; contradictions make engines hedge or go silent.
- Markup is not a ranking ticket — Google says AI features ride on standard search infrastructure.3 It removes ambiguity; your content still has to earn the citation.
Here's a question that decides whether an AI assistant recommends you correctly: when a model encounters the string "Fathomly" on a pricing page, a G2 review, and a Reddit thread — how does it know these are the same thing? And when it tells a buyer your starting price, where does that number come from?
Prose makes machines infer. Structured data lets them read. That distinction was mildly important when the payoff was a rich snippet; it's centrally important now that the consumer of your page is often a language model assembling an answer, deciding in milliseconds which facts are extractable and which are too ambiguous to repeat.
This post covers what schema.org markup actually does in a generative-engine world, the handful of types worth implementing, a worked JSON-LD example, and the myths worth retiring.
What structured data does for a language model
Schema.org is a shared vocabulary — launched in 2011 by the major search engines, now spanning roughly 800 types and 1,400+ properties — for annotating web content with typed, machine-readable statements.1 A paragraph saying "our sensor is accurate and reasonably priced" becomes, in markup, Product → offers → price: 449, priceCurrency: "EUR" and a PropertyValue of ±0.1 °C. The vague became checkable.
Three mechanisms make this matter for AI visibility:
- Extraction confidence. Generative engines synthesize from retrieved pages, and they preferentially repeat facts that are cleanly stated and internally consistent. JSON-LD is the cleanest statement a page can make: no layout parsing, no pronoun resolution, no guessing whether "$49" is the monthly or annual figure.
- Knowledge-graph ingestion. Search engines have consumed markup into entity graphs for years — Google's documentation is explicit that structured data helps it understand what a page is about and who is behind it.2 Those graphs feed both classic results and the retrieval layer behind AI features. Facts that make it into an entity graph persist across queries, not just per-page.
- Corroboration. The evidence from generative-engine research points the same direction: content with clear, attributable claims — statistics, citations, quotations — earned up to ~40% more visibility in generated answers in the original GEO study.4 Markup is the machine-readable version of that same principle: it makes your claims easy to attribute and hard to garble.
The schema types that earn their keep for GEO
Schema.org is huge; your implementation shouldn't be. For a brand that wants to be mentioned, recommended and described accurately, six types cover the ground:
| Type | What it locks down | GEO-critical properties |
|---|---|---|
| Organization | Who you are: one canonical identity for the entity graph | name, url, logo, description, foundingDate, sameAs |
| Product | What you sell — with prices and specs models can quote | offers (price, currency, availability), additionalProperty for specs, aggregateRating where legitimate |
| FAQPage | Canonical Q&A pairs in the exact shape assistants answer in | mainEntity → Question/Answer matching visible on-page text |
| Article | Who wrote what, when — provenance and freshness signals | author (a Person with credentials), datePublished, dateModified |
| HowTo | Procedures as ordered, extractable steps | step list with names and text; tools/supplies where relevant |
sameAs (property) | Entity disambiguation: "this site = that Wikipedia page = that LinkedIn org" | Links to Wikipedia/Wikidata, LinkedIn, Crunchbase, GitHub, social profiles |
Two of these deserve emphasis because they're chronically underused.
Product with real offers and specs. Most SaaS and manufacturer sites mark up a name and a description and stop. The GEO value is in the boring fields: a machine-readable price ends the "starts at $199 (according to a 2023 blog post)" failure mode, and additionalProperty entries for specs — accuracy, capacity, limits, integrations — give engines a fact table instead of a paragraph to paraphrase badly.
sameAs. The cheapest high-leverage markup on the internet. If your brand name is ambiguous — shared with a common word, a band, or a competitor in another country — sameAs links from your Organization markup to Wikipedia, Wikidata, LinkedIn and Crunchbase are how graphs resolve which entity you are. Ambiguous entities get hedged, blended or skipped in answers; resolved entities get described.
A worked JSON-LD example
JSON-LD in a <script> tag is the format Google recommends and the easiest to maintain — one block, no microdata woven through your templates.2 Here's a condensed but realistic block for a B2B SaaS pricing page, combining Organization, Product and FAQ:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://fathomly.com/#org",
"name": "Fathomly",
"url": "https://fathomly.com",
"logo": "https://fathomly.com/logo.png",
"description": "Customer analytics platform for B2B SaaS teams.",
"foundingDate": "2021",
"sameAs": [
"https://www.wikidata.org/wiki/Q000000",
"https://www.linkedin.com/company/fathomly",
"https://www.crunchbase.com/organization/fathomly",
"https://github.com/fathomly"
]
},
{
"@type": "Product",
"name": "Fathomly Growth Plan",
"brand": { "@id": "https://fathomly.com/#org" },
"description": "Account-level analytics with churn prediction,
for teams up to 25 seats.",
"offers": {
"@type": "Offer",
"price": "199",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"url": "https://fathomly.com/pricing"
},
"additionalProperty": [
{ "@type": "PropertyValue",
"name": "Data sources", "value": "40+ integrations" },
{ "@type": "PropertyValue",
"name": "Compliance", "value": "SOC 2 Type II, GDPR" }
]
},
{
"@type": "FAQPage",
"mainEntity": [{
"@type": "Question",
"name": "Does Fathomly offer a free trial?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes — 14 days, full-featured, no credit card
required. Annual plans include a 30-day guarantee."
}
}]
}
]
}
</script>
Details that separate working markup from decorative markup:
- Use
@idand reference it. Giving your Organization a stable@idand pointingbrandat it tells parsers every product belongs to one entity — on every page, forever. - Markup must mirror visible content. Facts that exist only in JSON-LD are ignored at best and a spam signal at worst; Google's guidelines are explicit that markup should describe on-page content.2
- Keep prices current or omit them. A stale machine-readable price is worse than none — it's wrong with confidence, and it will be repeated with confidence.
- Validate on deploy. Schema Markup Validator or Rich Results Test in CI, not once at launch. Silent template regressions are the most common way markup dies.
Markup is an input. The output is what ChatGPT, Claude, Gemini and Perplexity say about your prices, features and category. MentionBeat samples real buyer prompts and flags where engines mention you, misdescribe you, or leave you out entirely.
Get a free visibility reportEntity consistency: the part markup can't do alone
Knowledge graphs are reconciliation machines. They take statements about an entity from many sources — your site's markup, Wikipedia, Wikidata, LinkedIn, Crunchbase, review platforms, news — and try to merge them into one coherent record. Your markup is one vote among many, and it's the vote with the most obvious self-interest.
That has a practical consequence: what moves engines is agreement. When your site says "customer analytics platform, founded 2021, starts at $199" and G2, Crunchbase and a couple of industry roundups say the same thing, that description hardens into the consensus a model reaches for. When your site says "AI-powered revenue intelligence suite" while every third-party source still calls you "a dashboard tool," you've created exactly the ambiguity that makes models hedge — or default to the third-party framing you were trying to escape.
A minimal entity-consistency audit, in order:
- Write one canonical description — category, buyer, differentiator, in a sentence — and use it verbatim in your Organization markup, homepage, and social bios.
- Fix the profiles you control: LinkedIn, Crunchbase, GitHub, app marketplaces. Same name, same category language, same founding facts.
- Wire up
sameAsto every profile from step 2, plus Wikipedia/Wikidata if you legitimately have entries. - Then work the sources you don't control — analyst listings, review categories, directory descriptions — toward the same language. Slower, but this is where consensus actually forms.
Myths worth retiring
Markup is not a magic ticket. Google states plainly that its AI features are built on core Search infrastructure and that no special markup buys inclusion in AI Overviews or AI Mode — standard technical and quality practices apply.3 Structured data removes ambiguity about facts you've already earned the right to state. It does not make weak content citable, and stuffing markup with properties your page doesn't support is the schema version of keyword stuffing — which, for the record, measurably failed in GEO testing.4
Three more, quickly:
- "LLMs don't read JSON-LD, so it's pointless." Half-true, wrong conclusion. A model generating text isn't parsing your script tag — but the retrieval and knowledge-graph systems that decide what the model sees have been consuming markup for a decade. You're optimizing the pipeline, not the poet.
- "More types = more visibility." Coverage of six types done accurately beats thirty done vaguely. Wrong or contradictory markup is worse than none, because it's a confident wrong vote in the reconciliation process.
- "We added FAQ markup and rankings didn't move, so it failed." Wrong success metric. The question is whether assistants answer questions about you correctly and cite you when they do — which you can only see by sampling actual AI answers, repeatedly. That measurement loop is the kind of thing a platform like MentionBeat automates, but however you run it, run it: markup changes without answer-level measurement are faith-based.
Frequently asked questions
Functionally they express the same vocabulary, but JSON-LD is Google's recommended format and by far the easiest to template, review and validate — one self-contained block instead of attributes threaded through your HTML.2 There's no GEO reason to choose anything else for new work.
Yes — that's the whole trick. Write questions the way buyers phrase them to assistants ("does X integrate with Salesforce," "is X SOC 2 compliant," "how much does X cost") and answer in one to three self-contained sentences. You're pre-formatting the exact Q&A shape the engine wants to produce, with your facts in it.
Absolutely. Wikipedia is the strongest disambiguation anchor, but LinkedIn, Crunchbase, GitHub and marketplace profiles are all reconcilable identity signals — and unlike Wikipedia, you control them. Never manufacture a Wikipedia page to feed the graph; notability-free pages get deleted and the attempt can damage the credibility you're trying to build.
Sources & further reading
- Schema.org — schema.org: vocabulary documentation and full type hierarchy.
- Google Search Central — "Introduction to structured data markup in Google Search".
- Google Search Central — "AI features and your website".
- Aggarwal, P., Murahari, V., Rajpurohit, T., Kalyan, A., Narasimhan, K., Deshpande, A. — "GEO: Generative Engine Optimization", KDD 2024 / arXiv:2311.09735.