OG Image Dimensions 2026: Pixel-Perfect Specs for Every Platform That Still Matters

May 7, 2026 · 11 min read · By TinyTools

Every six months somebody announces that link previews are dead, and every six months link previews quietly drive another wave of traffic to whoever has their dimensions dialed in. In 2026, the platforms that consume your og:image have grown teeth: iOS 19 silently downgrades cards that miss the aspect ratio band, LinkedIn caches a broken render for seven full days, and Slack now scales your card down to a 360-pixel thumbnail that demands its own design rules.

This is the practical reference. One canonical card that survives every platform that still matters, the safe zone every cropper respects, the file-size ceilings nobody publishes, and the new failure modes that did not exist in the old "use 1200×630 and ship it" advice.

The TL;DR for people who skim

Ship one image at 1200×630 px, under 300 KB, with everything important inside a 1080×540 centered safe zone. Reference it absolutely from og:image, declare width and height tags, set twitter:card to summary_large_image, and you survive every cropper in the wild today.

That single card will render correctly in feeds on X, LinkedIn, Facebook, WhatsApp, iMessage, Discord, Slack, Microsoft Teams, Notion, Google Discover, and the Threads embed. The rest of this article is the why, the gotchas that have changed in 2026, and the few cases where you genuinely do need a second image.

The canonical card: 1200 by 630

Of all the dimensions that have churned in the last five years, 1200×630 has not. It is what Facebook seeded the Open Graph protocol with in 2010, what X switched to when they killed legacy summary cards, and what every modern preview pipeline (LinkedIn Post Inspector, the Slack unfurl service, iMessage Link Preview) measures itself against.

The 1.91:1 aspect ratio is what makes it work. It is wide enough that landscape photography looks intentional and square enough that headlines do not get cropped to nonsense at thumbnail size. It is also the exact ratio Google Discover crops to before serving on mobile, which means Discover thumbnails get to use the full image rather than a center-cropped letterbox.

SpecValueReason
Width1200 pxSharp on retina; not so big that file size balloons.
Height630 pxLocks the 1.91:1 ratio every platform expects.
Aspect ratio1.91:1Inside the iOS 19 acceptable band of 1.5:1 to 2.0:1.
File formatPNG or JPGWebP works on most platforms but still fails in older email clients.
File size< 300 KB target, 1 MB hard capSlack and Discord throttle large fetches; iOS 19 drops > 5 MB silently.
Color spacesRGBP3 photos look oversaturated on Android; sRGB renders identically everywhere.

The safe zone every platform respects

The thing nobody warns you about is that almost every preview service crops your image at least slightly. The amount differs — LinkedIn is forgiving, Slack is brutal — but if you keep all your important content inside a centered 1080×540 rectangle, you survive every crop in the wild today.

Practical translation: if you are designing in Figma, drop a 1080×540 frame in the center of a 1200×630 frame and treat the gap as a margin you cannot cross. Logos, wordmarks, headlines, and the crucial third of any product screenshot all live inside the safe zone. Decorative gradients, abstract shapes, and patterns can extend to the edges — the cropper takes them away on small platforms but their absence does not break the card.

Two specific rules that catch teams every time:

Platform-by-platform: how the canonical card actually renders

X (formerly Twitter)

X requires twitter:card to be explicitly set as of late 2025. Without it, your card renders as the giant gray placeholder, not summary_large_image. The image is fetched at 1200×630 and displayed at 600×314 in the home timeline, with no further crop. Both PNG and JPG work; animated GIFs render as static first-frame thumbnails.

LinkedIn

LinkedIn renders the canonical card at 552×289 in feed and uses the full 1200×630 in expanded post view. The big change in 2026 is the seven-day cache: once LinkedIn fetches a broken card, every subsequent share for a week shows the broken render. Run the URL through Post Inspector and click Re-Scrape before you announce, never after. There is no second chance for a launch tweet.

Facebook and WhatsApp

Both run on Meta's shared scraping infrastructure (the facebookexternalhit/1.1 user agent). The Sharing Debugger's "Scrape Again" button refreshes both at once. The most common failure here is a CDN with bot fight mode on, which silently 403s the scraper and produces an "og:image could not be downloaded" error. Allowlist facebookexternalhit at the edge.

Slack

Slack scales 1200×630 down to roughly 360×189 in the desktop unfurl, which is where the headline-readability test bites hardest. The unfurl service caches per-channel and respects Cache-Control headers; if you ship a fix, the unfurl in the channel you tested in may take up to 24 hours to refresh. Workspace-level admins have no purge button. The workaround is to test in a private channel, not the announce channel.

iMessage and iOS 19

iOS 19 introduced silent OG image downgrades. If your card fails any of the following checks, the message renders as a plain blue link bubble with zero error reporting:

The only test for this is a real iMessage send. There is no public validator. Send the URL from your Mac to your phone before any launch.

Discord

Discord respects 1200×630 but renders embeds at a fixed 400×210 in most channels. The image is cropped from the center, so off-center compositions get clipped. Discord also fetches once per URL per server and caches for ~24 hours, so test on a personal server before sharing in your community.

