Structured data (JSON-LD)
Structured data is a block of JSON in the page that tells search and AI engines what the page is: a post, by this author, from this publisher. The hosted blog adds it for you. On your own site you add it from the post's fields.
What the hosted blog adds
| Page | Types |
|---|---|
| Front page | Blog, ItemList of the posts, Organization |
| Category page | CollectionPage, BreadcrumbList |
| Post | BlogPosting (or the article type you chose), Person for the author, Organization for the publisher, ImageObject, BreadcrumbList, FAQPage when the post has questions |
Every address in it is the address the page is indexed at, so the structured data never disagrees with the canonical link.
The publisher
The Organization comes from Website settings → SEO profile: name, website, logo and your profiles elsewhere (LinkedIn, GitHub, X). Fill it in once; it is used on every post.
On your own site
Build the JSON from the post you already fetched:
app/blog/[slug]/page.tsx
const jsonLd = {
'@context': 'https://schema.org',
'@type': post.seo.schema ?? 'BlogPosting',
headline: post.seo.title || post.title,
description: post.seo.description || post.excerpt,
datePublished: post.publishedAt,
dateModified: post.updatedAt,
author: { '@type': 'Person', name: post.author.name },
image: post.featuredMedia?.url,
}
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }} />Check the result with Google's Rich Results Test.







