Skip to main content
seofields
docs
.md

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 clearly subjective columns and op-eds, use the dedicated OpinionNewsArticle subtype, and for evergreen editorial content prefer the more general Article type instead.

Fields

FieldTypeRequiredDescription
headlinestring✓Article headline (≤ 110 characters recommended).
descriptiontext✓Article summary or standfirst.
imageurl | ImageObject—Lead image. Provide multiple aspect ratios for Top stories eligibility.
authorurl | Person—The reporter or byline author.
publisherurl | Organization—The publishing newsroom.
datePublisheddatetime—Publication date and time (ISO 8601).
dateModifieddatetime—Last update date and time (ISO 8601).
articleSectionstring—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 the schemaOrgNewsArticle 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?