Article Schema Generator
Fill in the headline, author, publisher and dates once and get the Article JSON-LD to paste into the page. Headline length, missing dates and impossible publish/modify pairs are flagged before you ship them.
Your Article JSON-LD
What this tool does
Article markup is a JSON-LD block that describes one article to a machine: the headline, the
person who wrote it, the organisation that published it, the main image, the dates it was
published and last meaningfully changed, and the URL it lives at. This tool assembles that
block, nesting author and publisher as their own objects and
dropping anything you leave empty rather than emitting a placeholder.
It also flags the mistakes that quietly cost you the markup. A headline over 110 characters
gets truncated in the article treatment, a dateModified earlier than the
datePublished is contradictory, and a relative image path cannot be resolved at
all. The honest limitation is that the tool cannot see your page — every value you type has
to match what a visitor sees, and the headline in particular has to be the same as the
visible h1, because that is the comparison Google makes.
How to use it
- Pick the type.
BlogPostingfor blog posts,NewsArticlefor reported news,TechArticlefor documentation, andArticlewhen none of those fits. The type changes what the page is eligible for, not which properties you fill in. - Copy the headline from your
h1exactly, and keep it under 110 characters. If you shorten it here, the markup now disagrees with the page. - Enter the dates the page shows, not today's date. Set
dateModifiedonly when the content genuinely changed — a date that moves on every deploy teaches crawlers to distrust both dates. - Fill in the author and publisher as they appear on the page, with the URLs where each can be found.
- Click Copy JSON-LD, paste it inside a
<script type="application/ld+json">tag, and check the page with Google's Rich Results Test.
Common use cases
-
A blog with no structured data at all
Most themes ship without it. Adding one block per post is the cheapest way to tell a crawler who wrote the piece and when it changed.
-
Eligibility for the article treatments
Large image, headline and timestamp treatments in search and Discover come from this markup. Without it the page is just a page.
-
A CMS that writes the wrong dates
Build the block by hand to see what the dates should be, then fix the template rather than patching the output.
-
Checking a plugin's output
Compare clean markup against whatever the SEO plugin is emitting, which is often a headline that does not match the page.
-
Stating authorship explicitly
An author with a URL they can be found at is a stronger signal than a byline in a
divthat nothing connects to anything.
Frequently asked questions
Do I need Article schema to rank?
No. Article markup is not a ranking factor, and a page with flawless structured data will not outrank a better page without it. What it does is state the things a machine cannot reliably guess from prose: who wrote the piece, who published it, when it went live and when it last changed. That is what makes a page eligible for the article treatments in search and in Discover, and it is the version of the facts you want a crawler to have when it summarises the page somewhere else.
Should dateModified change every time I edit?
Only when the content genuinely changed. A dateModified that moves because a
template was redeployed, a sidebar was reordered or a typo in your footer was fixed is
worse than no dateModified at all, because crawlers compare it against the
page and learn to ignore both dates. Update it when a reader would say the article is
different — a corrected fact, a new section, a rewritten conclusion — and leave it alone
otherwise.
Can one Article block cover several posts?
No. Article markup describes one page, and the headline has to be the visible heading of that page. A single block on an index or archive page claiming to be many articles is the mismatch that gets structured data treated as spam rather than ignored. If you have five posts, each needs its own markup on its own URL — which is what the CMS templates are for.