Schema Markup for AI Search: What Actually Matters
The short answer
Schema does not make an AI system trust you, but it removes ambiguity about what your pages are and who wrote them. Five types carry almost all the value, and the biggest win is linking them together with @id so your site describes one entity instead of forty disconnected pages.

Table of contents
What schema does and does not do
Structured data is a block of JSON-LD in your page source that states, explicitly, what the page is. This is an article. It was written by this person. It was updated on this date. It belongs to this organisation.
Without it, every one of those facts has to be inferred from layout and prose. Inference works most of the time. Most of the time is doing a lot of load-bearing work in that sentence.
What schema does not do is make you credible. If your domain sits outside the trusted set for a topic, perfect markup will not get you retrieved. I laid out why in how ChatGPT decides which sources to cite. Schema is a multiplier on visibility you already have.
The five types worth implementing
Schema.org lists hundreds of types. For a services business competing in AI search, five carry nearly all the value.
| Type | Where it goes | What it buys you |
|---|---|---|
| Organization or ProfessionalService | Sitewide, in the layout | Establishes the business as one entity with an address, phone, service area and social profiles |
| Person | Sitewide, linked to the organisation | Attaches a real named human with credentials to everything you publish |
| Article | Every blog post | Declares authorship, publish date, update date and topic explicitly |
| FAQPage | Any page with real questions | Turns question and answer pairs into discrete extractable units |
| BreadcrumbList | Every page below the root | Shows where the page sits in your information hierarchy |
That is the whole list. Adding Course, Event or HowTo markup to pages that are not courses, events or how-tos is a well-known way to get structured data ignored across the board.
The part almost everyone skips: entity linking
Here is the single highest-value technique in this article, and it costs nothing to implement.
Most sites emit standalone schema blocks. An Organization block on the homepage. An unrelated Article block on each post. Nothing connects them. A parser sees a business, and separately sees some articles, and has no stated reason to believe they are related.
Fix it with @id. Give your organisation a canonical identifier, give your author one, then reference those identifiers everywhere instead of repeating the details.
| Approach | What a parser concludes |
|---|---|
| Repeat author name as a plain string on every article | Forty articles, each by someone who happens to share a name |
| Reference the same @id on every article | Forty articles by one identified person, who works for one identified organisation |
The second version accumulates. Every article reinforces the same entity instead of starting from zero. That is how a site builds a coherent identity that a retrieval system can recognise across pages, which matters far more than any single markup type.
Pair this with a sameAs array pointing at your LinkedIn, YouTube and other verified profiles. You are giving the system independent places to confirm the entity is real.
Getting the details right
Use JSON-LD, not microdata
JSON-LD sits in a script tag, separate from your markup. Microdata is woven through your HTML attributes, which means any template change risks breaking it silently. Google recommends JSON-LD and it is far easier to maintain.
Never mark up content that is not on the page
FAQPage markup for questions no visitor can see is a policy violation and a good way to lose rich results entirely. If it is in the schema, it must be visible in the rendered page.
Keep dateModified honest
Bumping dateModified on every deploy to fake freshness is transparent and it destroys the value of the signal on the pages you genuinely did update. Set it when the content actually changed. Freshness matters most on pages with prices, tools or regulations attached, and barely at all on stable definitions.
Validate, then check it renders
Google’s Rich Results Test and the Schema.org validator catch syntax errors. They do not catch schema injected by client-side JavaScript that some crawlers never execute. Check the raw HTML response, not just the rendered page.
What to do first if you are starting from nothing
- Add a sitewide Organization or ProfessionalService block with a stable @id, full address, phone and sameAs profiles.
- Add a Person block for whoever is the public face, with their own @id, and link it to the organisation with worksFor.
- Add Article markup to every post, referencing both @ids rather than repeating names as strings.
- Add FAQPage markup to pages with genuine visible question and answer content.
- Add BreadcrumbList to every page below the root.
- Validate the lot, then check it appears in the raw HTML source and not only after JavaScript runs.
That is a day of work for most sites and it is worth doing properly once. If you want it checked before you build on top of it, the free SEO audit includes a structured data review. After that, the returns come from structuring pages so they answer directly, and from off-site authority. Schema gets you a clean read. It does not get you selected. If your pages are not ranking at all yet, that is a different diagnosis, and markup will not fix it. An llms.txt file is the same category of cheap housekeeping.
Frequently asked questions
Does schema markup help with AI search visibility?
It helps once your pages are already being retrieved, by making the topic, authorship and structure explicit rather than inferred. It does not create eligibility. A page with flawless markup on an untrusted domain still will not be cited, because it was never surfaced in the first place.
Which schema types matter most for AI?
Organization or ProfessionalService, Person, Article, FAQPage and BreadcrumbList cover almost all the value for a services business. The bigger win is linking them with @id so every page reinforces one identified entity rather than describing unrelated documents.
Is JSON-LD better than microdata?
Yes, for practical reasons. JSON-LD lives in a single script tag separate from your HTML, so template changes cannot silently break it. Microdata is spread through HTML attributes and is fragile in comparison. Google recommends JSON-LD and it is significantly easier to maintain.
Can I add FAQPage schema for questions not shown on the page?
No. Structured data must reflect content visible to the user. Marking up hidden questions violates Google's guidelines and can cost you rich results across the entire site, not just that page. If it is in the schema, it must be in the rendered page.
How do I check my schema is working?
Run the page through Google's Rich Results Test and the Schema.org validator for syntax. Then view the raw HTML source and confirm the JSON-LD is present there. Schema injected by client-side JavaScript may never be seen by crawlers that do not execute scripts.
Should I update dateModified every time I deploy?
No. Set it when the content genuinely changed. Automatic bumps on every deploy are easy to detect and they devalue the signal on pages you actually did revise. Freshness carries weight on pages with pricing, tools or regulations, and almost none on stable reference content.

Written by Robin Ooi
Robin is a Malaysian AI SEO and reputation specialist with more than fifteen years in search. He is the Amazon bestselling author of Your SEO Sucks! and works with MNC and listed company clients across Kuala Lumpur, Penang, Johor and Singapore. Read more about Robin Ooi.
