docs
NewsArticle
The NewsArticle schema type identifies journalistic content — breaking news, analysis, opinion, and investigative reporting. It is the gateway to Google News surfaces, the Top stories carousel, and prominent citation in AI overviews.
About NewsArticle
For Top stories eligibility Google requires three image aspect ratios (16x9, 4x3, and 1x1) at ≥ 1200 px wide, plus a clearly attributed author and publisher. Always include dateModified when an article is updated — this is the primary signal Google uses to refresh listings. For evergreen editorial content, prefer the more general Article type instead.
Fields
| Field | Type | Required | Description |
|---|---|---|---|
headline | string | ✓ | Article headline (≤ 110 characters recommended). |
description | text | ✓ | Article summary or standfirst. |
image | url | ImageObject | — | Lead image. Provide multiple aspect ratios for Top stories eligibility. |
author | url | Person | — | The reporter or byline author. |
publisher | url | Organization | — | The publishing newsroom. |
datePublished | datetime | — | Publication date and time (ISO 8601). |
dateModified | datetime | — | Last update date and time (ISO 8601). |
articleSection | string | — | The section of the publication this article belongs to (e.g. "Breaking News", "Sports"). |
Plugin Registration
sanity.config.ts
import { defineConfig } from 'sanity'
import { schemaOrgNewsArticlePlugin } from 'sanity-plugin-seofields/schema'
export default defineConfig({
plugins: [
schemaOrgNewsArticlePlugin(),
],
})Schema Usage
Add theschemaOrgNewsArticle field to any document schema:
schemas/newsStory.ts
import { defineField, defineType } from 'sanity'
export default defineType({
name: 'newsStory',
title: 'News Story',
type: 'document',
fields: [
defineField({
name: 'schemaOrgNewsArticle',
title: 'NewsArticle Schema',
type: 'schemaOrgNewsArticle',
}),
],
})GROQ Query
GROQ query
*[_type == "newsStory"][0]{
schemaOrgNewsArticle {
headline,
description,
image,
author,
publisher,
datePublished,
dateModified,
articleSection
}
}Next.js Component
app/news/[slug]/page.tsx
import { NewsArticleSchema } from 'sanity-plugin-seofields/schema/next'
export default function Page({ data }) {
return <NewsArticleSchema data={data.schemaOrgNewsArticle} />
}JSON-LD Output
Generated JSON-LD
{
"@context": "https://schema.org",
"@type": "NewsArticle",
"headline": "City Council Approves Landmark Climate Plan",
"description": "After months of debate, the council unanimously passed a 2030 net-zero target.",
"image": [
"https://example.com/news/climate-16x9.jpg",
"https://example.com/news/climate-4x3.jpg",
"https://example.com/news/climate-1x1.jpg"
],
"author": {
"@type": "Person",
"name": "Maria Chen",
"url": "https://example.com/staff/maria-chen"
},
"publisher": {
"@type": "Organization",
"name": "The Daily Chronicle",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png"
}
},
"datePublished": "2025-03-12T08:30:00Z",
"dateModified": "2025-03-12T14:15:00Z",
"articleSection": "Politics"
}Was this page helpful?