๐ 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
| Platform | Recommended size | Minimum | Notes |
|---|---|---|---|
| 1200ร628px | 400ร209px | Cached ~7 days. Use Post Inspector to refresh. | |
| X (Twitter) | 1200ร628px | 120ร120px | Add twitter:card = summary_large_image |
| Slack / Discord | 1200ร628px | None stated | Unfurls in real-time. No cache issues. |
| 1200ร630px | 200ร200px | Use fb:app_id for analytics. | |
| 1200ร628px | 300ร200px | Respects og:image. No auth required. | |
| iMessage | 1200ร628px | None stated | Uses 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.
