Structured data is machine-readable metadata that describes what your content is (an article, a product, a job posting, an organization) using the schema.org vocabulary. Google uses it to make pages eligible for rich results (review stars, prices, job details, recipe cards) and to understand the entities behind a page. Validated markup is one of the few deterministic things in SEO, but the list of features it unlocks shrinks and changes every year, so the table you learned in 2023 is probably wrong.
JSON-LD: the format#
Google supports JSON-LD, Microdata and RDFa, and recommends JSON-LD: a script block separate from your visible markup.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "How to Fix Soft 404s in Next.js",
"datePublished": "2026-03-02",
"dateModified": "2026-05-19",
"author": { "@type": "Person", "name": "Ada Okafor", "url": "https://example.com/authors/ada" },
"image": "https://example.com/og/soft-404s.png"
}
</script>In Next.js, render it from the page or layout so it ships with the server HTML:
export default async function Page({ params }: PageProps<"/blog/[slug]">) {
const post = await getPost((await params).slug);
const jsonLd = {
"@context": "https://schema.org",
"@type": "Article",
headline: post.title,
datePublished: post.publishedAt,
dateModified: post.updatedAt,
author: { "@type": "Person", name: post.author.name },
};
return (
<article>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
// Escape "<" so a "</script>" in the data cannot close the tag
__html: JSON.stringify(jsonLd).replace(/</g, "\\u003c"),
}}
/>
{/* … */}
</article>
);
}Type your objects with the community schema-dts package if you want autocompletion and compile-time checks on property names.
What still earns a rich result (October 2026)#
Google's search gallery is the only list that counts. Checked on 2026-10-05, the features most sites will use are:
| Type | What it can earn | Use on |
|---|---|---|
Article / NewsArticle / BlogPosting | Better title, image and date understanding; Top Stories eligibility | Editorial content |
Product + Offer (+ AggregateRating, Review) | Product snippets (price, stock, stars) and merchant listings | Product pages |
MerchantReturnPolicy, ShippingService, MemberProgram (under Organization) | Return, shipping and loyalty details next to products | Store-wide policies |
BreadcrumbList | Breadcrumb trail on desktop results | Everything with a hierarchy |
Organization | Logo and knowledge panel details | Home or about page |
LocalBusiness | Business details for local results | Location pages |
VideoObject | Video results, key moments, live badge | Pages where the video is the main content |
JobPosting, Event, Recipe, SoftwareApplication, VacationRental | Vertical-specific rich results | Matching content only |
ProfilePage, DiscussionForumPosting, QAPage | Profile and forum treatments | Creator profiles, forums, Q&A sites |
Course (list) | Course list carousel (at least three courses) | Course catalogues |
Dataset | Dataset Search only, not Google Search | Data publishers |
Speakable is still listed but is beta, news-only and US English. Book Actions survived its 2025 deprecation notice because a feature still uses it. Event markup now requires an event that the public can attend at a physical location: Google removed the online-event properties on 2025-06-05 (see the update log).
Recent additions worth knowing#
- Merchant listings gained member pricing (
validForMemberTier, beta, February 2025), a dedicated loyalty program type (MemberProgram, June 2025), organization-level shipping policies (ShippingService, November 2025),Product.categoryaccepting text or a category code (July 2026) and sale-date guidance forvalidFrom,validThroughandpriceValidUntil. Merchant-wide return policies belong underOrganization. Details in E-commerce SEO. - VideoObject gained a
creatorproperty (alongsideauthor) and documentedinteractionStatistictypes on 2026-09-24. - Review snippets: since 2026-07-24 the guidelines explicitly forbid fake and undisclosed incentivized reviews.
- Discussion forum and Q&A markup gained comment-thread properties on 2026-03-24.
What was retired#
If an older guide, plugin or audit tool still recommends these for rich results, it is out of date:
| Feature | Status |
|---|---|
FAQ (FAQPage) | Limited to government and health sites in 2023, then stopped showing for everyone on 2026-05-07; docs removed 2026-06-15 |
| HowTo | Removed in 2023 |
Sitelinks search box (SearchAction) | Removed globally on 2024-11-21 |
| Breadcrumbs on mobile | Hidden on mobile results since 2025-01-23 (desktop keeps them; the markup and report remain) |
| Course info, Estimated salary, Learning video, Special announcement, Vehicle listing | Phase-out announced 2025-06-12; dropped from Search Console and the Rich Results Test on 2025-09-09 |
| ClaimReview (fact check) | Being phased out of Search; still used by Google's Fact Check Explorer |
| Practice problem | Deprecated 2025-11-05; docs removed 2026-01-06 |
Google said the 2025 removals "won't affect how pages are ranked". You don't need to delete retired markup in a panic: it is valid schema.org and does no harm. Just stop adding it for SERP gain, and fix dashboards that filter on retired search appearances.
Two rules that never change#
- Markup must describe visible page content. Marking up reviews, prices or FAQs that users cannot see violates the structured data guidelines and can earn a manual action.
- Eligibility, not entitlement. Valid markup makes you eligible for a rich result; Google decides per query whether to show it.
Entities and the @graph#
Beyond rich results, structured data describes your entities: the organization, the people and the pages, and how they relate. The clean way to do that is one @graph per page, with a stable @id for each node so other nodes (and other pages) can reference it instead of re-declaring it:
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://example.com/#org",
"name": "Example Co",
"url": "https://example.com/",
"logo": "https://example.com/logo.png",
"sameAs": [
"https://github.com/example",
"https://www.linkedin.com/company/example"
]
},
{
"@type": "WebSite",
"@id": "https://example.com/#website",
"name": "Example Co",
"url": "https://example.com/",
"publisher": { "@id": "https://example.com/#org" }
}
]
}Every article can then point at the same nodes:
{
"@type": "Article",
"@id": "https://example.com/blog/soft-404s#article",
"headline": "How to Fix Soft 404s in Next.js",
"isPartOf": { "@id": "https://example.com/#website" },
"publisher": { "@id": "https://example.com/#org" },
"author": { "@id": "https://example.com/authors/ada#person" }
}Conventions that age well: use the canonical URL plus a fragment (#org, #website, #person), never change an @id once published, and keep sameAs to profiles you actually control. WebSite markup on the home page also feeds Google's site names; skip SearchAction, since the sitelinks search box it powered is gone. Entity work goes deeper in Entity SEO.
Structured data and AI search#
Google is explicit: to appear in AI Overviews or AI Mode "there's also no special schema.org structured data that you need to add" (AI features and your website). Eligibility for those features is the same as for a normal snippet: indexed and allowed to show one.
Treat any claim that schema is an AI-citation lever as unproven. Schema is still worth it for the rich results above, for site names and logos, and for unambiguous entity facts. That is the honest pitch. For what does influence AI answers, see SEO for AI Mode & AI Overviews and Generative Engine Optimization.
Validation and monitoring#
- Rich Results Test: checks eligibility for Google's supported features, rendered as Googlebot sees the page. Retired types no longer appear in it.
- Schema Markup Validator: general schema.org syntax and vocabulary, including types Google ignores.
- Search Console → Enhancements (and the Merchant listings and Product snippets reports): per-type errors at scale. Markup breaks silently when templates change, so these reports are your alarm.
Next: JavaScript SEO, making sure all of this survives client-side rendering.