Overview

Ship JSON-LD with schema.org vocabulary on every public page: it tells search engines what the page is, earns rich results where Google still offers them, and feeds entity resolution. Markup that misdescribes the page can draw a structured-data manual action. Not every type maps to a SERP feature anymore, so check the retirement list below before building markup for a feature.

Ship JSON-LD, not Microdata or RDFa

Google documents all three formats but recommends JSON-LD. It sits in a <script> tag apart from the DOM, so it survives template changes.

  • One <script type="application/ld+json"> block per entity. Keep entities atomic rather than chaining unrelated types into one blob.
  • Inline it in <head> of the server-rendered HTML so crawlers see it on first byte.
  • Generate it from the page’s frontmatter at build time so markup and content cannot drift.
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "Technical SEO",
  "author": { "@type": "Person", "name": "Jane Doe", "url": "https://example.com/authors/jane-doe" },
  "datePublished": "2026-05-14",
  "dateModified": "2026-05-14",
  "image": "https://example.com/og/seo-technical.png",
  "mainEntityOfPage": "https://example.com/seo/technical"
}
</script>

For the end-to-end build see add-jsonld-to-static-site; for required fields by type see schema-org-types.

Pick the schema for the page type

  • WebSite once on the homepage to declare the site name.
  • Organization once on the homepage or /about, with logo, sameAs, and contact points.
  • BreadcrumbList on every page below the homepage.
  • Article or BlogPosting on editorial pages. Google lists no required properties but recommends headline, datePublished, dateModified, and an author with name and a url to a real author page.
  • Product, Recipe, Event, JobPosting, LocalBusiness, VideoObject when the page is that thing; these still earn rich results (see schema-markup-deep).
  • FAQPage and HowTo only when the page really is Q&A or a procedure, for other consumers such as AI agents. They earn no Google SERP feature.

Check the retirement list before chasing a rich result

Google has retired these; leftover markup is harmless, and Google says there is no need to strip it.

FeatureRetired
HowTo rich resultDesktop-only in August 2023; removed September 2023
Sitelinks search box (WebSite + SearchAction)November 21, 2024; WebSite still drives the site name
Book Actions, Course Info, Claim Review, Estimated Salary, Learning Video, Special Announcement, Vehicle ListingAnnounced June 12, 2025, then phased out
Practice problemAnnounced November 2025; Search Console support ended January 2026
FAQ rich resultLimited to government and health sites in 2023; no longer shown for any site from May 7, 2026

Handle leftover markup this way:

  • Keep accurate FAQPage or HowTo on genuine Q&A or procedural pages; other parsers still read it. See structured-data-for-ai-crawlers.
  • Remove it where it was bolted on to chase the old feature, such as FAQ blocks on product pages. Markup the visible content does not back remains a guideline violation.
  • Do not count retired types in rich result audits. The Rich Results Test and the Search Console FAQ report no longer cover FAQ, so validate syntax with the schema.org validator.

Google’s docs list required and recommended properties per type. A missing required field disqualifies the page from the rich result. Add recommended fields when the data exists; optional padding is noise.

Never mark up what the reader cannot see

Markup must match the visible page, or it risks a structured-data manual action in Search Console. Bing also lists misleading structured data as abuse.

  • Author, datePublished, and prices match what the page shows. Honest author markup is the base for e-e-a-t.
  • aggregateRating comes from real reviews on the same page, not an external source.
  • Never mark up questions, steps, or products absent from the HTML.

Validate before every deploy

Run Google’s Rich Results Test (https://search.google.com/test/rich-results) for eligibility and the schema.org validator (https://validator.schema.org) for vocabulary conformance. Wire both into a pre-deploy check on the sitemap’s top 20 URLs, and make failures block the deploy. Keep the JSON-LD URL identical to the canonical from technical.