Share images
that survive every crop.
Every platform claims to want a different share image. In practice one file at 1200x630 covers almost all of them, because they all crop from the centre. What differs is how much they crop, and that is what decides where your text can go.
The one size to make
Make 1200 x 630. It is the size Facebook documented years ago, it is what X reads for summary_large_image, and it is what LinkedIn, Slack, Discord and iMessage all accept without complaint. Every other recommendation you will find is a variation on it.
The reason one file works is that no platform scales your image to fit its slot. They crop it, and they crop from the centre. So the question is never "what size" but "how much of the edge am I willing to lose".
What each platform actually does
| Platform | Displayed ratio | Effect on a 1200 x 630 |
|---|---|---|
| X (Twitter) | 2:1 | Trims about 45px from top and bottom |
| 1.91:1 | Shows it whole | |
| 1.91:1 | Shows it whole | |
| Slack | Varies | Letterboxes, no crop |
| iMessage | Near square | Crops hard to the centre |
| Near square | Crops hard to the centre |
iMessage and WhatsApp are the aggressive ones. Both pull something close to a square out of the middle, so a headline that runs the full width of a 1200px canvas will lose its first and last words in a text message preview.
The safe area
Keep anything that must be readable inside the centre 1000 x 520. That leaves 100px of margin left and right and 55px top and bottom, which is enough to survive the 2:1 trim and most of the square crop.
Logos are the usual casualty. A mark tucked into the bottom-right corner is exactly what a square crop removes. If the logo matters, put it near the centre or accept that it is decoration for the platforms that show the full frame.
Do not put text in the outer 100px on any side. It reads fine in your design tool and disappears in a group chat.
Text size, and why it is bigger than you think
A share card renders at roughly 500px wide in a timeline. That is a 2.4x reduction from your 1200px canvas. Type set at 40px in the file lands at about 17px on screen, which is body-copy size, not headline size.
Set your headline at 60px or more on the 1200px canvas. Six to eight words is the practical ceiling. If it does not fit in eight words it is a subtitle, not a share card.
File format and weight
PNG for anything with flat colour, text or a logo. JPEG only if the card is dominated by a photograph, and then at quality 80 or so. Keep the file under 1 MB; several scrapers give up above that and fall back to no image at all, which is worse than a plain card.
Avoid WebP and AVIF here. Support in link scrapers lags well behind support in browsers, and a card that fails to render is invisible.
The tags that make it work
Four tags do the job. og:image with an absolute URL, og:image:width and og:image:height so the scraper can lay out the card before it downloads the file, and twitter:card set to summary_large_image. Without that last one X renders a small square thumbnail instead of the wide card.
The URL must be absolute and publicly reachable. A relative path or a URL behind auth produces a card with no image, and most scrapers cache that failure for hours.
Common mistakes
- Using the site logo as the share image. It crops to nothing and says nothing.
- Text running edge to edge, which the square crops eat.
- A relative
og:imageURL. Scrapers do not resolve it. - Forgetting
twitter:card, so X shows a thumbnail. - Changing the image without changing its filename. Caches hold the old one for a long time.