How to Generate schema.org JSON-LD for Blog Posts Using OpDeck Tool
If you need to generate schema.org JSON-LD for a blog post, you've come to the right place. Structured data markup is one of those technical SEO tasks that looks intimidating on the surface but pays off significantly in search visibility — and with the right tools, it takes minutes rather than hours. This guide walks you through exactly what JSON-LD structured data is, why blog posts specifically benefit from it, and how to generate production-ready markup you can drop directly into your site.
What Is Schema.org JSON-LD and Why Does It Matter for Blog Posts?
Schema.org is a collaborative vocabulary maintained by Google, Bing, Yahoo, and Yandex. It gives search engines a standardized way to understand the content on your page — not just read it, but interpret it. JSON-LD (JavaScript Object Notation for Linked Data) is the format Google recommends for delivering that structured data.
For blog posts specifically, schema markup communicates critical information to search engines:
- Who wrote the article (author name, credentials)
- When it was published and last updated
- What the article is about (headline, description, keywords)
- The publisher's identity (organization name, logo)
- Featured images associated with the content
When search engines can confidently parse this data, your blog post becomes eligible for rich results — enhanced search listings that can include author bylines, publication dates, breadcrumbs, and more. These rich results typically command higher click-through rates than standard blue-link listings.
Beyond rich results, structured data contributes to your overall E-E-A-T signals (Experience, Expertise, Authoritativeness, Trustworthiness), which Google uses as quality indicators. Explicitly declaring an author, linking to their profile, and associating your content with a verified publisher all reinforce these signals.
The Anatomy of a Blog Post JSON-LD Schema
Before you generate anything, it helps to understand what fields make up a complete blog post schema. The primary schema type you'll use is BlogPosting, which extends Article in the schema.org hierarchy.
Required and Strongly Recommended Fields
Here's a breakdown of the most important properties:
| Property | Type | Description |
|---|---|---|
@type |
Text | Should be BlogPosting |
headline |
Text | Article title (max 110 characters) |
author |
Person | Author name and URL |
datePublished |
DateTime | ISO 8601 format |
dateModified |
DateTime | ISO 8601 format |
image |
ImageObject | Featured image URL, width, height |
publisher |
Organization | Publisher name and logo |
description |
Text | Brief article summary |
url |
URL | Canonical URL of the post |
mainEntityOfPage |
WebPage | References the page itself |
A Complete JSON-LD Example for a Blog Post
Here's what a fully formed BlogPosting schema looks like:
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "How to Bake Sourdough Bread at Home",
"description": "A step-by-step guide to baking your first sourdough loaf, from starter culture to finished crust.",
"image": {
"@type": "ImageObject",
"url": "https://example.com/images/sourdough-bread.jpg",
"width": 1200,
"height": 630
},
"author": {
"@type": "Person",
"name": "Jane Doe",
"url": "https://example.com/authors/jane-doe"
},
"publisher": {
"@type": "Organization",
"name": "Example Blog",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png",
"width": 600,
"height": 60
}
},
"datePublished": "2024-01-15T08:00:00+00:00",
"dateModified": "2024-03-10T14:30:00+00:00",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://example.com/blog/sourdough-bread"
},
"url": "https://example.com/blog/sourdough-bread",
"keywords": "sourdough, bread baking, homemade bread, starter culture"
}
Writing this by hand for every blog post is tedious and error-prone. One misplaced bracket or incorrectly formatted date string can invalidate the entire schema. That's exactly the problem a dedicated generator solves.
How to Generate Schema.org JSON-LD for a Blog Post Using OpDeck
The JSON-LD Structured Data Generator on OpDeck is purpose-built for this task. It gives you a structured form interface where you fill in your blog post details and receive clean, validated JSON-LD output you can immediately embed in your page. Here's how to use it step by step.
Step 1: Open the JSON-LD Generator
Navigate to the JSON-LD Structured Data Generator on OpDeck. No account or login is required — you can start generating immediately.
Step 2: Select the Schema Type
The generator supports multiple schema types. For blog content, select BlogPosting from the schema type dropdown. This ensures the output includes all the fields relevant to article-style content rather than, say, a product or event listing.
Step 3: Fill In Your Article Details
Work through the form fields systematically:
Headline Enter your blog post's exact title. Keep it under 110 characters — Google truncates headlines beyond this limit in rich results. Avoid keyword stuffing here; use your actual article title.
Description Write a concise summary of the post (150–300 characters works well). This often maps to your meta description, but it doesn't have to be identical. Focus on what the reader will learn or gain.
URL Enter the canonical URL of your blog post. If you use canonical tags, this should match them exactly, including the trailing slash (or lack thereof).
Author Information Enter the author's full name. If the author has a profile page on your site or a public profile on a platform like LinkedIn, add that URL in the author URL field. This strengthens the author entity signal for E-E-A-T purposes.
Publisher Details Enter your blog or organization name and the URL to your logo image. The logo should be rectangular and no more than 600px wide by 60px tall for Google's guidelines, though technically any image URL works.
Dates
Enter the original publication date and the most recent modification date. The generator handles ISO 8601 formatting automatically — you just pick from a date/time picker rather than manually typing 2024-01-15T08:00:00+00:00.
Featured Image Provide the full URL of your post's featured image along with its dimensions. Google recommends images at least 1200px wide for rich results. If you don't know the exact dimensions, use your browser's developer tools to inspect the image element or check your CMS media library.
Keywords Add a comma-separated list of your primary keywords and topic tags. These don't directly influence ranking but help search engines with topical categorization.
Step 4: Generate and Copy the Output
Once all fields are filled, click Generate. The tool produces clean, properly formatted JSON-LD that you can copy with a single click.
Where to Place the JSON-LD in Your Blog Post
Once you have the generated markup, you need to add it to your page. JSON-LD goes inside a <script> tag with the type attribute set to application/ld+json. It can technically go anywhere in the <head> or <body>, but best practice is to place it in the <head> section.
<head>
<meta charset="UTF-8">
<title>How to Bake Sourdough Bread at Home</title>
<!-- Other meta tags -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "How to Bake Sourdough Bread at Home",
...
}
</script>
</head>
Adding JSON-LD in WordPress
If you're running WordPress without a dedicated SEO plugin, you can add the script directly to your theme's single.php template using wp_head(), or use a plugin like Insert Headers and Footers to paste it in without touching code.
If you're using Yoast SEO, Rank Math, or All in One SEO, those plugins generate their own schema markup automatically. In that case, review what they're generating — you may want to supplement it with more specific BlogPosting fields rather than replace it entirely.
Adding JSON-LD in Other CMS Platforms
Ghost: Use the Code Injection feature under Settings → Code Injection to add the script to the <head> section globally or per-post using post-level code injection.
Webflow: Use the Custom Code section in page settings to add scripts to the <head>.
Squarespace: Navigate to Pages → Page Settings → Advanced → Page Header Code Injection.
Static site generators (Next.js, Gatsby, Hugo): Add the script tag directly in your post template or use a Head component. In Next.js, for example:
import Head from 'next/head';
export default function BlogPost({ post }) {
const schema = {
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": post.title,
"datePublished": post.publishedAt,
// ... other fields
};
return (
<>
<Head>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
/>
</Head>
{/* Post content */}
</>
);
}
Validating Your Blog Post Schema Markup
Generating the markup is step one. Validating it is step two — and it's non-negotiable before you push to production.
Google's Rich Results Test
Go to Google's Rich Results Test and paste either your page URL (if it's already live) or the raw JSON-LD code. Google will tell you:
- Whether the markup is valid
- Which rich result types your page is eligible for
- Any errors or warnings that need addressing
Common errors to watch for:
datePublishednot in ISO 8601 formatimageURL returning a 404headlineexceeding 110 characters- Missing required fields for specific rich result types
Schema.org Validator
The Schema.org Validator (formerly the Structured Data Testing Tool) checks your markup against the schema.org specification rather than Google's specific implementation. Use both validators — they catch different issues.
Browser Developer Tools
For a quick sanity check, open Chrome DevTools, go to the Elements tab, and search for application/ld+json. You can view the raw script content and verify it matches what you intended to output.
Advanced JSON-LD Patterns for Blog Posts
Once you have the basics down, there are several ways to extend your blog post schema for additional SEO value.
Adding BreadcrumbList
Pairing your BlogPosting schema with a BreadcrumbList schema helps Google understand your site structure and can trigger breadcrumb display in search results:
{
"@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": "How to Bake Sourdough Bread at Home",
"item": "https://example.com/blog/sourdough-bread"
}
]
}
You can include multiple schema objects on the same page by wrapping them in an array:
<script type="application/ld+json">
[
{ /* BlogPosting schema */ },
{ /* BreadcrumbList schema */ }
]
</script>
Linking Author to a Person Entity
If your blog has a dedicated author page, linking the author in your schema to a sameAs property pointing to their social profiles strengthens the entity signal:
"author": {
"@type": "Person",
"name": "Jane Doe",
"url": "https://example.com/authors/jane-doe",
"sameAs": [
"https://twitter.com/janedoe",
"https://linkedin.com/in/janedoe",
"https://en.wikipedia.org/wiki/Jane_Doe"
]
}
FAQ Schema for How-To Blog Posts
If your blog post answers a series of questions, you can add FAQPage schema alongside your BlogPosting schema. This can trigger FAQ rich results directly in the SERP, significantly expanding your search listing's real estate.
Common Mistakes When Adding Blog Post Schema
Using Article instead of BlogPosting: While Article is technically a parent type and works, BlogPosting is more semantically precise for blog content and signals clearly to search engines what type of content they're dealing with.
Mismatched dates: Your datePublished should reflect the actual first publication date. Don't update it when you refresh the content — that's what dateModified is for. Changing datePublished can confuse Google's freshness signals.
Generic publisher logos: Some sites use a favicon (16x16px) as the publisher logo. Google requires a logo that renders well at the dimensions used in rich results. Use a proper horizontal logo image.
Omitting mainEntityOfPage: This field explicitly connects your schema to the page it lives on, which helps Google associate the markup with the correct URL, especially if your content is syndicated.
Forgetting to update schema when content changes: If you update a blog post significantly, update dateModified in your schema. Stale modification dates can suppress freshness signals for evergreen content you've recently updated.
Conclusion
Generating schema.org JSON-LD for a blog post is one of the highest-ROI technical SEO tasks you can complete in under five minutes. Structured data directly influences your eligibility for rich results, reinforces author and publisher credibility, and gives search engines the context they need to confidently surface your content.
The process breaks down cleanly: understand the BlogPosting schema structure, use a generator to create accurate markup without manual errors, embed it in your page's <head>, and validate it before going live.
The JSON-LD Structured Data Generator on OpDeck handles the generation step with a clean form interface that outputs validated, production-ready markup — no JSON expertise required. Head over to OpDeck, fill in your blog post details, and have your structured data live before your next cup of coffee is finished.