Google Discover and Search

Discover crops to 1.91:1 on Android and 1:1 on iOS for the carousel format. The 1080×540 safe zone covers both. To stay eligible for Discover at all, the same image URL must be referenced in your Article JSON-LD's image field. Missing JSON-LD silently disqualifies you from Discover thumbnails even if the OG tags are perfect.

The exceptions: when you do need a second image

One canonical card covers ~95% of cases. The remaining 5% is worth knowing about so you do not get surprised.

Square cards for X mobile DMs

X DMs on mobile use the legacy summary card layout, which is 240×240 square. If a meaningful portion of your traffic comes from people sharing your link in DMs (often the case for B2B SaaS in early traction), specifying a separate twitter:image:src at 1024×1024 with the wordmark dead-center is worth the extra 30 minutes.

Vertical cards for Pinterest

Pinterest does not respect the 1.91:1 OG image and instead pulls a 600×900 vertical preview from the page body. If Pinterest is a meaningful traffic channel, embed a 1000×1500 vertical image somewhere in the article body and Pinterest will use that.

Animated cards for Discord and Slack

Slack and Discord both render APNG and animated WebP. Email clients and X do not. If you ship an animated card, also ship a static fallback as og:image and reference the animated version as a separate og:video tag — that path renders animated where supported and still gives you a clean static preview everywhere else.

The minimum-viable head section

Here is the smallest snippet that satisfies every modern preview service. Anything more is decoration; anything less leaves CTR on the table.

<meta property="og:title" content="Your post title in 60 chars or fewer">
<meta property="og:description" content="Your one-line summary in 155 chars or fewer.">
<meta property="og:image" content="https://example.com/post-card.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="One descriptive sentence about the card.">
<meta property="og:url" content="https://example.com/your-post/">
<meta property="og:type" content="article">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://example.com/post-card.png">

The explicit width and height tags are technically optional in the OG protocol. They are functionally required in 2026 because Slack uses them to avoid layout shift on mobile and Google's structured data testing tool flags pages that omit them.

The file-size ceilings nobody publishes

Every preview service has a fetch timeout and a maximum allowed payload. Most documentation hand-waves these; actual measured limits as of 2026:

ServiceSoft limitHard limitFailure mode
iMessage (iOS 19)1 MB5 MBSilent downgrade to plain link
Slack2 MB10 MBTruncated fetch, broken render
Discord1 MB8 MBEmbed without image
X5 MB5 MBGeneric placeholder card
LinkedIn5 MB5 MBRe-scrape required, cached for 7 days
Google Discover1 MB5 MBSilent omission from carousel

The right target is well under 300 KB. A clean 1200×630 PNG with two colors, one logo, and a headline runs about 40–80 KB after Squoosh at quality 75. JPGs of complex photography land at 150–250 KB. If you are over 500 KB you have either an oversize image or a CMS that is not optimizing on save — either is worth fixing today.

Generate a validator-ready 1200×630 card in 30 seconds

Our free OG Image Generator outputs a PNG that hits every spec on this page: 1200×630, sRGB, under 300 KB, with the safe zone respected. No signup, no watermark, no upload to a third-party server.

Try it free →

The one-image trap: testing in only one place

The most expensive bug in OG dimensions is shipping a card that renders perfectly in the one place you tested, breaks silently in three places you did not, and you find out two weeks later when a customer screenshots a broken iMessage to your support inbox. The industry-default validators (Twitter Card Validator, LinkedIn Post Inspector, Facebook Sharing Debugger) cover three of the renderers; they do not cover Slack, iMessage, Discord, or WhatsApp.

The minimum testing matrix in 2026 is five places, in this order, before any launch:

  1. X Card Validator — verify summary_large_image renders correctly
  2. LinkedIn Post Inspector — Re-Scrape before announcing
  3. Facebook Sharing Debugger — clears WhatsApp by side effect
  4. Slack — manual paste in a private channel, squint test from across the room
  5. iMessage — send the URL to yourself from a Mac to a phone

Eight to twelve minutes once you have done it a few times. Cheaper than a broken launch announcement.

Useful adjacent tools and references

While we are talking dimensions, three more pieces of the social-card stack that we get questions about:

The 30-second decision tree

If you remember nothing else from this article:

  1. Ship 1200×630 PNG, under 300 KB, sRGB. One image, one canonical card.
  2. Keep everything important inside a 1080×540 centered safe zone. Decorative bleed is fine; logos and headlines are not.
  3. Set og:image:width, og:image:height, and twitter:card explicitly. Optional in spec, required in practice.
  4. Test in five places: X, LinkedIn (Re-Scrape), Facebook, Slack, iMessage. Eight to twelve minutes. Worth it.
  5. Reference the same image URL in your Article JSON-LD. No JSON-LD, no Discover thumbnail.

Do those five things and you have stopped leaving CTR on the table for the cost of one well-designed image.

Ship a card that survives every platform — in 30 seconds

The TinyTools OG Image Generator outputs a 1200×630 PNG with the safe zone enforced, file size under 300 KB, and sRGB color. Validator-ready by default.

Generate a card →