/ โ† Open Graph Fixes / Article OG Tags
In this guide
  1. What the article properties are for
  2. The findings you are likely to see
  3. Getting the dates right
  4. Choosing a value for article:author
  5. The fix, step by step
  6. A complete article head
  7. Setting article tags on common platforms
  8. Edge cases
  9. Questions and answers

What the article properties are for

The Open Graph protocol defines a handful of object types. Most pages are website. A page whose og:type is article may carry an extra, optional set of properties in the article: namespace. The protocol, documented at ogp.me, lists six of them:

PropertyExpected valueHow many
article:published_timeDate and time the piece was first publishedOne
article:modified_timeDate and time of the last meaningful changeOne
article:expiration_timeWhen the piece stops being currentOne, rarely used
article:authorA profile of the writerOne per author
article:sectionA high-level category, such as "Recipes"One
article:tagA word or phrase describing a topicOne per tag

Facebook also reads article:publisher, which is not in the core protocol and holds the address of the publisher's Facebook Page. It is harmless to include if you have a Page and pointless if you do not.

What they do and what they do not do

These are descriptive tags. Platforms that build link previews can read them to show a date or byline, to attribute a share, or to group content, and some internal tools and aggregators use them to sort posts. How much any given platform displays changes over time, and many show nothing extra at all. They are not a ranking signal that Google documents; for search, Google's own guidance on dates and bylines points to visible dates and Article structured data. Treat article tags as cheap, accurate metadata that keeps every system describing the post the same way, not as a lever for traffic.

๐Ÿ’ก The generator flags article problems because they are easy to get subtly wrong in a template and then repeat on every post. One template fix corrects hundreds of pages at once.

The findings you are likely to see

Article tag problems fall into a few patterns. Each one usually has a single cause in the template or plugin.

Getting the dates right

The protocol calls for the ISO 8601 date-time format. In practice that means the full date, the letter T, the time, and a time zone offset. The offset is what makes the value unambiguous.

ValueVerdictWhy
2026-04-03T09:15:00+01:00CorrectFull date and time with the British Summer Time offset
2026-01-12T14:00:00+00:00CorrectWinter post, Greenwich Mean Time offset
2026-04-03T08:15:00ZCorrectThe same moment as the first row, written in UTC
2026-04-03WeakValid ISO 8601 date but no time or zone; readers must guess
2026-04-03 09:15:00WrongA space instead of T and no offset; this is a database format
03/04/2026WrongNot ISO 8601, and reads as 4 March in the United States

UK sites have one extra trap: the offset changes twice a year. Do not hard-code +00:00 or +01:00 in the template. Let the language you are using format the stored timestamp in the Europe/London zone, or store and print everything in UTC with a Z. Both are correct as long as they describe the right moment.

What counts as "modified"

Only change article:modified_time when the content changes in a way a reader would care about: a corrected fact, a new section, updated prices. Fixing a typo, changing a sidebar or re-saving a post to clear a cache is not a modification. Many content systems update their "last modified" field whenever a post is saved, so if your editors re-save often, consider a separate "last reviewed" field that editors set on purpose and print that instead. Leave the modified tag out entirely on posts that have never been updated, or set it equal to the published time.

โš ๏ธ Refreshing the modified date on old posts without changing them, to make them look new, erodes trust in every date you publish. If the page shows "Updated" with a date, the change should be visible to the reader.

Choosing a value for article:author

The protocol defines article:author as an array of profile objects, which in practice means a URL for each writer. Sites use three kinds of value, and platforms treat them differently.

  1. A link to the author's page on your own site, such as https://example.co.uk/team/sam-okafor. This is the most useful choice: it is stable, you control it, and it matches the author URL you would use in structured data.
  2. A link to a social profile. Facebook historically used a Facebook profile address here to show a byline. That behaviour has changed over the years and is not something to rely on.
  3. A plain name, such as Sam Okafor. Not what the protocol describes, but common and understood by some readers. If your template can only produce a name, it is better than a wrong URL.

For several authors, print one tag per author in byline order. For posts written by the organisation with no named writer, leave the tag out rather than filling it with the company name; article:publisher or og:site_name already covers that.

Other author signals worth keeping consistent

Some platforms read other tags for attribution. <meta name="author"> is a plain HTML tag that some link preview services read. twitter:creator holds the writer's X handle. Mastodon introduced a fediverse:creator tag that shows the author's fediverse account under link previews, where the author has allowed your site in their profile settings. Use whichever of these fit your writers, and make sure they all name the same person.

