Machine-Readable Infrastructure

Open Graph Tags

Last reviewed:

Add to the <head> of every page you want to share with a rich link preview. OG tags are not structured data and do not affect search ranking directly — their job is social rendering and messaging-app previews. og:url should always match the canonical URL; mismatches cause deduplication failures and duplicate card submissions on some platforms.

Baseline

<!-- ── REQUIRED for a basic OG card ─────────────────────────────────────── -->
<meta property="og:title" content="REQUIRED -- page title, max ~60 characters for display">
<meta property="og:description" content="REQUIRED -- 1-2 sentences, max ~155 characters">
<meta property="og:image" content="REQUIRED -- absolute URL; 1200x630px recommended minimum">
<meta property="og:url" content="REQUIRED -- canonical URL of this page">
<meta property="og:type" content="REQUIRED -- website | article | product">

<!-- ── RECOMMENDED ──────────────────────────────────────────────────────── -->
<meta property="og:site_name" content="RECOMMENDED -- your site or publication name">
<meta property="og:locale" content="RECOMMENDED -- e.g. en_US">

<!-- ── IMAGE DIMENSIONS (recommended for consistent rendering) ──────────── -->
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="RECOMMENDED -- alt text for the OG image">

<!-- ── TWITTER / X CARD (add alongside OG tags) ─────────────────────────── -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="OPTIONAL -- overrides og:title on X">
<meta name="twitter:description" content="OPTIONAL -- overrides og:description on X">
<meta name="twitter:image" content="OPTIONAL -- overrides og:image on X">
<meta name="twitter:site" content="OPTIONAL -- @yourhandle">

Article variant (og:type=article)

Use on editorial, playbook, briefing, and news pages. og:type=article unlocks the article: namespace — silently ignored on website-type pages.

<meta property="og:type" content="article">
<meta property="og:title" content="REQUIRED -- article headline, max ~60 characters">
<meta property="og:description" content="REQUIRED -- 1-2 sentences, max ~155 characters">
<meta property="og:image" content="REQUIRED -- absolute URL; 1200x630px minimum">
<meta property="og:url" content="REQUIRED -- canonical URL of this article">
<meta property="og:site_name" content="RECOMMENDED -- publication name">

<!-- article: namespace -- only parsed when og:type is article -->
<meta property="article:published_time" content="REQUIRED -- ISO 8601, e.g. 2026-03-28T09:00:00+00:00">
<meta property="article:modified_time" content="RECOMMENDED -- ISO 8601; update on each substantive edit">
<meta property="article:author" content="OPTIONAL -- absolute URL of author bio page">
<meta property="article:section" content="OPTIONAL -- primary section, e.g. Technology">
<meta property="article:tag" content="OPTIONAL -- repeat this tag for each keyword; max ~10">

<!-- Twitter/X card -- article pages -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="RECOMMENDED -- article headline">
<meta name="twitter:image" content="RECOMMENDED -- same absolute URL as og:image">
<meta name="twitter:creator" content="OPTIONAL -- @authorhandle">

Field notes

  • Images below 600px wide render as small thumbnails or are ignored — use 1200×630px minimum.
  • og:url must be the canonical URL — mismatches cause deduplication failures and duplicate card submissions on some platforms.
  • Facebook and LinkedIn cache OG tags aggressively — use their card debugger tools after publishing to force a cache refresh.
  • Twitter/X falls back to og: values when twitter: tags are absent, but always declare twitter:card explicitly — fallback behavior for card type is unreliable.
  • Repeat <meta property="article:tag"> once per keyword — parsers expect separate elements, not a comma-separated string.
  • article:modified_time is consumed by Facebook, LinkedIn, and Slack unfurling; a stale value keeps showing the original publication date in cards even after content updates.