SEO · 10 min read

Schema markup that actually moves the needle

Which schema types actually earn rich results and AI citations, how to validate them, and the typed schema modules pattern that prevents drift.

Format
Article
Updated
Apr 2, 2026
Read time
10 min read

TL;DR

Most schema markup is decorative and does not move rankings, rich results, or AI citations. The short list that actually moves the needle is Organization plus Person plus WebSite plus appropriate vertical schema (LocalBusiness, Product, Article, FAQPage, BreadcrumbList) with stable @id URIs and validated JSON-LD. Generate it from typed modules using schema-dts so it cannot drift, and validate every page in CI.

01

Most schema markup does nothing

Most schema markup on most websites is decorative. It validates, it sits in the page, and it never earns a rich result or an AI citation. The short list that actually moves the needle is small: Organization, Person, WebSite, and the vertical-appropriate type (LocalBusiness with the right subtype, Product, Article, FAQPage, BreadcrumbList, Service). Stable @id URIs across pages let entities be referenced rather than redefined. Everything else is mostly noise.

Open a random WordPress site in 2026 and you will find ten or fifteen schema types injected by various plugins. Recipe schema on a contact page. AggregateRating schema with no actual reviews. Event schema for events that ended in 2022. WebPage schema that exists for no reason because every page is a WebPage by definition.

None of this moves anything. It validates because the values are syntactically correct and it sits in the page because nothing removes it. Google ignores most of it. AI engines ignore most of it. The signal-to-noise ratio is terrible.

The short list of schema types that actually pay back is much smaller than people think. Get those right and the rest is mostly cosmetic.

02

The schema types that earn rich results

Article schema (or NewsArticle for news sites) earns the publication date display and is required for the Top Stories carousel where eligible. Get the headline, datePublished, dateModified, author with linked Person @id, and image array right and the page becomes eligible.

FAQPage schema used to earn an FAQ-rich result that Google rolled back to only-for-government-and-health sites in 2023. It is still worth shipping for AI citation purposes because AI engines extract from FAQPage-tagged blocks reliably even when the rich result does not show.

Product schema with offers, price, priceCurrency, availability, and aggregateRating earns the price-and-stars display on commercial SERPs. Required for Google Shopping Free Listings.

BreadcrumbList earns the breadcrumb path display under the title in SERP. Cheap to ship, almost universally good.

Recipe, Event, JobPosting, Course, HowTo, VideoObject, and Movie all earn vertical-specific rich results when applicable. Do not ship these unless the page actually is a recipe, event, job, course, how-to, video, or movie.

LocalBusiness with the correct subtype (Dentist, Restaurant, LegalService, Plumber, etc.) plus address, geo, openingHoursSpecification, and aggregateRating powers the local pack and knowledge panel for brick-and-mortar and SAB businesses.

03

The schema types that earn AI citations

AI engines extract entity information from schema even when the schema does not earn a visible rich result. The types that improve citation accuracy and frequency are Organization, Person, and WebSite at the site level, plus FAQPage and Article at the page level.

Organization schema with sameAs links to LinkedIn, GitHub, Crunchbase, and Wikidata establishes the entity in the model's knowledge graph. Person schema with sameAs links to author profiles does the same for individual authors. AI engines lean on these to decide who you are and whether you are citable as authority on a topic.

FAQPage schema on long-form pages tells AI extractors which question-and-answer pairs are the canonical Q-and-A units of the page. We see materially higher AI citation rates on pages with proper FAQPage versus pages with the same content not marked up.

WebSite schema with potentialAction for SearchAction enables the in-SERP search box and helps AI engines understand the site's content discovery model.

04

Stable @id URIs are the underrated move

The single most underused schema technique is stable @id URIs. Every entity (Organization, Person, WebSite, Service, Product) gets a permanent canonical identifier like https://example.com/#organization or https://example.com/team/jane-smith#person. Other pages reference the entity via @id rather than redefining it. This makes the entity graph machine-readable as a graph, which is how Google and AI engines actually consume schema, not as isolated page-level snippets.

Most schema in the wild redefines the same Organization on every page. Same name, same logo, same sameAs array, repeated thousands of times across the site. Validators accept it. Google parses it as the same entity. But the structure is wrong: schema is a graph, and a graph wants nodes referenced, not duplicated.

We assign every entity on the site a stable @id URI. The Organization is at https://clientdomain.com/#organization. The site itself is at https://clientdomain.com/#website. Each Person is at https://clientdomain.com/team/[slug]#person. Each Service is at https://clientdomain.com/service/[slug]#service.

Other schema then references these entities via @id rather than redefining them. Article schema's author property points to a Person @id. Service schema's provider points to the Organization @id. Product schema's brand points to the Organization @id. The graph becomes connected and unambiguous.

05

Validate everything, in CI, every build

Schema that is not validated in CI drifts. Someone edits a page, a property goes missing, no one notices, the rich result eligibility quietly disappears. Three weeks later the rich result stops showing and no one knows why.

We validate schema in two ways. First, the JSON-LD is generated from typed schema-dts modules in TypeScript so most structural errors fail the build. Schema-dts gives us types for every Schema.org type and property, so '@type: Article requires headline' becomes a compile error rather than a runtime omission.

Second, we run an automated validation pass against Google's Rich Results test API and Schema.org's validator on every deploy preview. Any page where validation fails or rich result eligibility drops blocks the merge. The validation report is part of the PR review.

The third layer, post-launch monitoring, is the Search Console Enhancements report. We check it weekly. Any new errors trigger a fix the same week. Any drop in valid items by more than ten percent triggers an investigation that day.

06

Common mistakes

AggregateRating schema with no actual reviews. Google catches this and either ignores the schema or, in egregious cases, issues a manual action. Only emit AggregateRating where you can also show the reviews on the page.

Review schema for first-party reviews on your own product. The 2019 update removed self-serving reviews from rich result eligibility. Use third-party review platforms (Trustpilot, G2, Capterra) and reference their AggregateRating where appropriate.

Schema that contradicts the visible page content. If the page says 'opens at 9am' and the OpeningHoursSpecification says '8am,' Google will distrust both. Schema must match the page.

FAQPage schema with content that is not actually presented as a FAQ on the page. Google deprecated this misuse in 2023 and rich results stopped showing for noncompliant sites.

Schema in HTML comments instead of script tags. Crawlers do not parse comments. We see this in older WordPress themes more than expected.

Schema generated from PHP arrays inline in the template, drifting because no one knows where the source of truth is. Centralize schema in typed modules. One source. One place to change. Testable.

Questions

Answered below.

  • The short list is Organization, Person, WebSite, BreadcrumbList, Article (or NewsArticle), FAQPage, Product, and the vertical-appropriate LocalBusiness subtype. Plus Recipe, Event, JobPosting, Course, HowTo, VideoObject, and Movie when the page actually is one of those things. Most other schema types are decorative and do not move anything.

Want this work done for you?

Let's talk.