Fixing Article OG Tags
Blog posts, news stories and guides can describe themselves to sharing platforms as articles, with a publication date, an update date, an author, a section and topic tags.
When those tags are missing, badly formatted or out of step with the page, you lose that detail at best, and at worst the metadata says one thing while the page says another. Editors, marketers and anyone maintaining a blog template run into this. This guide explains each article property, shows the correct formats, and walks through fixing them in a template so every post gets them right automatically.
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:
| Property | Expected value | How many |
|---|---|---|
article:published_time | Date and time the piece was first published | One |
article:modified_time | Date and time of the last meaningful change | One |
article:expiration_time | When the piece stops being current | One, rarely used |
article:author | A profile of the writer | One per author |
article:section | A high-level category, such as "Recipes" | One |
article:tag | A word or phrase describing a topic | One 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 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.
- Posts marked as
website. The template prints the sameog:typeeverywhere, so the article properties are either missing or sit under a type that does not define them. - Everything marked as
article. The opposite mistake: the home page, contact page and product pages all claim to be articles, often with the site's launch date as their published time. - Dates without a time zone, or date only. A value such as
2026-04-03or2026-04-03 09:15:00is ambiguous. Readers may treat it as midnight UTC, which shifts British Summer Time posts to the previous evening. - Modified time on every page load. The template prints the current time rather than the stored edit time, so every post appears to have been updated a second ago.
- Author as a list in one tag.
content="Sam Okafor, Lena Price"in one tag rather than one tag per author. - Tags as a comma list.
article:tagwithcontent="bread, sourdough, baking"instead of three separate tags. - Two sets of article tags. A theme and an SEO plugin both print them, with different dates or authors.
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.
| Value | Verdict | Why |
|---|---|---|
2026-04-03T09:15:00+01:00 | Correct | Full date and time with the British Summer Time offset |
2026-01-12T14:00:00+00:00 | Correct | Winter post, Greenwich Mean Time offset |
2026-04-03T08:15:00Z | Correct | The same moment as the first row, written in UTC |
2026-04-03 | Weak | Valid ISO 8601 date but no time or zone; readers must guess |
2026-04-03 09:15:00 | Wrong | A space instead of T and
no offset; this is a database format |
03/04/2026 | Wrong | Not 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.
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.
- 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. - 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.
- 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
- Imported posts with no time. Posts migrated from an old system often have a date but no time. Pick a consistent time such as 09:00 local and apply it, rather than printing midnight UTC.
- Scheduled posts. The published time should be when the post actually went live, not when the draft was created. Check your system uses the publication field.
- Time-limited content. Offers and event write-ups can use
article:expiration_time, but few platforms act on it. Updating or removing the page when it expires matters far more. - Evergreen guides. A guide that is revised regularly is still an article. Keep the original published time and let the modified time move forward with real revisions.
- Syndicated content. If a post first appeared elsewhere, keep your own published time for your copy and point the canonical tag at the original if that is the agreed arrangement.
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.
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 โ