Back to Blog
Article

LiveBlogPosting Schema: Booster for Top Stories Success

LiveBlogPosting Schema: Booster for Top Stories Success

How often Google is showing the "Live" badge/pill on Top Stories?

During the Paris Olympics 2024, our data shows that the distribution between the badges is as follows:

  • LiveBlog badge/pill is dominating with 66.6%
  • Video badges, which are not that popular reached 29.1% of all badges

Overall, Google is showing the LiveBlog badge on only 3.5% of the results in Google Top Stories.

LiveBlogPosting Schema Markup

<!DOCTYPE html>
<html>
<head>
<title>A Non-AMP Live Blog</title>
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LiveBlogPosting",
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://example.com/live_blog/"
  },
  "url": "https://example.com/live_blog/",
  "datePublished": "2024-08-09T11:30:00-07:00",
  "dateModified": "2024-08-09T16:00:00-07:00",
  "coverageStartTime": "2024-08-09T11:30:00-07:00",
  "coverageEndTime": "2024-08-09T16:00:00-07:00",
  "about": {
    "@type": "Event",
    "startDate": "2024-08-09T13:00:00-07:00",
    "name": "A Non-AMP Live Blog",
    "location": {
      "@type": "EventVenue",
      "name": "John Doe",
      "address": {
        "@type": "PostalAddress",
        "streetAddress": "123 Main St",
        "addressLocality": "Los Angeles",
        "addressRegion": "CA",
        "postalCode": "90001",
        "addressCountry": "US"
      }
    }
  },
  "publisher": {
    "@type": "Organization",
    "name": "Example Publisher",
    "logo": {
      "@type": "ImageObject",
      "url": "https://example.com/logo.png",
      "height": "60",
      "width": "600"
    }
  },
  "author": {
    "@type": "Person",
    "name": "John Doe"
  },
  "headline": "A Non-AMP Live Blog",
  "description": "A Live Blog implementation without AMP",
  "image": {
    "@type": "ImageObject",
    "url": "https://example.com/image.png",
    "height": "1532",
    "width": "2046"
  },
  "keywords": "Live Coverage, LiveBlogPosting",
  "liveBlogUpdate": [
    {
      "@type": "BlogPosting",
      "headline": "City Skyline",
      "url": "https://example.com/live_blog/#post1",
      "datePublished": "2024-08-09T11:30:00-07:00",
      "articleBody": "A beautiful city skyline at sunset."
    },
    {
      "@type": "BlogPosting",
      "headline": "Ocean View",
      "url": "https://example.com/live_blog/#post2",
      "datePublished": "2024-08-09T16:00:00-07:00",
      "articleBody": "A serene view of the ocean waves."
    }
  ]
}
</script>
</head>
<body>
</body>
</html>

You can also use Microdata to mark up your live blog instead of JSON-LD. In this case, text-only live blog posts will be displayed alongside the main image of the entire live blog.

Guidelines for Using LiveBlogPosting Markup

A LiveBlogPosting includes multiple liveBlogUpdates, each of type BlogPosting, representing individual time-stamped updates to the live blog. Every BlogPosting should have an articleBody specified and can also include an image or video.

LiveBlogPosting properties

PropertyTypeDescription
aboutSportsEvent or EventA note regarding the real-world event covered in this article. Further details can be found in the SportsEvent and Event sections below.
dateModifiedDateTimeThe latest update timestamp, presented in ISO 8601 format. When the article is initially published, this value should be identical to datePublished.
datePublishedDateTimeThe original publication date and time, formatted according to ISO 8601. This value remains constant, regardless of any subsequent updates to the article.
headlineTextThe article's title. It should be concise, with a maximum length of 110 characters.
image.heightIntegerThe image's height, measured in pixels.
image.urlURLThe URL of the image.
image.widthIntegerThe width of the image, in pixels.
urlURLThe URL of the article which always should be specified

LiveBlogPosting - Additional properties

