News Article Schema Markup: Complete Implementation Guide

NewsArticle schema markup is essential for news SEO, enabling rich results in Google News and Top Stories. This guide covers complete implementation with all required and recommended properties.

Why NewsArticle Schema Matters

Without proper schema markup:

Required Properties

Minimum Required Schema

{
  "@context": "https://schema.org",
  "@type": "NewsArticle",
  "headline": "Article Headline",
  "datePublished": "2025-06-15T10:30:00+00:00",
  "dateModified": "2025-06-15T11:45:00+00:00",
  "author": {
    "@type": "Person",
    "name": "Author Name"
  },
  "publisher": {
    "@type": "Organization",
    "name": "Publication Name",
    "logo": {
      "@type": "ImageObject",
      "url": "https://example.com/logo.png"
    }
  },
  "image": "https://example.com/article-image.jpg",
  "description": "Article description"
}

All Recommended Properties

Complete NewsArticle Schema

{
  "@context": "https://schema.org",
  "@type": "NewsArticle",
  
  "headline": "Google Announces Major Algorithm Update Affecting Search Rankings",
  "alternativeHeadline": "Google Core Update June 2025: What You Need to Know",
  
  "datePublished": "2025-06-15T10:30:00+00:00",
  "dateModified": "2025-06-15T14:22:00+00:00",
  
  "author": {
    "@type": "Person",
    "name": "Jane Smith",
    "url": "https://example.com/author/jane-smith",
    "jobTitle": "Senior Tech Reporter",
    "sameAs": [
      "https://twitter.com/janesmith",
      "https://linkedin.com/in/janesmith"
    ]
  },
  
  "publisher": {
    "@type": "Organization",
    "name": "Example News",
    "url": "https://example.com",
    "logo": {
      "@type": "ImageObject",
      "url": "https://example.com/logo.png",
      "width": 600,
      "height": 60
    },
    "sameAs": [
      "https://twitter.com/examplenews",
      "https://facebook.com/examplenews"
    ]
  },
  
  "image": {
    "@type": "ImageObject",
    "url": "https://example.com/article-image.jpg",
    "width": 1200,
    "height": 630
  },
  
  "description": "Google has announced a major algorithm update that will significantly affect search rankings across industries.",
  "articleBody": "Full article text...",
  "articleSection": "Technology",
  "wordCount": 1500,
  
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://example.com/google-algorithm-update"
  },
  
  "keywords": ["Google", "algorithm update", "SEO", "search rankings"],
  "genre": "News",
  
  "isAccessibleForFree": true,
  "isPartOf": {
    "@type": "CreativeWork",
    "name": "Example News Technology Section"
  },
  
  "speakable": {
    "@type": "SpeakableSpecification",
    "cssSelector": [".article-headline", ".article-summary"]
  }
}

Common Schema Errors and Fixes

Error 1: Missing dateModified

// Bad: No dateModified
{"datePublished": "2025-06-15T10:30:00Z"}

// Good: Include both dates
{"datePublished": "2025-06-15T10:30:00Z", "dateModified": "2025-06-15T14:22:00Z"}

Error 2: Invalid Date Format

// Bad: Non-ISO 8601 format
{"datePublished": "June 15, 2025"}

// Good: ISO 8601 format with timezone
{"datePublished": "2025-06-15T10:30:00+00:00"}

Error 3: Mismatched Headline

The schema headline should match the page H1:

// Bad: Different from H1
{"headline": "Google Update"}  // H1: "Google Announces Major Algorithm Update"

// Good: Matches H1
{"headline": "Google Announces Major Algorithm Update"}

Error 4: Missing Publisher Logo

// Bad: No logo
{"publisher": {"@type": "Organization", "name": "Example News"}}

// Good: Include logo
{"publisher": {
  "@type": "Organization",
  "name": "Example News",
  "logo": {
    "@type": "ImageObject",
    "url": "https://example.com/logo.png"
  }
}}

Schema Validation and Testing

Testing Tools

  1. Rich Results Test: Google's official testing tool
  2. Schema Markup Validator: Comprehensive validation
  3. Chrome DevTools: Check structured data in Elements
  4. Schema.org Validator: Standards compliance

Monitoring Schema in Production

Paywalled Content Schema

For news sites with paywalled content:

{
  "@type": "NewsArticle",
  "isAccessibleForFree": false,
  "hasPart": {
    "@type": "WebPageElement",
    "isAccessibleForFree": false,
    "cssSelector": ".paywall-content"
  }
}

<!-- Also add this meta tag -->
<meta name="googlebot" content="nosnippet">

This tells Google the content is paywalled while still allowing it to be crawled and indexed.