Skip to main content
seofields
docs

OpinionNewsArticle

The OpinionNewsArticle schema type identifies opinion, editorial, and op-ed content — a dedicated subtype of NewsArticle . Labelling commentary as opinion (rather than reported news) sends a clear E-E-A-T signal to Google Discover, Google News, and AI answer surfaces about the nature and authorship of the piece.

About OpinionNewsArticle

Use OpinionNewsArticle for clearly subjective content — columns, editorials, and op-eds — and reserve NewsArticle for reported journalism. To maximise E-E-A-T, attribute the piece to a real author using the Person variant with a jobTitle and sameAs links to their authoritative profiles, and use the backstory field to document the sources and context behind the opinion. As with all news content, include three image aspect ratios (16x9, 4x3, and 1x1) at ≥ 1200 px wide and keep dateModified current.

Fields

FieldTypeRequiredDescription
headlinestringOpinion headline (≤ 110 characters recommended).
descriptiontextSummary or standfirst of the opinion piece.
imageurl | ImageObjectLead image. Provide multiple aspect ratios for news surface eligibility.
authorurl | PersonThe columnist or byline author. Use the Person variant with jobTitle and sameAs for E-E-A-T.
publisherurl | OrganizationThe publishing newsroom.
datePublisheddatetimePublication date and time (ISO 8601).
dateModifieddatetimeLast update date and time (ISO 8601).
articleSectionstringThe section of the publication (e.g. "Opinion", "Editorial").
articleBodytextThe actual body text of the opinion piece.
datelinestringThe location from which the piece was filed (e.g. "Washington, D.C.").
printColumnstringThe number of the column in which the article appears in the print edition.
printEditionstringThe edition of the print product in which the article appears.
printPagestringThe exact name of the print page on which the article is found (e.g. "A5", "B18").
printSectionstringThe print section in which the article appeared.
backstorytextSources, context, and provenance behind the opinion piece — a strong E-E-A-T signal.

Plugin Registration

sanity.config.ts
import { defineConfig } from 'sanity'
import { schemaOrgOpinionNewsArticlePlugin } from 'sanity-plugin-seofields/schema'

export default defineConfig({
  plugins: [
    schemaOrgOpinionNewsArticlePlugin(),
  ],
})

Schema Usage

Add the schemaOrgOpinionNewsArticle field to any document schema:

schemas/opinionPiece.ts
import { defineField, defineType } from 'sanity'

export default defineType({
  name: 'opinionPiece',
  title: 'Opinion Piece',
  type: 'document',
  fields: [
    defineField({
      name: 'schemaOrgOpinionNewsArticle',
      title: 'OpinionNewsArticle Schema',
      type: 'schemaOrgOpinionNewsArticle',
    }),
  ],
})

GROQ Query

GROQ query
*[_type == "opinionPiece"][0]{
  schemaOrgOpinionNewsArticle {
    headline,
    description,
    image,
    author,
    publisher,
    datePublished,
    dateModified,
    articleSection,
    articleBody,
    dateline,
    printColumn,
    printEdition,
    printPage,
    printSection,
    backstory
  }
}

Next.js Component

app/opinion/[slug]/page.tsx
import { OpinionNewsArticleSchema } from 'sanity-plugin-seofields/schema/next'

export default function Page({ data }) {
  return <OpinionNewsArticleSchema data={data.schemaOrgOpinionNewsArticle} />
}

JSON-LD Output

Generated JSON-LD
{
  "@context": "https://schema.org",
  "@type": "OpinionNewsArticle",
  "headline": "Why the Council's Climate Plan Doesn't Go Far Enough",
  "description": "The 2030 target is a start, but our columnist argues it sidesteps the hardest choices.",
  "image": [
    "https://example.com/opinion/climate-16x9.jpg",
    "https://example.com/opinion/climate-4x3.jpg",
    "https://example.com/opinion/climate-1x1.jpg"
  ],
  "author": {
    "@type": "Person",
    "name": "Maria Chen",
    "jobTitle": "Senior Opinion Columnist",
    "url": "https://example.com/staff/maria-chen",
    "sameAs": [
      "https://twitter.com/mariachen",
      "https://www.linkedin.com/in/mariachen"
    ]
  },
  "publisher": {
    "@type": "Organization",
    "name": "The Daily Chronicle",
    "logo": {
      "@type": "ImageObject",
      "url": "https://example.com/logo.png"
    }
  },
  "datePublished": "2025-03-12T09:00:00Z",
  "dateModified": "2025-03-12T16:40:00Z",
  "articleSection": "Opinion",
  "backstory": "Based on the author's coverage of three prior council climate votes and interviews with two policy analysts."
}

Was this page helpful?