Fix library

How to add Article schema that is actually complete

You make Article schema complete by filling the 5 properties engines actually read: headline, image, datePublished, dateModified, and author with a name. Google's Article documentation says the markup can “help Google understand more about the web page and show better title text, images, and date information” in search results. And here is the honest part: Google lists no required properties. A block with only a type is valid. It is also useless, which is why completeness is the whole fix.

The symptom: a nameless, dateless, half-empty block

The page has Article markup, so the box looks ticked. Then you read the block. There is a type and a headline that does not match the H1, or no headline at all. No image. No dates, or a datePublished and nothing else. The author is missing, or it is a string like "admin". The markup exists, and it tells an engine almost nothing the raw HTML did not already say.

This matters because the block is where an engine confirms the facts it would otherwise have to guess. Who wrote this? When? Has it been updated since? What image represents it? A half-empty Article node answers none of that, and an engine that cannot confirm authorship and currency treats the page accordingly. It has typed data, technically. It has no useful typed data, practically.

The cause: the block was generated, never completed

Almost every half-empty Article block we see was emitted by a theme or a plugin with default settings. The tool added the type because the page looked like a post, filled in whatever fields it could find in the CMS, and shipped. Nobody mapped the author field. Nobody wired dateModified to the real revision history. Nobody noticed, because structured data is invisible in the browser and the page looked fine.

There is also a documentation subtlety that lets this slide. Google's Article doc states: “There are no required properties; instead, add the properties that apply to your content.” Read carelessly, that sounds like permission to ship a bare block. Read correctly, it means the burden is on you to include what is true of your page. For a real article, headline, image, both dates, and a named author all apply. Leaving them out is not minimalism. It is an unfinished job that validates.

The fix: fill the five properties that matter

Add one Article node per article page and complete it. The headline should match the page's real H1. The image should be the article's actual lead image at a usable resolution. Dates go in ISO 8601 format. The doc's own definition of dateModified is “The date and time the article was most recently modified, in ISO 8601 format,” and it recommends including timezone information on both dates.

Author deserves the most care, because it is the field tools butcher most. Use a Person for a human byline or an Organization when the publication itself is the author, and give it a real name. The doc is blunt about keeping that field clean: “Only specify the name of the author. Don't add any other piece of information.” No job titles, no honorifics, no "By " prefix. If the page shows multiple authors, the markup must list all of them.

<!-- A complete Article block. Every value must be true of the page -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "How to replace a roof in Austin",
  "image": "https://example.com/images/roof-replacement.jpg",
  "datePublished": "2025-11-03T09:00:00-06:00",
  "dateModified": "2026-07-02T14:30:00-05:00",
  "author": {
    "@type": "Person",
    "name": "Maria Delgado",
    "url": "https://example.com/about/maria-delgado"
  },
  "publisher": {
    "@type": "Organization",
    "name": "Acme Roofing",
    "logo": { "@type": "ImageObject", "url": "https://example.com/logo.png" }
  }
}
</script>

One more alignment check before you ship it. Every value in the block must agree with what a reader sees on the page. The headline matches the H1. The visible byline names the same author as the markup. The visible last-updated date matches dateModified. A block that contradicts the page is worse than no block, because it teaches the engine your typed data lies. If your byline itself is thin or missing, fix that too. Our page on missing author bios covers the visible half of authorship.

Be honest: the dates must be real

The temptation with dateModified is obvious. Freshness matters to engines, the field is one line of JSON, and nobody audits it. Do not do it. Bumping dateModified without changing the content is a fabricated signal, and engines can compare the claimed date against a page that demonstrably has not changed. The date is a promise that the substance moved. Only move it when that is true. We wrote up the full argument, and the honest way to earn a current date, in our guide on fixing stale content.

Verify: validate, then re-audit

Run the page through Google's Rich Results Test. It will confirm the block parses, the type is recognized, and no property is malformed. Fix what it reports and run it again until it is clean. Then read the page next to the markup and confirm the alignment checks above by eye: headline, byline, dates.

Then verify it the way the engines will. Re-run an audit on the live URL and confirm the Article node is detected and complete. You can do this by hand, or paste your link into our AEO checker or the full Brimm audit and we will read the page the way a crawler does, list which Article properties are present, and print the missing ones in fix order. For the wider picture on typed markup, start with missing structured data, and the rest of the fix library covers the other failures we find most.

See if your Article markup is complete.

Paste your link. We check for a typed Article node, the properties it carries, and whether the dates and author match the visible page. The preview is free.