Skip to content

Module 04 · Technical SEO · Guide 5 of 9

Structured Data

Structured data in 2026: which schema.org rich results Google still shows, which were retired, and how to ship safe JSON-LD in Next.js.

By Updated 5 min readIntermediate

What you'll learn

  • Choose the right schema.org type for a page and write it as JSON-LD.
  • Tell which rich results Google still supports in October 2026 and which were retired.
  • Connect Organization, WebSite and page entities with an @graph and stable @id values.
  • Render JSON-LD in Next.js without opening an XSS hole.
  • Validate markup with the Rich Results Test, the Schema Markup Validator and Search Console.

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.

Article 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:

app/blog/[slug]/page.tsx (excerpt)
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:

TypeWhat it can earnUse on
Article / NewsArticle / BlogPostingBetter title, image and date understanding; Top Stories eligibilityEditorial content
Product + Offer (+ AggregateRating, Review)Product snippets (price, stock, stars) and merchant listingsProduct pages
MerchantReturnPolicy, ShippingService, MemberProgram (under Organization)Return, shipping and loyalty details next to productsStore-wide policies
BreadcrumbListBreadcrumb trail on desktop resultsEverything with a hierarchy
OrganizationLogo and knowledge panel detailsHome or about page
LocalBusinessBusiness details for local resultsLocation pages
VideoObjectVideo results, key moments, live badgePages where the video is the main content
JobPosting, Event, Recipe, SoftwareApplication, VacationRentalVertical-specific rich resultsMatching content only
ProfilePage, DiscussionForumPosting, QAPageProfile and forum treatmentsCreator profiles, forums, Q&A sites
Course (list)Course list carousel (at least three courses)Course catalogues
DatasetDataset Search only, not Google SearchData 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.category accepting text or a category code (July 2026) and sale-date guidance for validFrom, validThrough and priceValidUntil. Merchant-wide return policies belong under Organization. Details in E-commerce SEO.
  • VideoObject gained a creator property (alongside author) and documented interactionStatistic types 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:

FeatureStatus
FAQ (FAQPage)Limited to government and health sites in 2023, then stopped showing for everyone on 2026-05-07; docs removed 2026-06-15
HowToRemoved in 2023
Sitelinks search box (SearchAction)Removed globally on 2024-11-21
Breadcrumbs on mobileHidden on mobile results since 2025-01-23 (desktop keeps them; the markup and report remain)
Course info, Estimated salary, Learning video, Special announcement, Vehicle listingPhase-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 problemDeprecated 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#

  1. 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.
  2. 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:

Home page @graph
{
  "@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:

Article page (excerpt)
{
  "@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.

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.

Check your understanding

0 of 4 answered

  1. 1.A client asks you to add FAQPage markup to their help articles so the FAQ dropdowns appear under their listing. What do you tell them in October 2026?
  2. 2.Why does Next.js recommend JSON.stringify(jsonLd).replace(/</g, "\\u003c") instead of plain JSON.stringify inside dangerouslySetInnerHTML?
  3. 3.A marketer wants Product schema added to every page "so ChatGPT and AI Overviews cite us". What is the accurate response?
  4. 4.You define your Organization once on the home page with "@id": "https://example.com/#org". How should every Article reference it as publisher?

Sources

Primary documentation this guide was checked against, last reviewed 5 October 2026.

  1. Structured data markup that Google Search supports (search gallery) · Google Search Central
  2. General structured data guidelines · Google Search Central
  3. Latest Google Search documentation updates (FAQ, practice problem, VideoObject entries) · Google Search Central
  4. Simplifying the search results page · Google Search Central Blog
  5. Simplifying breadcrumbs in mobile search results · Google Search Central Blog
  6. AI features and your website · Google Search Central
  7. How to implement JSON-LD in your Next.js application · Next.js

Spotted something wrong or outdated? Report itHow we review

Finished reading?

Mark it complete to track your progress. Saved in this browser, no account needed.