The short version
- Three tiers: types that render a rich result, types Google reads for understanding, and types that do nothing visible.
- Use JSON-LD. Google prefers it, it is easier to maintain, and it does not entangle markup with layout.
- Markup must match visible content. Marking up something a user cannot see is a policy violation.
- Rich results are eligibility, never a guarantee. Valid markup does not oblige Google to render anything.
- One connected
@graphwith stable@ids beats five disconnected blocks.
JSON-LD, microdata or RDFa
Three syntaxes express the same vocabulary. Use JSON-LD, for three practical reasons.
Google states a preference for it. It lives in a single <script> block rather than being woven through your HTML attributes, so a redesign does not silently destroy your markup. And it can be injected by a template or tag manager without touching page structure.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Your headline here",
"author": { "@id": "https://example.com/#jane" }
}
</script>
Microdata — attributes like itemprop sprinkled across your markup — still works, and if you have inherited it there is no urgency to migrate. Just do not start there. RDFa is rarely worth considering for a marketing site.
Place JSON-LD in the <head> or the <body>; both are fine. Head is tidier. If your framework injects it client-side, verify it appears in the rendered HTML, since server-rendered is strictly safer.
Tier 1: types that render rich results
These can change how your result looks in search. This is where markup effort pays visibly.
| Type | What you may get | Worth it when |
|---|---|---|
Product + Offer | Price, availability, review stars | You sell products. Among the highest-value markup there is. |
Recipe | Image, time, ratings, carousel entry | Food content. Very well supported. |
FAQPage | Expandable questions under your result | Genuine Q&A visible on the page. Display has narrowed — still read for understanding. |
BreadcrumbList | Breadcrumb path replacing the raw URL | Always. Cheap, reliable, low risk. |
Event | Dates, venue, ticket links | You run events with real dates and locations. |
JobPosting | Inclusion in Google Jobs | You post vacancies. |
Review / AggregateRating | Star ratings | You have genuine reviews. Heavily policed — do not fake it. |
VideoObject | Video thumbnail, key moments | Video is the main content of the page. |
HowTo | Step previews | Genuine procedural content. Display support has reduced. |
LocalBusiness | Feeds local features alongside your Business Profile | You have a real physical location. |
Rich result support genuinely changes over time — Google has narrowed FAQPage and HowTo display significantly. Check current documentation before planning work around any single one, and never build a content strategy whose only justification is a rich result that might be withdrawn.
Free tool · See your rendered schema
Check which structured data blocks actually ship
Paste a URL and the checker reports the structured data it finds in the rendered HTML, alongside your head tags and heading structure — the fastest way to catch a template that stopped emitting schema.
Tier 2: types Google reads but does not render
No visible change, real value. These are how Google understands what your site and its entities are.
Organization— who publishes this site. Carries your logo, contact points, service area andsameAs. Foundational.Person— the author or the individual behind the business. The core of any entity work.WebSite— names the site as a whole. Feeds the site-name feature in search results.WebPageand its subtypes —AboutPage,ContactPage,ProfilePage,CollectionPage. Tells Google what kind of page this is.Article/BlogPosting/NewsArticle— authorship, dates, publisher. Rarely renders outside news surfaces, but it is how article-ness is established.Service— what you offer, where. Useful for service businesses with no products to mark up.
If you are a consultancy or service business, tier 2 is where nearly all your value sits. There is no rich result for “being a credible consultant”, and that is fine — the goal is being understood correctly, and that shows up in name queries, snippet quality and AI answers rather than in a visual treatment.
Tier 3: types that do nothing visible
Valid schema.org types with no rich result and little evidence of use. Marking them up is harmless and mostly pointless:
SiteNavigationElementfor your menu.WPHeader,WPFooter,WPSideBarfor page furniture.SpeakableSpecificationoutside the narrow news programme it was built for.ImageObjecton every decorative image.
Some SEO plugins emit all of this by default, which is why so many sites have enormous schema blocks doing very little. Volume of markup is not a signal. A short, correct, connected graph is better than a long one padded with furniture.
Connect your nodes with @graph
The most common structural mistake is emitting several independent blocks that never reference each other. Google then has an article, a person and an organisation on one page with no stated relationship between them.
Use @graph and stable @ids so the nodes point at one another:
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "BlogPosting",
"@id": "https://example.com/post/#article",
"headline": "...",
"author": { "@id": "https://example.com/#jane" },
"publisher": { "@id": "https://example.com/#brand" },
"isPartOf": { "@id": "https://example.com/#website" }
},
{
"@type": "Person",
"@id": "https://example.com/#jane",
"name": "Jane Smith",
"worksFor": { "@id": "https://example.com/#brand" }
},
{
"@type": "Organization",
"@id": "https://example.com/#brand",
"name": "Example Studio",
"founder": { "@id": "https://example.com/#jane" }
}
]
}
Now it is one connected graph: a post, written by a person, who runs the organisation, that publishes the site. Every reference resolves. Compare that with three orphan blocks and the difference in what Google can conclude is substantial.
Keep the @ids permanent. Changing them creates new entities and discards accumulated confidence.
The rules that get markup ignored
- Markup must reflect visible content. Marking up an FAQ that is not on the page, or a rating nobody left, violates Google’s structured data policies and can trigger a manual action.
- Do not mark up content behind interaction only. Content inside an accordion is fine because it is in the HTML. Content loaded only after a click may not be.
- Required properties are required. Missing one usually disqualifies the item from a rich result entirely rather than degrading gracefully.
- Be specific with types.
ProductbeatsThing. The more specific the type, the more Google can do with it. - Do not mark up the same thing twice with conflicting values. Two
Articleblocks with different headlines on one page is a contradiction, not redundancy. - Dates must be ISO 8601.
2026-09-01, not1 September 2026. - Self-serving reviews do not count.
AggregateRatingon your own site about your own business, with no genuine review source, is the single most reliable way to earn a penalty here.
Validating properly
Use two tools, because they answer different questions:
- Google’s Rich Results Test tells you whether Google considers the page eligible for a rich result, and which type. This is the one that reflects what Google actually does.
- The Schema Markup Validator checks your markup against the schema.org vocabulary generally, including types Google ignores. Use it to catch structural errors and broken
@idreferences.
Then check Search Console’s Enhancements reports, which show errors Google found on real crawls of your live site — the only source that reflects your whole site rather than one URL.
Two habits worth building. Test the rendered HTML, not your template source, especially with client-side injection. And after any template change, re-test one page of each type; a broken loop in a template can strip schema from a thousand pages silently.
Where to start
A sensible order
- Organization + WebSite on every page, with stable
@ids. Foundational. - Person if the business is built around an individual.
- BreadcrumbList everywhere it applies. Cheap, and it usually renders.
- Article or BlogPosting on posts, referencing the Person and Organization by
@id. - Product, Event, Recipe or JobPosting if you genuinely have those. This is where rich results live.
- Stop. Everything past this point is diminishing returns.
That is perhaps a day of work on a normal site, and it covers essentially all of the available value. The temptation is to keep going — more types, more properties, more nested nodes. Resist it. The goal is a small graph that is completely correct, not a large one that is mostly plausible.
FAQ
Does structured data improve rankings?
Not as a direct ranking factor, and Google has said so repeatedly. What it does is make you eligible for rich results, and help Google understand your content and entities correctly. Better understanding can improve which queries you surface for and how your result looks, which affects clicks. Treat it as clarity and eligibility, not a lever.
Which structured data format should I use?
JSON-LD. Google prefers it, it lives in one script block instead of being woven through your HTML, and a redesign will not silently destroy it. Microdata still works if you have inherited it, so there is no urgency to migrate, but new markup should be JSON-LD.
Why is my valid markup not showing a rich result?
Valid markup makes you eligible; it does not oblige Google to render anything. Common reasons: the type has no rich result at all, Google has narrowed display for that type, page quality is not high enough to warrant enhancement, or the query does not trigger that treatment. Confirm eligibility in the Rich Results Test, then accept that display is Google's call.
Can structured data hurt my site?
Yes, in two ways. Marking up content that is not visible on the page — fake reviews, invisible FAQs, ratings nobody left — violates Google's policies and can trigger a manual action that removes rich results site-wide. And markup that contradicts your visible content or other pages lowers confidence in your entities rather than raising it.
Do I need schema on every page?
Your Organization, WebSite and Person nodes should be on every page, identically, sharing stable @ids — that is what merges them into single confident nodes. Page-specific types go only where they apply: BlogPosting on posts, Product on product pages, ProfilePage on exactly one page. Do not mark a page as something it is not.