The fix, step by step

Step 1

Decide which page types are articles

List the templates on your site and mark which ones produce dated editorial content with a writer: blog posts, news items, guides, case studies written as stories. Home pages, service pages, category listings, product pages, contact pages and landing pages are not articles and should stay as website. Writing this list down first prevents the common mistake of switching every page to article in one global setting and giving the contact page a publication date.

Step 2

Switch og:type on those templates only

In the post template, or the SEO plugin's setting for that content type, set og:type to article, and leave every other template on website. Then view the source of one post and one non-post page and confirm each shows a single og:type tag with the right value. If you see two, a theme and a plugin are both printing tags, and one of them has to be switched off before going further.

Step 3

Print both dates in full ISO 8601 form

Output article:published_time from the post's stored publication date and article:modified_time from a stored edit date, never from the current time. Format both with the date, the letter T, the time and an offset, using the Europe/London zone so summer and winter posts get the correct offset automatically, or print UTC with a trailing Z. Leave modified out, or equal to published, on posts that have never had a real update.

Step 4

Choose one author value and use it everywhere

Give each writer a profile page on your own site and print its full https address in article:author, one tag per author in byline order. Use the same address as the author URL in your Article structured data and on the visible byline link. If a post has no named writer, omit the tag rather than inserting the company name, and let og:site_name and article:publisher carry the organisation instead.

Step 5

Map sections and tags from your taxonomy

Set article:section from the post's main category, using one plain-English value such as Recipes or Home energy rather than a slug. Print one article:tag element for each tag on the post, not a single comma-separated list, and cap the number at a sensible handful so the head does not fill with dozens of lines. Skip internal-only tags such as featured or homepage-slider, which describe your layout rather than the topic.

Step 6

Line the tags up with Article schema and the byline

Compare the article tags with the datePublished, dateModified and author values in the page's Article or BlogPosting structured data, and with the date and name printed in the visible byline. All three should describe the same moment and the same person. Ideally generate them from the same variables in one template, so a change to the post record updates the tags, the schema and the byline together.

Step 7

Validate a sample and watch new posts

Run three or four posts of different ages through the OG / Twitter Tag Generator and confirm the type, dates, author, section and tags are present and correctly formatted, and that a non-article page shows none of them. Check one post published in summer and one in winter to catch offset mistakes. After the next few posts go live, check them too, because editors sometimes find ways round a template.

A complete article head

This is the article portion of the head for a fictional baking blog post with two writers. It sits after the core og:title, og:url, og:image and og:description tags.

<meta property="og:type" content="article">
<meta property="og:site_name" content="Riverside Loaf Kitchen">
<meta property="article:published_time" content="2026-04-03T09:15:00+01:00">
<meta property="article:modified_time" content="2026-08-19T16:40:00+01:00">
<meta property="article:author" content="https://example.co.uk/team/sam-okafor">
<meta property="article:author" content="https://example.co.uk/team/lena-price">
<meta property="article:section" content="Bread">
<meta property="article:tag" content="Sourdough">
<meta property="article:tag" content="Starters">
<meta property="article:tag" content="Beginners">
<meta name="author" content="Sam Okafor and Lena Price">

And the matching structured data, generated from the same values, so the two cannot disagree:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "Keeping a sourdough starter alive through a busy week",
  "datePublished": "2026-04-03T09:15:00+01:00",
  "dateModified": "2026-08-19T16:40:00+01:00",
  "articleSection": "Bread",
  "keywords": ["Sourdough", "Starters", "Beginners"],
  "author": [
    {"@type": "Person", "name": "Sam Okafor", "url": "https://example.co.uk/team/sam-okafor"},
    {"@type": "Person", "name": "Lena Price", "url": "https://example.co.uk/team/lena-price"}
  ],
  "publisher": {"@type": "Organization", "name": "Riverside Loaf Kitchen", "url": "https://example.co.uk/"}
}
</script>

Notice what repeats and what does not. Dates are identical, character for character. The author URLs are identical. The section and tags match. The headline in the schema can be the page's full headline even when og:title is a shorter share version.

Setting article tags on common platforms

WordPress

