A Practical Guide to JSON-LD Structured Data for Blogs
Structured data tells search engines and AI exactly what your content means. This guide covers the JSON-LD schemas every blog should ship: Article, BreadcrumbList, Organization, and FAQPage.
On this page
Structured data is a small block of JSON that translates your page into the vocabulary search engines and AI models already understand: schema.org. Adding it doesn’t change how your page looks — it changes how machines interpret it, which drives rich results and AI citations.
Why JSON-LD (and not microdata)
Google recommends JSON-LD: a single <script type="application/ld+json"> block,
kept separate from your HTML. It’s easier to generate, template, and maintain than
inline microdata, and it’s what every major engine prefers.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "A Practical Guide to JSON-LD Structured Data",
"datePublished": "2026-06-11",
"author": { "@type": "Person", "name": "Yacine El Attaoui" }
}
</script>
The four schemas every blog should ship
1. Article / BlogPosting
The core of any post. Include headline, description, image, datePublished,
dateModified, author, and publisher. This makes you eligible for article rich
results and gives AI engines clean metadata to attribute.
2. BreadcrumbList
Describes where a page sits in your hierarchy (Home → Blog → Post). It produces the breadcrumb trail in search results and helps engines understand site structure.
3. Organization (and WebSite)
Defines your brand once, site-wide: name, logo, URL, and social profiles. Over time this feeds the knowledge graph and links your content to a recognized entity.
4. FAQPage
Marks up question-and-answer sections. It’s one of the highest-leverage schemas for GEO because AI answer engines frequently mine well-formed Q&A pairs when composing responses. Treat it as machine-readable support for visible answers, not a guarantee of extra search-result space.
Connect your entities with @id
The real power comes from linking schemas together with @id. Define your
Organization once with "@id": "https://example.com/#organization", then
reference it from each article’s publisher field:
"publisher": { "@id": "https://example.com/#organization" }
This tells engines that every post belongs to the same publisher entity — a stronger signal than repeating the details on every page.
How to validate
Before you ship, test every template:
- Google Rich Results Test — confirms eligibility for rich results.
- Schema.org Validator — catches syntax and vocabulary errors.
- Search Console → Enhancements — monitors valid items and errors at scale over time.
Common mistakes to avoid
- Marking up content that isn’t visible on the page — a guideline violation.
- Mismatched dates between your schema and the rendered page.
- Invalid image URLs (use absolute URLs, not relative paths).
- Over-stuffing FAQ schema with promotional content instead of genuine answers.
Ship these four schemas, wire them together with @id, validate them, and your blog
speaks the language search engines and AI models read fluently — the foundation of
both SEO and GEO.