PropertyTypeDescription
imageImageObjectThere should be at least one image with a crawlable URL with a minimum of 696px wide.
keywordsTextThe best practice across the news publishers is to use the tags on the article as keywords in the schema markup.
mainEntityOfPage.@idURLSet mainEntityOfPage.@id when the article is the main focus of the page. This property's value should align with the canonical URL of the article page.

BlogPosting information

Within a LiveBlogPosting, a BlogPosting type represents a single entry. Each post's content should be marked up following the guidelines provided here.

BlogPosting Properties

PropertyTypeDescription
liveBlogUpdateBlogPostingAn array of annotations, one for each live blog update.
liveBlogUpdate.datePublishedDateTimeThe datetime of the blog update. Use ISO 8601 format.
liveBlogUpdate.articleBodyTextThe body of the blog update. In addition to text, the articleBody can contain tags to indicate line breaks, but it needs to be typed as HTML in that case.
liveBlogUpdate.image.urlURLAn annotation for the main image of the blog update. This property is required if a BlogPosting contains an image.
liveBlogUpdate.urlURLThe AMP URL for the live blog update. Generally, this will be the same as LiveBlogPosting.url with an additional HTML anchor (for example: https://www.website.com/someArticle#post). Don't use CGI parameters in the URL.
liveBlogUpdate.videoVideoObjectAn annotation for the main video of the blog update. This property is required if a BlogPosting contains a video
liveBlogUpdate.video.thumbnailUrlURLURL to the thumbnail to be used in the video. This property is required if a BlogPosting contains a video. If video is chosen to be marked up for a BlogPosting, then video.thumbnail must also be marked up.

What to do when a live blog expires:

When a live blog post concludes, it's important to follow these best practices:

  • Remove the live blog URL from your Google News XML sitemap.
  • Exclude it from the homepage, as well as any category or index pages.
  • For ongoing events, consider placing a link to the live blog page prominently on the main event page as a soft redirect.
  • Avoid removing the liveBlogPosting schema, as the "coverageEndTime" attribute offers valuable details about the event's coverage period.

Good examples of well-implemented LiveBlogPosting

Based on my experience, the New York Times (NYT) is always very detailed and precise in its schema markup. So if you are looking for some best practices and inspiration for some additional properties to add to your schema I would recommend having a look at their schema markup.

I'm biased but a good example is also the liveblogPosting schema markup on The Telegraph.

LiveBlogPosting schema markup debugging

To debug a LiveBlogPosting schema, you should use Schema Validator tool. You can enter the URL or you to paste the entire HTML and JSON-LD to validate. This tool will highlight any errors or warnings in your schema markup.

Validate Your LiveBlogPosting Schema

Use our free tool to validate and analyze your LiveBlogPosting schema markup. Get instant feedback on errors, missing required properties, and recommendations to improve your live blog posts for Google News and Top Stories.

Check Your LiveBlogPosting Schema →

Google's tool Rich Result Test specifically checks whether your structured data is eligible to generate rich results (enhanced search snippets) in Google Search.

What is the difference between the Rich Result Test and the Schema Validator?

Rich Results Test: This tool, provided by Google, specifically checks whether your structured data is eligible to generate rich results (enhanced search snippets) in Google Search. It evaluates the structured data for compatibility with Google's search features, such as rich snippets, carousels, or knowledge panels. It also highlights errors and warnings related to the specific schemas that can impact your content's appearance in search results.

Schema Validator Tool: This tool (such as Schema.org's validator) checks the correctness of your structured data against the Schema.org standards. It verifies if your markup is correctly formatted and adheres to the specifications, regardless of whether the data is eligible for rich results on Google. This tool ensures that your schema is technically accurate, but it doesn't provide information on how it will be displayed in search engines.

Svet Petkov

About the Author

Svet Petkov

Svet Petkov is the founder of StoryHawk. He has a solid background in SEO optimisation and in the past couple of years in SEO for news publishers. With his passion for Python and data, he is always interested in providing valuable data and the story behind it.

LiveBlogPosting Schema: Booster for Top Stories Success - StoryHawk Blog