Yoast SEO, Rank Math and All in One SEO all print og:type as article on posts and add the published and modified times automatically from the post record. Check three things. First, where article:author comes from: these plugins generally fill it from a Facebook profile field in each user's WordPress profile and leave it out when that field is empty, so decide whether you want it at all. Second, that categories map to article:section the way you expect. Third, that only one plugin or theme is printing Open Graph tags. More detail is in Open Graph in WordPress.

Shopify blogs

Many Shopify themes print a single set of Open Graph tags from a shared snippet, with article handling that varies by theme. Open the social meta snippet in the theme code, find the branch for the article template, and add the date and author tags there using the article object's published and updated dates, formatted with a date filter that outputs ISO 8601.

Next.js

The Metadata API's openGraph field accepts type: 'article' together with publishedTime, modifiedTime, authors, section and tags, and prints the matching article: tags. Pass ISO strings, not Date objects formatted by hand. See Open Graph in Next.js.

Static site generators

In Hugo, Eleventy, Jekyll and Astro the post's front matter usually holds the date, author and tags already. The work is in the head partial: branch on the content type, format the date with the offset, and loop over tags to print one element each.

Edge cases

Questions and answers

1. Should every page use og:type article?

No. Use article only for dated editorial content with a writer, such as blog posts, news items and written guides. Home pages, service pages, category listings, product pages and contact pages should use website. Marking everything as an article gives pages like your contact page a meaningless publication date and sends mixed signals to anything that reads the metadata. Most SEO plugins and frameworks let you set the type per content type, so the change only needs to be made once in each template.

2. What format should article:published_time use?

The ISO 8601 date-time format: the date, the letter T, the time and a time zone offset, for example 2026-04-03T09:15:00+01:00. You can also use UTC with a trailing Z. The offset matters because without it readers have to guess the time zone. UK sites should format the stored date in the Europe/London zone so that summer posts get +01:00 and winter posts get +00:00 automatically, rather than hard-coding one offset in the template.

3. Does article:modified_time help my Google rankings?

Google does not document the Open Graph article tags as a ranking factor. For dates in search results, Google points to visible dates on the page and to datePublished and dateModified in structured data. Changing the modified time without changing the content will not make a page rank better and can make your dates look unreliable. Keep the Open Graph dates accurate and consistent with the schema and the byline, and update them only when the content really changes.

4. Should article:author be a name or a URL?

The Open Graph protocol describes it as a profile, which in practice means a URL. The most useful value is the full address of the writer's profile page on your own site, which you control and which can match the author URL in your structured data. A plain name is common and some readers accept it, so it is better than a wrong address, but a URL is more precise. Print one tag per author when a post has several writers.

5. How do I add multiple tags with article:tag?

Print a separate meta element for each tag, each with property set to article:tag and one tag in the content. Do not put several tags in one element separated by commas, because readers will treat the whole string as a single tag. Keep the list short and relevant: the post's real topic tags, not layout flags such as featured or homepage. Most templates can loop over the post's tags to print them, so the list stays in step with your CMS.

6. Is article:publisher part of the Open Graph protocol?

Not the core protocol published at ogp.me, which lists published time, modified time, expiration time, author, section and tag. article:publisher is an extension that Facebook reads, and its value is the address of the publisher's Facebook Page. It does no harm to include it if you have a Page, but it adds nothing if you do not, and it is no substitute for og:site_name, which names the site on most platforms' cards.

7. Why do my article dates differ between the page, schema and Open Graph tags?

Usually because each is generated from a different field or by a different piece of software. A theme might print the visible date, an SEO plugin the Open Graph dates, and another plugin the schema, each with its own formatting or time zone handling. The fix is to take all three from the same stored values, ideally in one template or one plugin, and to check a summer post and a winter post to catch offset errors.

Check your article tags

The OG / Twitter Tag Generator builds the Open Graph and X card block for your page, validates it against the requirements of Facebook, LinkedIn and X, and flags every tag that is missing or invalid, including the article properties.

Open Open Graph Fixes โ†’
๐Ÿ’ฌ Got a problem?
Related Guides: All Open Graph Fixes  ·  Open Graph Guide  ·  E-E-A-T for Blog Posts  ·  Fixing X (Twitter) Card Tags  ·  Learning Hub

About aiwebpageseo

aiwebpageseo.com is a data-driven SEO and AEO (Answer Engine Optimisation) platform providing a free suite of technical SEO tools. Rather than relying on AI-theorised assumptions, the platform analyses live URL performance, delivering objective diagnostics, page speed metrics, CLS debugging, and site crawl data alongside actionable technical tutorials.