XooCode(){

BlogPosting Schema Generator

Fill out a form. Get valid BlogPosting JSON-LD.

A form-driven builder for schema.org BlogPosting markup with a live JSON-LD preview that updates as you type. Covers author attribution with @id cross-referencing, the image triple (1:1, 4:3, 16:9), three date fields, and an Essential/Full coverage toggle. Empty fields are omitted so the output stays valid at every keystroke. Everything runs in your browser: nothing is sent to XooCode.

BlogPosting form

Title of the blog posting. Google truncates at 110 characters. 52/110

Summary of the blog posting. Google truncates at ~160 chars in the SERP.

Images (three aspect ratios)

Google's Article rich result requires images in three aspect ratios: 1:1 (1200x1200), 4:3 (1200x900), and 16:9 (1200x675). All three are recommended for full rich result eligibility.

Square. Minimum 1200x1200px.

Landscape. Minimum 1200x900px.

Widescreen. Minimum 1200x675px.

Canonical URL of the article page.

When the article was first published.

When the article was last updated.

Emits as nested Person. In Full mode you can use @id instead.

Emits as nested Organization.

Live JSON-LD output

schema.org/BlogPosting
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "Why We Switched to Water-Based Ink for XooTee Prints",
  "description": "The story behind our switch from plastisol to water-based ink for all XooTee Classic screen prints, and what it means for print quality, feel, and wash longevity.",
  "image": [
    "https://xoocode.com/blog/images/water-ink-switch-1x1.jpg",
    "https://xoocode.com/blog/images/water-ink-switch-4x3.jpg",
    "https://xoocode.com/blog/images/water-ink-switch-16x9.jpg"
  ],
  "url": "https://xoocode.com/blog/water-based-ink-switch",
  "datePublished": "2025-11-20",
  "dateModified": "2026-01-05",
  "author": {
    "@type": "Person",
    "name": "Peter Valenta"
  },
  "publisher": {
    "@type": "Organization",
    "name": "XooCode Blog"
  }
}
</script>

Updates as you type. Empty fields are omitted from the output. Click the copy icon above to copy the full <script> tag ready for pasting into your HTML head.

How to use the generator

The tool is a two-pane split: a form on the left, a live JSON-LD preview on the right. Type into any field and the preview updates immediately. When you’re done, click the copy icon in the preview header and paste the <script> block into your page’s <head> tag. Four steps cover the full workflow.

  1. 1

    Start from the seed

    Click the Load example button above the form. It populates every field with Peter Valenta’s water-based ink blog post from the XooCode Blog. Use it to see what a fully populated output looks like, then clear and start over for your own blog post.
  2. 2

    Pick coverage mode

    The Coverage dropdown has two settings. Essential shows the core fields Google needs for Article rich results: headline, description, images, URL, dates, author, and publisher. Full adds alternativeHeadline, articleBody, wordCount, articleSection, keywords, inLanguage, mainEntityOfPage, paywall fields, and the author @id toggle.
  3. 3

    Fill in the image triple

    Google’s Article rich result requires images in three aspect ratios: 1:1 (square), 4:3 (landscape), and 16:9 (widescreen). The form has one URL field for each. If you only have one image, you can enter the same URL in all three fields. Google will accept it but the rendering quality drops when the aspect ratio does not match the slot.
  4. 4

    Copy the output

    The preview pane shows the full <script type="application/ld+json"> wrapper with syntax highlighting. Click the copy icon to grab it and paste into your page head. Test it with Google’s Rich Results Test before publishing.

Why BlogPosting instead of plain Article

BlogPosting and Article share every property. The only difference is the @type string. So why bother? Because Google treats them differently for author attribution and content discovery.

BlogPosting triggers the author knowledge panel card in search results when the author has a Google Knowledge Panel. It also feeds the Discover “Following” tab, where users subscribe to individual blog authors. Plain Article does not trigger these features. If your content is published on a blog with an individual author byline, BlogPosting is the correct choice even though the properties are identical to Article.

The distinction matters most for independent bloggers and multi-author company blogs where byline identity drives readership. For an unsigned corporate knowledge-base article or a reference page with no personal author, plain Article is the better fit because the author-attribution features have nothing to attach to.

Author attribution for blog posts

For blogs, the author field matters more than for any other Article subtype. Google uses the author name and @id to build author entity connections across the web.

In Full mode, the @id toggle lets you emit author: { "@id": "https://..." } instead of an inline Person object. This cross-references an author entity defined on your about page or a Person JSON-LD block elsewhere on the site. That cross-reference is how Google builds the author knowledge panel: it connects the blog post to a known entity with a verified identity.

The @id must match exactly across every page that references the same author entity. Case matters. Trailing slashes matter. A mismatch like https://example.com/about/jane vs https://example.com/about/jane/ creates two separate entities in Google’s graph, and neither accumulates enough signal to trigger the knowledge panel card.

Dates for blog content

The generator exposes three date fields, each serving a distinct purpose for blog content.

datePublished is required. Google uses it for the “Published:” label in the SERP snippet and for recency ranking signals. Leave this out and your Article rich result will not render.

dateModified is important for evergreen content you update over time. Google shows “Updated:” in the SERP when dateModified differs meaningfully from datePublished. For a blog post you refresh with new information every quarter, keeping dateModified current tells Google the content is maintained, not stale.

dateCreated (Full mode only) records the draft date. This is rarely useful for blog posts because the publication date is what readers and search engines care about. Include it if your CMS tracks draft creation separately and you want the structured data to reflect that.

What this generator is and isn’t

The BlogPosting Schema Generator is a tightly scoped tool. Knowing what it doesn’t try to do saves you time hunting for features that were never supposed to exist.

It IS a BlogPosting builder

Full BlogPosting vocabulary: headline, image triple, three dates, author with @id support, publisher, and every Full-mode property inherited from Article.

It is NOT a NewsArticle builder

For breaking news with a dateline, use the NewsArticle Generator. BlogPosting does not include dateline or print metadata fields.

It IS author-attribution aware

Full mode exposes the @id toggle so you can cross-reference an author entity defined elsewhere on your site, which is the mechanism behind Google's author knowledge panel.

It is NOT a Knowledge Panel tool

The generator outputs structured data that feeds the author knowledge panel, but it does not create or manage the panel itself. That happens on Google's side based on accumulated entity signals.

It IS Essential/Full aware

Essential mode covers the core fields Google requires. Full mode expands to every semantically useful Article property: articleBody, wordCount, keywords, inLanguage, paywall, and more.

It is NOT a Rich Results Test

Run the JSON-LD through Google's Rich Results Test afterwards to catch value-level mistakes the form cannot see (broken image URLs, mismatched author @ids, etc).

Authoritative sources behind BlogPosting

The generator’s behaviour is sourced from primary documentation. These are the references to consult when you need to verify anything the tool produces.

  • schema.org/BlogPosting – the canonical vocabulary definition. BlogPosting inherits everything from SocialMediaPosting and Article above that, with no additional properties of its own.
  • Google Article structured data documentation – the required and recommended property lists that apply to all Article subtypes, including BlogPosting. This is the source for the Essential-mode field set.
  • Google author structured data – Google’s guide to author markup, including the @id cross-referencing pattern the Full-mode toggle implements.
  • Google Rich Results Test – run your generator output through this to catch value-level issues before publishing. Free and immediate.