Dane strukturalne to gwiazdki ocen, rozwijane FAQ, breadcrumbsy i karty artykułów w wynikach — a przy okazji format, który silniki AI parsują najpewniej. W App Routerze renderuj JSON-LD jako tag script z komponentu serwerowego (typowany przez 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>
</>
);
}
Jakie typy wdrażać — według siły efektu:
Organization/Person— na całą witrynę, w głównym layoucie. Zasila panel wiedzy.BlogPosting/Article— każdy wpis.BreadcrumbList— zastępuje URL w wynikach czytelną ścieżką.FAQPage— dla stron z prawdziwymi pytaniami i odpowiedziami (te same chętnie cytują silniki AI).Product+Offer+AggregateRating— e-commerce; stąd biorą się gwiazdki.Service+LocalBusiness— agencje i firmy lokalne.
Waliduj przez Rich Results Test Google — walidator schema.org sprawdza składnię, ale tylko narzędzie Google powie, czy kwalifikujesz się do rich results.
Checklista:
- JSON-LD renderowany po stronie serwera (nigdy wstrzykiwany na kliencie po załadowaniu)
- Article/BlogPosting na wszystkich wpisach z prawdziwymi datami
- BreadcrumbList w całej witrynie
- Dane w znacznikach zgodne z widoczną stroną (rozbieżności grożą ręczną karą)