A news article, to structured data, is a dated, bylined story — the page type Google's Top stories carousel and Google News draw from. The markup is NewsArticle (or a subtype such as ReportageNewsArticle or OpinionNewsArticle, which also declares what kind of journalism it is), and the reward is the Article rich result plus eligibility for Top stories.

What is required

Exactly one property: headline. Everything else is recommended. But a NewsArticle carrying only a headline earns the plainest possible result, so the required list is the floor, not the target.

Keep the headline the story's actual headline — the same words the page shows. Google truncates long ones in results, and a headline that differs from the visible one reads as deception to both the reviewer and the algorithm.

What decides how the result looks

  • image — the story image, as an absolute URL. Provide it large: small images produce small results, and Top stories is a visual surface. Multiple aspect ratios (16×9, 4×3, 1×1) let Google pick per placement.
  • datePublished and dateModified — ISO 8601, with a timezone. For news these are not decoration: freshness is the ranking signal, and a dateModified that moves without the story changing is the classic trick Google documents against.
  • author — a Person with a name, ideally with a url to an author page. Bylines are how news credibility is assessed; an anonymous news story is a weaker claim.
  • publisher — the publishing organisation with a name and a logo. This is what appears beside the story in carousels.
  • mainEntityOfPage — ties the article node to this URL, so the markup is unambiguous about which page it describes.
  • articleSection — the section the story belongs to, in the same word your breadcrumb uses.
  • description — a standfirst, matching the meta description.

An example

{
  "@context": "https://schema.org",
  "@type": "NewsArticle",
  "headline": "Council approves the riverside development",
  "image": ["https://example.com/img/riverside-16x9.jpg"],
  "datePublished": "2026-08-20T09:15:00+05:30",
  "dateModified": "2026-08-20T11:40:00+05:30",
  "author": {"@type": "Person", "name": "A. Reporter",
             "url": "https://example.com/authors/a-reporter"},
  "publisher": {"@type": "Organization", "name": "The Example Times",
                "logo": {"@type": "ImageObject",
                         "url": "https://example.com/logo.png"}},
  "mainEntityOfPage": "https://example.com/news/riverside-development",
  "articleSection": "Local news",
  "description": "The 4-2 vote ends a two-year planning dispute."
}

The mistakes that cost the placement

Dates that disagree with the page. A visible "Updated 20 August" next to markup saying something else is the fastest way to lose the date from your result entirely — Google shows nothing rather than guess.

Marking a blog post as NewsArticle. The type is a claim about what the page is, and an evergreen guide wearing a news label is a claim the content contradicts. Use Article or BlogPosting for anything that is not reporting.

A logo that is not a logo. The publisher logo appears at thumbnail size; a full-width banner or a white-on-transparent mark disappears there.

Checking your page

Run the page through the structured data validator to confirm the block parses and the properties are present, then through the complete page audit — a news story also needs its dates consistent between markup, page copy and HTTP headers, which is exactly the kind of cross-check a single-purpose validator does not make.