Tool

Article schema generator: build the BlogPosting JSON-LD

Fill in the post fields the way you already have them in your CMS: the tool assembles the JSON-LD for Article, BlogPosting or NewsArticle in canonical order, audits the block across 10 items adding up to 100 points and shows the queue of what is missing before you paste it on the page. Free, no signup, and nothing leaves your browser.

Article / BlogPosting schema generator
Block score-

  • - headline
  • - description
  • - keywords
  • - size

Your JSON-LD

What the block gets right (and what is missing)

  • Headline present and in range-
  • Identifiable author (name and URL)-
  • Valid publication date-
  • Cover image as a full URL-
  • Coherent update date-
  • Description in the right size-
  • Publisher with a logo-
  • Article URL declared-
  • Language declared-
  • Topic declared (section or keywords)-

Everything runs in your browser: no field leaves this page and no URL is fetched, not even the cover. The score measures the markup, which is what you control. It promises neither a rich result nor a ranking nor an AI citation: the search engine decides that, and the criteria are not public.

This page builds the block describing the whole article: who wrote it, when, under which brand. If what you want to mark up are the questions and answers inside the post, the right page is the FAQ schema generator, and the two blocks live on the same page without conflict. If the question comes earlier, whether your site is reachable and quotable by AI at all, the GEO readiness checker measures the access layer, and the llms.txt generator handles the file at the root of the domain. Practical order: access first, article markup second, FAQ markup last.

First things first: Article is not a ranking lever

Worth starting with the part most tools leave out. Marking up your post with Article does not push it up in Google. Structured data exists so machines can understand the page, and understanding is not the same as promoting: Google itself describes markup as an aid to comprehension, not a ranking factor. Outside the news carousel, an ordinary site marks up the article and sees nothing change in how the result looks.

That does not zero out the value of the type, it changes the reason to use it. What the block does is hand over, for free and without ambiguity, the five data points anyone needs in order to display your article: title, author, date, brand and image. The consumers today are not only the search engine. They are the AI systems that have to attribute a source before citing it, the aggregators, the feed readers and the link previews in social networks and messengers. Without the block, each of them guesses on its own, and guessing goes wrong precisely on the field that matters most, which is authorship.

How to use it

  1. Pick the type. BlogPosting for a blog post, Article for editorial content that is not a post, NewsArticle only if you publish actual news. When in doubt, BlogPosting.
  2. Paste the full article URL, starting with https. It becomes url, the @id with an anchor and mainEntityOfPage, which is what ties the block to a specific page when it is read out of context.
  3. Fill in title, description and cover with what is published, not with an improved version. The block has to describe the page that exists.
  4. Sign it with author name and URL. The name alone is worth less than half of the item: it is the URL that ties the text to somebody verifiable.
  5. Write the dates in ISO-8601 with an offset, look at the checklist and clear whatever is red, top to bottom. Then copy it with the script tag and paste it into the HTML, either inside the head or at the end of the body.

How it works: the fields and the 10 weights

Article is a shallow type with many optional fields, and that is exactly where it fools people: almost everything is optional, so almost every block out there is valid and empty. The structure the tool assembles is this one:

BlogPosting
├ @id: url + #article · mainEntityOfPage · url
├ headline · description · image
├ inLanguage · datePublished · dateModified
├ author: Person or Organization
│   └ name · url
├ publisher: Organization
│   └ name · logo: ImageObject
└ articleSection · keywords

Since validity is easy, the audit does not measure syntax, which any generator gets right. It measures identity (can we tell which page this is about?), content (can this article be displayed without opening it?) and provenance (can we tell who signs it and when?). The 10 items add up to exactly 100 points.

score = content (36) + provenance (44) + identity (20)
content = headline 14 + image 12 + description 10
provenance = author 14 + published 12 + modified 10 + publisher 8
identity = URL 8 + language 6 + topic 6
author: 8 for the name + 6 for the author URL
published: 8 for a valid date + 4 for time with offset
publisher: 4 for the name + 4 for a logo as a full URL
headline: 14 up to 110 characters, 7 above that
description: 10 between 50 and 160 characters, 5 outside the range

Headline and author lead with 14 because they are the two fields deciding whether the block is good for anything: with no title there is nothing to cite, and with no identifiable author the Article becomes a generic thing with a date. Publication date is worth 12 for the same reason the image is worth 12: they are the two fields that build the card on any surface displaying your article, and they are also the two that most often arrive broken from the CMS, one without an offset and the other as a relative path. Composite items give partial credit on purpose, because an author with a name and no URL holds half the signal, and treating that as zero would hide what is missing.

Worked example (reproduces the default output)

The values that come prefilled describe a SaaS blog post, with two faults planted on purpose so the fix queue is not born empty: the author has a name and no URL, and the description ran past the 160 character limit.

Paste the author page into the empty field and the score climbs 6 points at once, which is the best return per keystroke in this tool. Trim the description to fit 160 characters by dropping the list at the end and the other 5 come back, closing at 100. Both fixes cost a minute and are exactly the two the fix queue puts on top, ordered by what hurts most.

