Gestructureerde data kan zoeksystemen helpen om geschikte pagina's te interpreteren en elementen te ondersteunen zoals sterrenbeoordelingen, breadcrumbs of artikelkaarten. Ze geven ook AI-systemen machineleesbare context, maar garanderen geen vermelding. Render JSON-LD in de App Router als script-tag vanuit een servercomponent (getypeerd met schema-dts):
import type { WithContext, BlogPosting } from "schema-dts";
export default async function PostPage({ params }) {
const post = await getPost(params.slug);
const jsonLd: WithContext<BlogPosting> = {
"@context": "https://schema.org",
"@type": "BlogPosting",
headline: post.title,
description: post.excerpt,
datePublished: post.publishedAt,
dateModified: post.updatedAt,
author: {
"@type": "Person",
name: "Vlad Sedenko",
url: "https://example.com/about",
},
image: post.ogImage,
};
return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
/>
<article>{/* ... */}</article>
</>
);
}
Veelvoorkomende typen om te overwegen, afhankelijk van de pagina:
Organization/Person: voor de hele site, in de root-layout. Voedt het kennispaneel.BlogPosting/Article: elk bericht.BreadcrumbList: vervangt de URL in de resultaten door een leesbaar pad.FAQPage: voor pagina's met echte vragen en antwoorden.Product+Offer+AggregateRating: e-commerce; hier komen de sterren vandaan.Service+LocalBusiness: bureaus en lokale bedrijven.
Valideer met de Rich Results Test van Google. De schema.org-validator controleert de syntaxis, maar alleen de tool van Google zegt of je in aanmerking komt voor rich results.
Checklist:
- JSON-LD aan de serverzijde gerenderd (nooit na het laden op de client geïnjecteerd)
- Article/BlogPosting op alle berichten met echte datums
- BreadcrumbList op de hele site
- Data in de markup komt overeen met de zichtbare pagina (afwijkingen riskeren een handmatige maatregel)
