Schema.org for a Blog · Unhead

[Unhead Home](https://unhead.unjs.io/ "Home")

- [Docs](https://unhead.unjs.io/docs/typescript/head/guides/get-started/overview)
- [Tools](https://unhead.unjs.io/tools)
- [Learn](https://unhead.unjs.io/learn/guides/what-is-capo)

[Releases](https://unhead.unjs.io/releases)

Search…```k`` /`

[Unhead on GitHub](https://github.com/unjs/unhead)

[User Guides](https://unhead.unjs.io/docs/typescript/head/guides/get-started/overview)

[API](https://unhead.unjs.io/docs/typescript/head/api/get-started/overview)

[Releases](https://unhead.unjs.io/docs/typescript/releases/v3)

TypeScript

- [Switch to TypeScript](https://unhead.unjs.io/docs/typescript/schema-org/guides/recipes/blog)
- [Switch to Vue](https://unhead.unjs.io/docs/vue/schema-org/guides/recipes/blog)
- [Switch to React](https://unhead.unjs.io/docs/react/schema-org/guides/recipes/blog)
- [Switch to Svelte](https://unhead.unjs.io/docs/svelte/schema-org/guides/recipes/blog)
- [Switch to Solid.js](https://unhead.unjs.io/docs/solid-js/schema-org/guides/recipes/blog)
- [Switch to Angular](https://unhead.unjs.io/docs/angular/schema-org/guides/recipes/blog)
- [Switch to Nuxt](https://unhead.unjs.io/docs/nuxt/schema-org/guides/recipes/blog)

v3 (stable)

Schema.org

- [Discord Support](https://discord.com/invite/275MBUBvgP)
- [TypeScript Playground](https://stackblitz.com/edit/github-hhxywsb5)

- Get Started
  - [Introduction](https://unhead.unjs.io/docs/typescript/schema-org/guides/get-started/overview)
- Core Concepts
  - [Deduping Nodes](https://unhead.unjs.io/docs/typescript/schema-org/guides/core-concepts/deduping-nodes)
  - [Supported Nodes](https://unhead.unjs.io/docs/typescript/schema-org/guides/core-concepts/nodes)
  - [Schema.org Params](https://unhead.unjs.io/docs/typescript/schema-org/guides/core-concepts/params)
- Recipes
  - [Custom Nodes](https://unhead.unjs.io/docs/typescript/schema-org/guides/recipes/custom-nodes)
  - [Identity](https://unhead.unjs.io/docs/typescript/schema-org/guides/recipes/identity)
  - [Blog](https://unhead.unjs.io/docs/typescript/schema-org/guides/recipes/blog)
  - [Breadcrumbs](https://unhead.unjs.io/docs/typescript/schema-org/guides/recipes/breadcrumbs)
  - [eCommerce](https://unhead.unjs.io/docs/typescript/schema-org/guides/recipes/e-commerce)
  - [FAQ](https://unhead.unjs.io/docs/typescript/schema-org/guides/recipes/faq)
  - [How To](https://unhead.unjs.io/docs/typescript/schema-org/guides/recipes/how-to)
  - [Site Search](https://unhead.unjs.io/docs/typescript/schema-org/guides/recipes/site-search)

Recipes

# Schema.org for a Blog

[Copy for LLMs](https://raw.githubusercontent.com/unjs/unhead/refs/heads/main/docs/schema-org/2.guides/4.recipes/blog.md)

Last updated Apr 5, 2026 by [Harlan Wilton](https://github.com/harlan-zw) in [docs: documentation content audit and formatting improvements (#718)](https://github.com/unjs/unhead/pull/718).

On this page

- [Useful Links](#useful-links)
- [How do I mark up a blog article?](#how-do-i-mark-up-a-blog-article)
- [How do I specify the article type?](#how-do-i-specify-the-article-type)
- [How do I add an author?](#how-do-i-add-an-author)
- [How do I mark up blog archive pages?](#how-do-i-mark-up-blog-archive-pages)
- [Expected JSON-LD Output](#expected-json-ld-output)
- [Common Issues](#common-issues)
- [Related Recipes](#related-recipes)

Use `defineArticle()` with `@type: 'BlogPosting'` to mark up blog posts. This enables rich snippets showing author, publish date, and article images in search results.

Schema.org Article markup helps Google display enhanced search results with author info, thumbnails, and publication dates - improving click-through rates.

## [Useful Links](#useful-links)

- [Article | Google Search Central](https://developers.google.com/search/docs/advanced/structured-data/article)
- [Article Schema | Yoast](https://developer.yoast.com/features/schema/pieces/article)

## [How do I mark up a blog article?](#how-do-i-mark-up-a-blog-article)

The [defineArticle](https://unhead.unjs.io/docs/schema-org/api/schema/article) function is provided to create Article Schema whilst handling relations for you.

Note that some fields may already be inferred, see [Schema.org Params](https://unhead.unjs.io/docs/schema-org/guides/core-concepts/params)

```
import { defineArticle, useSchemaOrg } from '@unhead/schema-org/typescript'

useSchemaOrg([
  defineArticle({
    // name and description can usually be inferred
    image: '/photos/16x9/photo.jpg',
    datePublished: new Date(2020, 1, 1),
    dateModified: new Date(2020, 1, 1),
  })
])
```

## [How do I specify the article type?](#how-do-i-specify-the-article-type)

Providing a type of Article can help clarify what kind of content the page is about.

The most common types are: `BlogPosting` and `NewsArticle`.

```
import { defineArticle, useSchemaOrg } from '@unhead/schema-org/typescript'

useSchemaOrg([
  defineArticle({
    '@type': 'BlogPosting',
    // ...
  })
])
```

See the [Article Types](https://unhead.unjs.io/docs/schema-org/api/schema/article#sub-types) for the list of available types.

## [How do I add an author?](#how-do-i-add-an-author)

If the author of the article isn't the [site identity](https://unhead.unjs.io/docs/schema-org/guides/recipes/identity), then you'll need to config the author or authors.

When defining a Person when an Article is present, it will automatically associate them as the author.

```
import { defineArticle, useSchemaOrg } from '@unhead/schema-org/typescript'

useSchemaOrg([
  defineArticle({
    headline: 'My Article',
    author: [
      {
        name: 'John doe',
        url: 'https://johndoe.com',
      },
      {
        name: 'Jane doe',
        url: 'https://janedoe.com',
      },
    ]
  })
])
```

## [How do I mark up blog archive pages?](#how-do-i-mark-up-blog-archive-pages)

Assuming you have the `WebPage` and `WebSite` schema loaded in from a parent layout component, you can augment the `WebPage` type to better indicate the purpose of the page.

See [CollectionPage](https://schema.org/CollectionPage) for more information.

```
import { defineWebPage, useSchemaOrg } from '@unhead/schema-org/typescript'

useSchemaOrg([
  defineWebPage({
    '@type': 'CollectionPage'
  }),
])
```

## [Expected JSON-LD Output](#expected-json-ld-output)

The above code generates JSON-LD like this:

```
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "BlogPosting",
      "@id": "https://example.com/blog/my-post/#article",
      "headline": "My Article",
      "image": "https://example.com/photos/16x9/photo.jpg",
      "datePublished": "2020-02-01T00:00:00.000Z",
      "dateModified": "2020-02-01T00:00:00.000Z",
      "author": [
        { "@type": "Person", "name": "John doe", "url": "https://johndoe.com" }
      ],
      "mainEntityOfPage": { "@id": "https://example.com/blog/my-post/" }
    }
  ]
}
```

## [Common Issues](#common-issues)

### [Missing `image` warning](#missing-image-warning)

Google requires at least one image for Article rich results. Always provide `image`.

### [`datePublished` format errors](#datepublished-format-errors)

Use JavaScript `Date` objects—Unhead handles ISO 8601 conversion automatically.

### [Author not showing](#author-not-showing)

If using site identity as author, ensure you've called `defineOrganization()` or `definePerson()` in your layout.

## [Related Recipes](#related-recipes)

- [Setting Up Your Identity](https://unhead.unjs.io/docs/schema-org/guides/recipes/identity) - Define your organization/person
- [Breadcrumbs](https://unhead.unjs.io/docs/schema-org/guides/recipes/breadcrumbs) - Add navigation breadcrumbs
- [FAQ Page](https://unhead.unjs.io/docs/schema-org/guides/recipes/faq) - Add FAQ structured data

[Edit this page](https://github.com/unjs/unhead/edit/main/docs/schema-org/2.guides/4.recipes/blog.md)

[Markdown For LLMs](https://raw.githubusercontent.com/unjs/unhead/refs/heads/main/docs/schema-org/2.guides/4.recipes/blog.md)

Did this page help you?

[Identity Set up Organization, Person, or LocalBusiness as your site identity. Enable Google Knowledge Panel and connect content to E-E-A-T signals.](https://unhead.unjs.io/docs/schema-org/guides/recipes/identity) [Breadcrumbs Add BreadcrumbList structured data with defineBreadcrumb(). Display clickable navigation paths instead of URLs in Google search results.](https://unhead.unjs.io/docs/schema-org/guides/recipes/breadcrumbs)

On this page

- [Useful Links](#useful-links)
- [How do I mark up a blog article?](#how-do-i-mark-up-a-blog-article)
- [How do I specify the article type?](#how-do-i-specify-the-article-type)
- [How do I add an author?](#how-do-i-add-an-author)
- [How do I mark up blog archive pages?](#how-do-i-mark-up-blog-archive-pages)
- [Expected JSON-LD Output](#expected-json-ld-output)
- [Common Issues](#common-issues)
- [Related Recipes](#related-recipes)

[GitHub](https://github.com/unjs/unhead) [ Discord](https://discord.com/invite/275MBUBvgP)

[ /llms.txt](https://unhead.unjs.io/llms.txt)

[Part of the UnJS ecosystem](https://unjs.io/)

### Head Management

- [Getting Started](https://unhead.unjs.io/docs/typescript/head/guides/get-started/overview)
- [useHead](https://unhead.unjs.io/docs/typescript/head/api/composables/use-head)
- [useSeoMeta](https://unhead.unjs.io/docs/typescript/head/api/composables/use-seo-meta)
- [useHeadSafe](https://unhead.unjs.io/docs/typescript/head/api/composables/use-head-safe)
- [useScript](https://unhead.unjs.io/docs/typescript/head/api/composables/use-script)

### Schema.org

- [Getting Started](https://unhead.unjs.io/docs/typescript/schema-org/guides/get-started/overview)
- [useSchemaOrg](https://unhead.unjs.io/docs/typescript/schema-org/api/composables/use-schema-org)
- [Nodes](https://unhead.unjs.io/docs/typescript/schema-org/guides/core-concepts/nodes)
- [Recipes](https://unhead.unjs.io/docs/typescript/schema-org/guides/recipes/identity)

### Guides

- [Titles](https://unhead.unjs.io/docs/typescript/head/guides/core-concepts/titles)
- [Streaming SSR](https://unhead.unjs.io/docs/typescript/head/guides/core-concepts/streaming)
- [DOM Events](https://unhead.unjs.io/docs/typescript/head/guides/core-concepts/dom-event-handling)
- [Plugins](https://unhead.unjs.io/docs/typescript/head/guides/plugins/template-params)

### Tools

- [Meta Tag Generator](https://unhead.unjs.io/tools/meta-tag-generator)
- [OG Image Generator](https://unhead.unjs.io/tools/og-image-generator)
- [Schema.org Generator](https://unhead.unjs.io/tools/schema-generator)
- [Capo.js Analyzer](https://unhead.unjs.io/tools/capo-analyzer)

### Articles

- [What is Capo.js?](https://unhead.unjs.io/learn/guides/what-is-capo)

### Research

- [State of <head> in 2026](https://unhead.unjs.io/learn/research/state-of-head-2026)
- [Streaming Head Performance](https://unhead.unjs.io/learn/research/streaming-head-performance)
- [Capo.js Performance Research](https://unhead.unjs.io/learn/research/capo-performance-research)

Copyright © 2025-2026 Harlan Wilton - [MIT License](https://github.com/unjs/unhead/blob/main/license)