Aarunya AppsAarunya Apps
๐Ÿ” SEO9 min readยทJuly 29, 2026

The Complete OpenGraph Tag Checklist for Developers

Open Graph tags control how your links appear when shared on LinkedIn, X (Twitter), Slack, Discord, WhatsApp, iMessage, and Facebook. This is the complete reference โ€” every tag, every platform quirk, and a copy-paste Next.js template.

The required tags (every page)

<meta property="og:title" content="Your Page Title โ€” Under 70 characters" />
<meta property="og:description" content="Your description โ€” 150โ€“160 characters for best display." />
<meta property="og:image" content="https://yourdomain.com/og-image.png" />
<meta property="og:url" content="https://yourdomain.com/this-exact-page" />
<meta property="og:type" content="website" />  <!-- use "article" for blog posts -->

Image requirements by platform

PlatformRecommended sizeMinimumNotes
LinkedIn1200ร—628px400ร—209pxCached ~7 days. Use Post Inspector to refresh.
X (Twitter)1200ร—628px120ร—120pxAdd twitter:card = summary_large_image
Slack / Discord1200ร—628pxNone statedUnfurls in real-time. No cache issues.
Facebook1200ร—630px200ร—200pxUse fb:app_id for analytics.
WhatsApp1200ร—628px300ร—200pxRespects og:image. No auth required.
iMessage1200ร—628pxNone statedUses og:image or first image on page.

X (Twitter)-specific tags

<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@yourhandle" />
<meta name="twitter:creator" content="@authorhandle" />
<!-- title, description, image fall back to og: tags if these are missing -->

Article-specific tags

<meta property="og:type" content="article" />
<meta property="article:published_time" content="2026-07-29T09:00:00+00:00" />
<meta property="article:modified_time" content="2026-07-29T09:00:00+00:00" />
<meta property="article:author" content="https://yoursite.com/about" />
<meta property="article:tag" content="developer tools" />

Next.js App Router metadata template

// app/blog/[slug]/page.tsx
export async function generateMetadata({ params }): Promise<Metadata> {
  const post = getPostBySlug(params.slug)
  return {
    title: post.title,
    description: post.description,
    alternates: { canonical: `https://yoursite.com/blog/${post.slug}` },
    openGraph: {
      title: post.title,
      description: post.description,
      url: `https://yoursite.com/blog/${post.slug}`,
      type: "article",
      publishedTime: post.date,
      images: [{ url: `https://yoursite.com/og/${post.slug}.png`, width: 1200, height: 628 }],
    },
    twitter: {
      card: "summary_large_image",
      title: post.title,
      description: post.description,
    },
  }
}

Common mistakes checklist

  • โœ—Relative image URL (og:image must be absolute โ€” https://...)
  • โœ—Image hosted behind login/auth (bots fetch anonymously)
  • โœ—Same og:title as <title> tag โ€” duplicate but acceptable; just not required to match exactly
  • โœ—og:description over 200 characters โ€” most platforms truncate at 150โ€“160
  • โœ—Missing og:url โ€” breaks deduplication when shared multiple times
  • โœ—Not refreshing LinkedIn cache after fixing (use linkedin.com/post-inspector)
  • โœ“Test before publishing with the OG Preview Tester
  • โœ“Use opengraph-image.tsx in Next.js for auto-generated OG images per page

Before publishing, preview exactly how each of your pages will appear on LinkedIn, X, Slack, and Discord with the OpenGraph Preview Tester โ€” paste a URL or your raw HTML, see all 5 platform cards instantly.

Try the related tool

OpenGraph Preview Tester โ€” free, runs 100% in your browser.

Open OpenGraph Preview Tester โ†’

Enjoyed this? Get notified when Pro launches.