Use 1200×630 pixels, a 1.91:1 ratio, as a JPEG or PNG — under 600 KB if you want WhatsApp too. That single image satisfies Facebook's recommendation, LinkedIn's minimum, X's large card limits, and displays well in Slack, Discord, WhatsApp, Telegram and iMessage. Keep the important content — the title, the logo — away from the outer 5–10 % on each side, because some platforms crop.
Below are the per-platform numbers behind that answer, each from the platform's own documentation where one exists, and a note where none does.
The table
| Platform | Recommended | Minimum for a large card | Max file size | Formats | Source |
|---|---|---|---|---|---|
| 1200×630 (1.91:1) | 600×315; 200×200 absolute minimum | 8 MB | Not listed; JPEG and PNG are safe | Meta | |
| 1.91:1 | 1200×627 | 5 MB | JPG, PNG, GIF | LinkedIn Help | |
| X (Twitter) | 2:1 (summary_large_image) |
300×157; max 4096×4096 | 5 MB | JPG, PNG, WebP, GIF | X cards docs (archived) |
| Slack | Uses og:image / twitter:image |
Not published | Not published | Common web formats | Slack robots |
| Discord | Uses og:image; large with twitter:card = summary_large_image |
Not published | Not published | PNG, GIF, JPEG, WebP, AVIF | Discord docs |
Uses og:image |
At least 300 px wide, ratio up to 4:1 | Under 600 KB | Not listed; JPEG is safe | Meta | |
| Telegram | Uses og:image |
Not published | Not published | JPEG, PNG | No official spec |
Where a platform publishes nothing, the honest answer is "1200×630 works, and smaller files are fetched more reliably". The tightest published limit is WhatsApp's 600 KB — so a compressed JPEG is the one file that fits everywhere.
Facebook (and Messenger, Instagram link stickers)
Meta's image guidelines say it plainly: "Use images that are at least 1200 x 630 pixels for the best display on high resolution devices", and at minimum 600×315 "to display link page posts with larger images". Below that you get a small thumbnail; below 200×200 the image is not used. The file must not exceed 8 MB, and Meta asks you to "keep your images as close to 1.91:1 aspect ratio as possible to display the full image in Feed without any cropping."
Add og:image:width and og:image:height. Meta explains that with them the crawler "can render the image immediately without having to asynchronously download and process it" — otherwise the first share of a new page can appear without an image.
LinkedIn's help page for website owners gives a 5 MB maximum, a minimum of 1200×627 pixels and a recommended 1.91:1 ratio, in JPG, PNG or GIF. Images narrower than 401 pixels appear as a small thumbnail. Note what is missing from the list: WebP. A WebP og:image that works on X can fail on LinkedIn, so do not serve WebP as your share image.
LinkedIn reads og:title, og:image, og:description and og:url. Check a URL with the Post Inspector.
X (Twitter)
For twitter:card set to summary_large_image, X's documentation (the live page has moved behind X's developer portal; this is the archived copy) states images "support an aspect ratio of 2:1 with minimum dimensions of 300x157 or maximum of 4096x4096 pixels", must be under 5 MB, and may be JPG, PNG, WebP or GIF (only the first frame of a GIF). A 1200×630 image is 1.905:1, so X trims a few pixels from the top and bottom — invisible if you keep text away from the edges.
X falls back to the Open Graph property when an X-specific one such as twitter:image is missing (cards markup), but twitter:card is the tag that selects the card type — set <meta name="twitter:card" content="summary_large_image"> explicitly to get the large image.
Slack
Slack's unfurler (Slackbot-LinkExpanding) reads oEmbed, Twitter Card and Open Graph tags, fetches as little of the page as it can, and caches the result "for around 30 minutes", according to Slack's robots page. Slack publishes no image size; 1200×630 displays fully. Slack also does not honour robots.txt for unfurling, so a Disallow rule will not hide your previews there.
Discord
Discord's link preview docs list the tags it reads — og:title, og:description, og:image, the twitter: equivalents and theme-color for the accent bar — and the image formats PNG, GIF, JPEG, WebP and AVIF. Give og:image:width and og:image:height, otherwise Discord downloads the image just to measure it. The page must answer with HTML within 10 seconds, and previews are cached for about 30 minutes. Discord publishes no pixel size; 1200×630 renders without cropping.
WhatsApp, Telegram and iMessage
Only WhatsApp publishes hard numbers; the other two give guidance:
- WhatsApp wants an absolute
og:imageunder 600 KB, at least 300 px wide, with an aspect ratio no wider than 4:1, and the page's<head>within its first 300 KB (Meta). The often-repeated "under 300 KB image" is a misreading of that<head>limit. There is no cache-refresh tool. - Telegram uses
og:imageand caches previews on its servers; @WebpageBot refreshes a URL's preview for new messages. - iMessage builds rich links from the page's Open Graph tags without running JavaScript. Apple's TN3156 asks for images at least 900 px wide and pages under 1 MB.
Safe zone and file size
Because X trims to 2:1 and some apps round corners or overlay a domain label, keep text and logos inside roughly 1080×560 in the centre of a 1200×630 canvas. For file size, aim well under 1 MB: a 1200×630 card with flat colours and text is typically 50–300 KB as PNG or JPEG. Huge files are the most common reason a preview shows on one platform and not on another.
A 2× image (2400×1260) can look slightly crisper on high-density screens, at roughly four times the file size. Either is fine as long as the ratio stays 1.91:1 and the file stays small; if you are near a size limit, use 1×.
A complete, portable set of tags
<meta property="og:title" content="How we cut our image pipeline to 900 ms">
<meta property="og:description" content="A short summary, under about 155 characters.">
<meta property="og:url" content="https://example.com/blog/image-pipeline">
<meta property="og:type" content="article">
<meta property="og:image" content="https://example.com/og/image-pipeline.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Title card: How we cut our image pipeline to 900 ms">
<meta name="twitter:card" content="summary_large_image">
If you generate images rather than design each one, render them at exactly this size: Shareglint's built-in templates are 1200×630, and scale: 1 returns exactly 1200×630 pixels instead of the default 2×. To check what each platform actually picked for a URL, see how to debug og:image not showing.