Article schema: markup for blog posts and news

·4 min read

Article schema is a JSON-LD block that tells search engines a page's headline, images, publish and update dates, and authors. Use BlogPosting for blog posts, NewsArticle for news, and plain Article for everything else. Google requires no property, but it recommends headline, image, datePublished, dateModified and author, and fills in better titles, images and dates in results when you give them.

What article structured data does

Article structured data helps Google show the right title text, image and date for a page in Search, Google News and Google Assistant. That is the whole claim in Google's Article markup guide. Google also says the markup is not required to appear in Top Stories.

Treat it as labeling. You tell Google which date is the publish date, which image is the hero and who wrote the piece. If you are new to the format, start with what JSON-LD is and the schema markup guide, then come back.

Article vs BlogPosting vs NewsArticle schema

All three types work the same way in Google's eyes. The guide lists them together and gives them the same recommended properties. BlogPosting and NewsArticle are both subtypes of Article on schema.org, so picking the narrower one costs nothing and is more accurate.

Type Use it for Example
BlogPosting Posts in a blog, opinion pieces, tutorials A how-to on your company blog
NewsArticle Reporting on current events by a news publisher A story on a local news site
Article Long-form content that is neither A documentation page, a guide, a white paper

If the URL lives under /blog, use BlogPosting. Reserve NewsArticle for actual journalism. Marking a product announcement as news only misdescribes the page.

Which properties Google recommends

Google lists no required properties. These are the recommended ones, with the details its guide adds.

Property What to put there
headline The article title. Keep it short, because long titles may be cut off on some devices
image Several high-resolution images of at least 50,000 pixels (width times height), in 16x9, 4x3 and 1x1 aspect ratios. Crawlable, indexable URLs. Not your logo
datePublished ISO 8601 date and time with a time zone
dateModified Same format, the last real update
author A Person or Organization with name and url

The time zone matters more than it looks. Without one, Google assumes the time zone Googlebot uses, so a post published late in the evening in Sydney can show yesterday's date. Write 2026-10-10T08:00:00+10:00, not 2026-10-10.

For images, one well-cropped photo exported in three ratios is enough. A 1200x675 version covers 16x9, 1200x900 covers 4x3, and 1200x1200 covers 1x1.

Author markup best practices

Google's guide spends more words on authors than on any other property. Its rules come down to five habits.

  1. Mark up every author shown on the page.
  2. Give each author a separate entry in an array. Never put "Jane Doe and Sam Lee" in one name.
  3. Set @type to Person or Organization and add a url or sameAs that points to a page about that author, such as a bio page or a profile.
  4. Put only the name in name. Job titles go in jobTitle, the company goes in publisher, and "Dr." goes in honorificPrefix. Drop phrases like "Written by".
  5. Use Organization only when a company is genuinely the author, such as an unsigned staff post.

The url is the part people skip. A name alone is ambiguous, and a link to a bio page gives Google something to match. If you want to see how your bylines and author pages hold up, the author and E-E-A-T checker reviews them on a page.

Article schema JSON-LD example

This is a complete BlogPosting block with two authors. Put it in a <script type="application/ld+json"> tag in the page's HTML. The steps for each CMS are in how to add schema markup.

{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "How we cut our page weight in half",
  "image": [
    "https://example.com/img/page-weight-16x9.jpg",
    "https://example.com/img/page-weight-4x3.jpg",
    "https://example.com/img/page-weight-1x1.jpg"
  ],
  "datePublished": "2026-10-10T08:00:00+01:00",
  "dateModified": "2026-10-10T08:00:00+01:00",
  "author": [
    {
      "@type": "Person",
      "name": "Jane Doe",
      "url": "https://example.com/authors/jane-doe"
    },
    {
      "@type": "Person",
      "name": "Sam Lee",
      "url": "https://example.com/authors/sam-lee"
    }
  ],
  "publisher": {
    "@type": "Organization",
    "name": "Example Co",
    "logo": {
      "@type": "ImageObject",
      "url": "https://example.com/logo.png"
    }
  }
}

publisher is not on Google's recommended list, but it is valid schema.org and a good home for your logo, since the guide tells you to keep logos out of image.

Common article schema mistakes

Most broken Article markup comes from templates that fill fields automatically.

Every author in one string. "author": "Jane Doe, Sam Lee" reads as one person with a strange name. Use an array of Person objects.

dateModified bumped on every deploy. Some themes set dateModified to the build time, so every post looks updated today. Google's guidance on byline dates asks that the markup date match the date readers see on the page. Change dateModified when you change the content in a way a reader would notice, and show the same date in the byline.

The logo as the article image. Google says not to. Use a photo or illustration from the post.

Markup that disagrees with the page. A headline in the JSON-LD that differs from the H1, or an author who appears nowhere on the page, makes the markup look unreliable. Keep both from the same source fields.

After you publish, run the page through Google's tool as described in the Rich Results Test guide. It will confirm Google can parse the block.

Generate Article JSON-LD for your posts

The Schema Markup Generator builds Article, BlogPosting or NewsArticle JSON-LD from your headline, URL, description, image, author, publisher, logo and dates. It puts the logo on the publisher, where it belongs, and checks the result against the same validator rules as our Schema Markup Checker. A run costs 3 credits, and nothing is fetched.

The generator writes one author as a Person with a name. For a second author or an author url, add them to the output by hand following the example above.

Keep reading