Paul LovellBook a call
Back to Blog
10 min readPaul Lovell

Schema Markup for SEO: The Complete Practitioner's Guide

Rich snippets get the attention, but entity disambiguation is the bigger reason schema markup matters — especially as AI Overviews take a growing share of search.

Technical SEOStructured DataEntity SEO

Schema markup is structured data added to a page's code that describes its content in a format a search engine or AI system can parse directly, rather than inferring meaning from unstructured text. Google, Bing, and increasingly AI Overviews and other answer engines use it to understand entities, relationships, and facts on a page well beyond what crawling raw HTML provides.

This guide covers what actually matters in practice: which format to use, which schema types are worth implementing, how to connect multiple types correctly, how to validate what you've shipped, and where schema genuinely moves the needle versus where it's cosmetic.

Why schema markup matters beyond rich snippets

The rich-snippet argument for schema markup gets most of the attention, but it's the weaker half of the case. A rich snippet is a visible bonus, not the primary value structured data provides. The bigger effect is entity disambiguation — telling a search engine unambiguously who or what a page is about, and how that entity relates to others (an author to an organization, a product to a brand, a review to a business). This is the layer AI Overviews and other answer engines lean on heavily when deciding which sources to cite, because structured data markup is far cheaper for a search engine or AI system to parse reliably than free text.

Rich snippets themselves still matter for click-through rate where they're available — a listing with star ratings, price, or breadcrumbs visibly stands out against plain blue links in the same results page — but treat that as a secondary benefit of implementing schema markup correctly, not the reason to do it.

JSON-LD vs Microdata vs RDFa

There are three ways to implement structured data, and in practice one is a clear default. JSON-LD is a single script block that sits separately from your HTML markup, which means it can be generated, updated, and validated independently of your templates. Microdata and RDFa require annotating the HTML elements themselves with attributes, which is fragile — a template change can silently break the structured data markup without anyone noticing, because there's no visual indication that annotated attributes are missing.

Google has stated a preference for JSON-LD, and it's also simply easier to maintain schema markup at scale: one script block per page, generated from your existing data layer, versus attributes scattered through templates. Unless you have a specific legacy constraint, JSON-LD is the right default for every new implementation, and it's what every major search engine's own documentation demonstrates first.

Connecting schema types correctly with @id and @graph

A common mistake is generating separate schema blocks for related entities — a Person block here, an Organization block there, an Article block on every post — with no relationship declared between them. Structured data testing tools will report each as valid individually, but validators and search engines still see them as disconnected entities rather than one coherent graph.

