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:
- Articles may not appear in Top Stories
- Google News may not properly categorize content
- Rich results are unavailable
- Publishing authority is unclear
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
- Rich Results Test: Google's official testing tool
- Schema Markup Validator: Comprehensive validation
- Chrome DevTools: Check structured data in Elements
- Schema.org Validator: Standards compliance
Monitoring Schema in Production
- Use Search Console enhancements report
- Monitor for schema errors weekly
- Track rich result appearance rate
- Compare schema implementation with competitors
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.