How to read it, and where the score misleads

The score measures the block, not the article. A BlogPosting scoring 100 on a text nobody wants to read still earns nothing, because markup describes content and does not replace it. Marking up a shallow article well only speeds up the distribution of a shallow article.

The second trap is a mismatch between block and page. The guideline is explicit: what the markup claims has to be on the page. The common failure is not bad faith, it is inattention, and it always looks the same: somebody rewrites the post title and forgets the headline in the JSON-LD, or swaps the cover and leaves the old image marked up. Once block and page diverge, the markup starts working against you.

The third is freshness, and here the tool makes a deliberate choice: no check compares a date against today. A score that shifts on its own with the calendar is not auditable, and the same block would start being worth less without anyone having touched it. That does not mean freshness is irrelevant: it matters, and the right move is to revise the text and then update dateModified. What does not work is the reverse, nudging the date and leaving the text alone.

The fourth is inflating the type. There is an obvious temptation to declare NewsArticle hoping it opens the news carousel, and the practical effect is just a false claim about what the page is. The same goes for keywords: ten terms the page covers declare a topic, thirty terms declare that you do not know what the topic is.

From the block to evidence

Marking up is a bet on how third parties treat your content, and a bet without measurement turns into team folklore. The honest path is short:

To turn the first item of the queue into a testable hypothesis, use the hypothesis generator. To size the experiment before switching anything on, the sample size calculator settles it in a minute.

FAQ

What is Article schema?
It is the schema.org type that describes a page of editorial content: what the title is, who wrote it, when it was published, under which brand and which image represents the text. It changes nothing the visitor sees, because it lives inside a JSON-LD script tag. What sets it apart from other types is the payload: while FAQPage describes text, Article describes provenance, and that is why the author and date fields weigh more than anything else here.
What is the difference between Article, BlogPosting and NewsArticle?
BlogPosting and NewsArticle are subtypes of Article, so everything that holds for the parent holds for both children. Use BlogPosting for a blog post, which covers the overwhelming majority of sites. Use Article when the content is editorial but is not a blog post, like a guide page or a reference entry. And use NewsArticle only if you publish actual news, with reporting and an event date: declaring NewsArticle on a marketing post opens no door and creates a mismatch between what the markup claims and what the page is.
Does Article markup improve my ranking?
Not directly, and anyone promising that is selling something. Structured data helps a page be understood, not promoted, and Google itself describes markup as an aid to understanding rather than a ranking factor. The real gain is elsewhere: the block hands over title, author, date and image in machine readable form to whoever displays your article, and that list now includes AI systems, aggregators and smaller search engines. Correct markup is an entry condition on several surfaces, not a lever for position on one.
Why does the author field weigh so much in this score?
Because it is the field the Article type exists to carry, and the one almost everybody fills in halfway. A block whose author is Admin satisfies the specification and identifies nobody: to any consumer that text is still anonymous. What turns a name into a signal is the URL proving the person exists outside that article, whether it is your author page, a bio or a public profile. That is why the item is worth 14 points split in two: 8 for the name and 6 for the URL.
Do I need to declare dateModified?
You do, whenever the text actually changed. It is the field saying that the content is still maintained, and leaving it out makes the article look frozen at its publication date. What does not work is the trick of nudging the date every week without touching the text: besides earning nothing, it creates a page that declares itself new and serves the same old content. And there is one hard rule: dateModified can never be earlier than datePublished, which zeroes the 10 points of the item here.
Does the date need a timezone?
It is not mandatory, but it carries 4 of the 12 publication points because it settles a real ambiguity. A date written as just 2026-03-11 is valid ISO-8601 and leaves every consumer to decide on its own what time that happened, which makes an article published late in the day show up dated the next day in another timezone. The full format, 2026-03-11T09:00:00-03:00, removes the guesswork. What the tool discards entirely is anything outside ISO-8601, including slash separated local formats and days that do not exist, like February 30.
Does the markup have to match what is visible on the page?
It does, and this is not a matter of style: the structured data guidelines require the marked up content to represent what is on the page, and markup describing something else is grounds for a manual action. In practice the most common failure is not bad faith, it is inattention: somebody rewrites the post title and forgets the headline in the block, or swaps the cover and leaves the old image in the JSON-LD. Before publishing, check that headline, image and dates are the same ones the visitor sees.
Can I have Article and another schema on the same page?
You can, and it is the norm. A post usually carries Article plus FAQPage, and sometimes BreadcrumbList as well. You can publish separate script blocks or merge everything into one @graph. What does not work is declaring two Article blocks for the same page, which is what happens when the CMS plugin already injects one and somebody pastes another by hand. Before pasting, search for application/ld+json in the page source and see what is already there.
Embed this tool on your site

Paste this code wherever you want the generator to show up. The credit link below the frame helps us and you are free to keep it.

Keep going

With the block published, the next step is the layer it does not solve: crawler access, quotable text and authorship signals outside your own domain. Read the full method in the GEO guide, see what changes in conversion work in CRO in the age of AI and the effect of an answer served on screen in zero-click search optimization.

Related tools

See all tools →