Structured Data

Structured Data: Which Schema Types Actually Earn Rich Results

There are hundreds of schema.org types and Google renders a rich result for about a dozen. Knowing which is which saves you from spending a fortnight marking up things nobody will ever see.

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 @graph with 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.

TypeWhat you may getWorth it when
Product + OfferPrice, availability, review starsYou sell products. Among the highest-value markup there is.
RecipeImage, time, ratings, carousel entryFood content. Very well supported.
FAQPageExpandable questions under your resultGenuine Q&A visible on the page. Display has narrowed — still read for understanding.
BreadcrumbListBreadcrumb path replacing the raw URLAlways. Cheap, reliable, low risk.
EventDates, venue, ticket linksYou run events with real dates and locations.
JobPostingInclusion in Google JobsYou post vacancies.
Review / AggregateRatingStar ratingsYou have genuine reviews. Heavily policed — do not fake it.
VideoObjectVideo thumbnail, key momentsVideo is the main content of the page.
HowToStep previewsGenuine procedural content. Display support has reduced.
LocalBusinessFeeds local features alongside your Business ProfileYou 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 and sameAs. 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.
  • WebPage and 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:

  • SiteNavigationElement for your menu.
  • WPHeader, WPFooter, WPSideBar for page furniture.
  • SpeakableSpecification outside the narrow news programme it was built for.
  • ImageObject on 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

  1. 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.
  2. 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.
  3. Required properties are required. Missing one usually disqualifies the item from a rich result entirely rather than degrading gracefully.
  4. Be specific with types. Product beats Thing. The more specific the type, the more Google can do with it.
  5. Do not mark up the same thing twice with conflicting values. Two Article blocks with different headlines on one page is a contradiction, not redundancy.
  6. Dates must be ISO 8601. 2026-09-01, not 1 September 2026.
  7. Self-serving reviews do not count. AggregateRating on 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 @id references.

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.

Thejas Acharya — digital strategy consultant behind Digital with Thejas

Written by

Thejas Acharya

Digital strategy consultant behind Digital with Thejas, based in Mangaluru, working with founders and marketing teams across India and the US. I build websites, landing pages, Meta Ads campaigns and AI automation that are judged on one thing: whether they generate leads. The free tools on this site are the checks I run on client work, opened up.

Free · No signup · No data stored

Find out what structured data your pages actually emit.

Every finding names the value it found, so you can verify it yourself. If the page blocks bots or sits behind a login, paste the source instead and get the identical analysis.

Structured data blocks Head tags and canonical Heading structure Indexability

Free · No obligation · India & US clients · I reply to every email within 24 hours