og:type and the metadata around it
og:type declares what kind of thing a page represents — website, article, video, product — and
each type permits its own extra tags. In practice website and article cover almost everything, the
extras have modest and inconsistent effects, and a handful of neighbouring tags (og:site_name,
og:locale) are worth setting because they’re free.
Useful to know what’s real here, because there’s a long tail of tags that look important and change nothing.
The types that matter
article for anything with an author and a publication date — posts, news, documentation entries.
website for everything else — the homepage, landing pages, listings, tools, app screens.
That’s the whole decision for most sites. video.other, music.song, book, profile and product
exist and are read by specific platforms for specific layouts; if you’re not publishing that kind of
thing, they’re irrelevant.
Default to website, use article on articles.
What article unlocks
<meta property="og:type" content="article">
<meta property="article:published_time" content="2026-07-26T09:00:00Z">
<meta property="article:modified_time" content="2026-07-26T14:30:00Z">
<meta property="article:author" content="https://example.com/about/">
<meta property="article:section" content="Guides">
<meta property="article:tag" content="open graph">
Times must be ISO 8601 with a timezone. A bare date is frequently ignored, and a date with no zone is guessed at.
Honest effect: some platforms and readers show a publication date from these; many don’t. They cost
nothing and occasionally help. The date being correct matters more than its being present — a
modified_time that updates on every build, without the content changing, is misinformation.
article:author expects a URL, not a name, which surprises people. article:tag can repeat.
Don’t confuse any of this with your search-engine structured data. If you want dates and authorship understood by search, that’s JSON-LD, and it’s a separate mechanism with separate rules.
Neighbouring tags worth setting
og:site_name — the name of your site as a whole.
<meta property="og:site_name" content="Example">
Some layouts display it near the title, some don’t. Same value on every page. One line in your template, set it and forget it.
og:locale — the language and region of the content.
<meta property="og:locale" content="en_GB">
Note the format: underscore, not hyphen. en_GB, not en-GB — this differs from the HTML lang
attribute and is a common quiet error.
og:locale:alternate can list other available translations, repeated once per locale. Only relevant on
genuinely multilingual sites, and its effect is limited.
og:image:alt — a text description of the preview image, for the same reason alt exists on <img>.
Tags that do less than they appear to
og:determiner — the article (“a”, “the”) to use before your title in a generated sentence. Almost
nothing uses it.
og:audio, og:video — real, but only meaningful if you’re publishing media the platform will
embed, and each has its own requirements around formats and secure URLs.
fb:app_id — only relevant if you’re using platform-specific analytics that require it.
article:publisher, article:author as a page ID — legacy of a specific platform’s earlier features.
None hurts. But adding them doesn’t fix a card that isn’t working, and time spent on them is better spent on the image.
A complete, honest head
For an article, everything worth having:
<title>Page title — Example</title>
<meta name="description" content="A sentence for search results.">
<link rel="canonical" href="https://example.com/page/">
<meta property="og:type" content="article">
<meta property="og:url" content="https://example.com/page/">
<meta property="og:title" content="Page title">
<meta property="og:description" content="A sentence for the card.">
<meta property="og:image" content="https://example.com/og/page.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Page title on a plain background.">
<meta property="og:site_name" content="Example">
<meta property="og:locale" content="en_GB">
<meta property="article:published_time" content="2026-07-26T09:00:00Z">
<meta name="twitter:card" content="summary_large_image">
Fourteen lines, and the last one is the only Twitter tag needed because everything else falls back to Open Graph.
Of those, four do nearly all the work — og:title, og:description, og:image, og:url. The rest is
completeness, cheap to include and not worth agonising over.
The property versus name trap
og:* and article:* tags use property. twitter:* and description use name.
<meta property="og:title" content="…">
<meta name="twitter:card" content="…">
Getting it backwards produces a tag that looks right and is invisible to strict parsers. It’s the most common single error in this whole area, and it survives review because the markup looks fine at a glance.