The fix is to give each entity a stable @id (typically a URL fragment like https://example.com/#person) and reference that @id from related entities instead of repeating the full object. An Article's author property becomes a reference to that @id rather than a duplicated inline Person object, and everything sits inside a single @graph array under one @context. This is a small structural change with an outsized effect: it turns a set of isolated claims into a connected entity graph that mirrors how Google's Knowledge Graph actually models the web.

Which schema types are worth prioritizing

Organization and Person schema belong on every site — they establish the core entities everything else references. Article schema is essential for any content site, and should include headline, datePublished, author, and publisher at minimum, with articleBody and wordCount where the content genuinely warrants it.

FAQ and HowTo schema are worth a caveat: Google restricted FAQ rich results to a narrow set of authoritative government and health sites in 2023, and scaled back HowTo similarly. Implementing them can still help entity understanding and AI Overview sourcing, but don't implement either expecting the rich-result visual you'll see in older guides — that specific benefit is largely gone for most sites.

Product, Review, and LocalBusiness schema matter specifically for ecommerce and local-intent sites, where the rich-result upside (star ratings, price, availability) is still very much live and click-through-rate-relevant.

Schema types at a glance

Every implementation eventually needs to answer "which schema type actually applies here." A quick reference for the types that come up most often in practice:

  • Organization schema — the entity behind the whole site: name, logo, sameAs profiles, founder.
  • Person schema — an individual author or practitioner, referenced by @id from Article, Review, or Organization founder properties.
  • Article schema — headline, author, publisher, datePublished, articleBody; the baseline for any content-led site.
  • Product schema — price, availability, brand, aggregateRating; drives the rich-result snippet ecommerce search results are built around.
  • Review schema — author, reviewRating, itemReviewed; almost always paired with Product or LocalBusiness rather than standing alone.
  • LocalBusiness schema — address, openingHours, geo coordinates; the type Google Business Profile-linked pages should carry.
  • FAQPage and HowTo schema — still valid for entity understanding, no longer reliably tied to a rich-result visual.
  • BreadcrumbList schema — mirrors the visible breadcrumb trail; low effort, still actively used for the breadcrumb rich result.
  • VideoObject schema — duration, thumbnail, uploadDate; required for video rich results and video-specific AI Overview citations.

Different schema types carry different required and recommended properties — always check the current schema.org definition for the exact type you're implementing rather than copying a template from an older guide, since required properties do change.

How to implement schema markup step by step

The process is the same regardless of which schema type you're adding:

  1. 1Identify the entity the page is actually about — a single product, a single article, a single local business location — before picking a type. Ambiguity at this step is what causes disconnected or duplicated entities later.
  2. 2Choose the schema.org type that matches, and pull its full property list rather than guessing from memory. Required properties vary by type, and Google's own rich-result documentation lists which properties are required versus recommended for each.
  3. 3Generate the JSON-LD from your existing data layer (CMS fields, product database, CRM record) rather than hand-writing static values — static values drift out of date the moment the underlying content changes, and stale schema is worse than no schema.
  4. 4Reference shared entities by @id instead of duplicating them, and wrap related types in a single @graph block under one @context, as covered above.
  5. 5Validate with both the Schema.org validator and Google's Rich Results Test before deployment, and again after any template or framework change.
  6. 6Monitor Google Search Console's structured data reports on a recurring basis, not just at launch — coverage errors surface weeks after a change, not immediately.

Schema markup and E-E-A-T

Structured data doesn't create expertise, experience, authoritativeness, or trust on its own — it makes signals that already exist explicit and machine-readable. A Person schema with a real sameAs array linking to a genuine LinkedIn profile, published articles, and speaking history is doing something different from a Person schema with a name and nothing else: it gives Google's systems (and any AI system parsing the page) a verifiable identity to attach the content to. The schema is the delivery mechanism, not the substance — it has nothing to disambiguate if the underlying credentials aren't real.

A frequent misconception worth correcting directly: schema markup is not a ranking factor in the way title tags or backlinks are. Google has stated this consistently. What it does is remove ambiguity and unlock specific SERP features and AI Overview citations that wouldn't otherwise be available — the ranking benefit, where one exists, is indirect, coming from improved click-through rate on rich results and better machine comprehension of already-strong content, not from the markup itself carrying ranking weight.

Validating what you've shipped

Google's Rich Results Test checks for rich-result eligibility specifically, while the Schema.org validator and Google's Search Console structured data reports check for broader schema.org compliance and site-wide error tracking. Use both — a page can be schema.org-valid while still failing Google's narrower rich-result eligibility criteria, and the two tools will disagree in ways that are useful to see. Any schema markup validator is only checking syntax and required properties, not whether the values you've entered are actually true — a Product schema with a fabricated aggregateRating will validate cleanly and still get the listing suspended once Google or a user flags it as inaccurate.

The most common real-world failure isn't invalid syntax — it's disconnected entities (the @graph problem above), missing required properties for the specific schema type you're using, or JSON-LD injected client-side that never reaches Googlebot's rendered DOM in time to be read. Run every template through a structured data markup validator after any theme or framework change, not just at initial launch — a routing or hydration change can silently strip the script tag without breaking anything visible on the page.

Where this is heading

As AI Overviews and other answer engines take a larger share of search traffic, the value of unambiguous, machine-readable entity data is going up, not down. Traditional search engines and generative AI systems are converging on the same underlying requirement: content that states its facts and entity relationships explicitly, rather than leaving a search engine or AI system to infer them from prose. The sites that will be cited as sources — by a search engine's rich results and by an AI system's generated answer alike — are the ones whose content is easiest to parse with confidence, and a connected, well-validated schema graph is one of the most direct ways to earn that.

Paul Lovell

Written by

Paul Lovell

International SEO Consultant & Founder of Always Evolving SEO. 15+ years running technical audits, log-file analysis, and root-cause fixes for multimillion-dollar businesses — speaker at SMX London, Search & Content Summit, and SEMrush events.