Structured Data & JSON-LD: The Complete SEO Guide
How to implement JSON-LD structured data to earn rich results in Google Search, improve click-through rates, and send clear semantic signals to search engines.
Structured data is metadata you add to your HTML that helps search engines understand what your content is, not just what it says. Google uses it to generate rich results — star ratings, FAQs, breadcrumbs, sitelinks, and more — that command dramatically higher click-through rates.
Why JSON-LD Over Microdata?
Google recommends JSON-LD. It lives in a <script> tag rather than being scattered through your HTML, which means:
- Easier to maintain without touching markup
- Can be injected or modified by JavaScript
- Doesn’t interfere with the visual HTML structure
- Works with dynamic/SPA content via script injection
Essential Schema Types for Blogs
Article / BlogPosting
Every blog post should declare itself as a BlogPosting (a subtype of Article):
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "Your Post Title",
"description": "150-character description of the post",
"image": "https://example.com/images/post-cover.jpg",
"datePublished": "2024-05-20T00:00:00Z",
"dateModified": "2024-06-01T00:00:00Z",
"author": {
"@type": "Person",
"name": "Author Name",
"url": "https://example.com/about"
},
"publisher": {
"@type": "Organization",
"name": "Your Blog Name",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png"
}
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://example.com/blog/your-post-slug"
}
}
BreadcrumbList
Breadcrumbs appear in search results and reduce bounce rate by showing users where they are:
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://example.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "Blog",
"item": "https://example.com/blog"
},
{
"@type": "ListItem",
"position": 3,
"name": "Your Post Title",
"item": "https://example.com/blog/your-post-slug"
}
]
}
WebSite with Sitelinks Searchbox
Declare your site entity on the homepage to enable the sitelinks searchbox in branded queries:
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "Your Blog Name",
"url": "https://example.com",
"potentialAction": {
"@type": "SearchAction",
"target": {
"@type": "EntryPoint",
"urlTemplate": "https://example.com/search?q={search_term_string}"
},
"query-input": "required name=search_term_string"
}
}
Validating Your Structured Data
Always validate before deploying:
- Google’s Rich Results Test —
search.google.com/test/rich-results - Schema.org Validator —
validator.schema.org - Search Console — Enhancements tab shows errors on live pages
Common Mistakes That Kill Rich Results
- Missing required properties — Google will not show rich results if required fields are absent
- Marking up content that isn’t visible — The schema must match what users see
- Using the wrong
@type—ArticlevsBlogPostingvsNewsArticleeach have specific eligibility criteria - Invalid date formats — Always use ISO 8601:
2024-05-20T00:00:00+00:00 - Image dimensions — Google requires at least 1200px wide for article images
Structured data is one of the highest-leverage SEO investments: one afternoon of implementation can yield persistent SERP feature eligibility that compound over time.