Link Previews: The OG Image Size That Works Everywhere
One image at 1200 × 630 covers every platform that builds a link card. The safe zone for text, the file size ceilings, and why your preview shows the old picture.
Updated September 1, 20267 min read
When a link is pasted into a chat, a feed or a message, the platform fetches the page and builds a preview card from a handful of meta tags. Get those right and your link arrives as a headline, a description and a picture. Get them wrong and it arrives as a bare blue URL, which in a feed of image cards is close to invisible. The whole thing rests on one image and three tags.
One size covers everything
The useful news is that you do not need a different image per platform. 1200 × 630 pixels — an aspect ratio of about 1.91:1 — is what Facebook settled on, and it is what X, LinkedIn, Slack, Discord, WhatsApp, iMessage, Signal and nearly everything else that builds a link card will accept and display well.
The 1200 pixel width is not arbitrary. Link cards typically render around 600 pixels wide in a feed, so a 1200 pixel source gives exactly the double density that high-resolution screens need to look sharp. Supplying a 600 pixel image saves a trivial amount of bandwidth and looks visibly soft on every modern phone.
| Platform | Displays | Notes |
|---|---|---|
| 1.91:1 | The origin of the 1200 × 630 convention | |
| X, large card | About 2:1 | Crops the top and bottom slightly from 1.91:1 |
| 1.91:1 | Uses the same Open Graph tags | |
| Slack, Discord | 1.91:1 | Renders smaller, so keep text large |
| WhatsApp, iMessage | Square-ish thumbnail | Crops hard to the centre |
| Prefers 2:3 vertical | The one genuine exception |
The tags that make it work
Four Open Graph tags do almost all the work, and X reads the same ones unless you override them. Everything else is optional refinement.
- `og:image` — an absolute URL, including the protocol and domain. A relative path is the single most common reason a preview shows no image at all.
- `og:title` — the headline on the card. Around 60 characters before truncation, and it need not be identical to your page title.
- `og:description` — one or two sentences, roughly 150 to 160 characters. Platforms truncate at different points, so front-load the meaning.
- `og:url` — the canonical URL. This stops the same page shared with different tracking parameters from being cached as several separate previews.
- `twitter:card` set to
summary_large_image— without it, X may render a small square thumbnail beside the text instead of the full-width card.
Two details that account for a lot of broken previews. The image URL must be publicly reachable without a login, because the platform's crawler fetches it as an anonymous visitor — an image behind authentication or on a staging server with basic auth simply fails. And the page itself must be reachable by the same crawler, which is why previews frequently work in a browser and fail in a chat app.
File size and format
Card images have ceilings, and exceeding them means the preview silently falls back to no image rather than showing an error. Keep an OG image under 1 MB as a working target — the hard maximum is around 8 MB, and X's own limit for card images is 5 MB with a minimum of 300 × 157 pixels and a maximum of 4096 × 4096.
| Content | Format | Typical size at 1200 × 630 |
|---|---|---|
| Photograph or gradient | JPEG at quality 80 | 80–200 KB |
| Text, logo, flat colour | PNG | 40–150 KB |
| Either, where supported | WebP | 30–50% smaller |
| Anything animated | Do not | Cards show a still frame anyway |
| Transparency | Avoid | Renders on an unpredictable background |
WebP is worth a caution. Most platforms handle it now, but a handful of older link unfurlers do not, and the failure mode is a missing image rather than a fallback. If a link matters commercially, JPEG or PNG remains the safe choice; compressing a JPEG properly gets you most of the saving anyway. Transparency is the other trap — a transparent PNG will be composited onto whatever background the platform uses, which in dark mode can render dark text invisible.
Start from the poster maker's 1200 × 630 Facebook Post size and design a card that reads well at thumbnail size — on your device, never uploaded.
Design a preview imageDesigning a card that reads at thumbnail size
A link preview is rarely seen at full size. In Slack it is a few hundred pixels wide; on a phone it competes with everything else in the feed. Designs that work on a monitor routinely fail at that scale, and the failures are consistent enough to be avoidable.
- Six to eight words maximum. A card is a poster, not a paragraph. If the headline needs three lines at 1200 pixels wide, it is unreadable at 400.
- Set type far larger than feels right. 60 to 90 pixels for a headline on a 1200 pixel canvas. Anything under about 40 pixels vanishes.
- High contrast, always. Text over a photograph needs a scrim or a solid panel behind it; light grey on white disappears entirely at small sizes.
- Do not repeat the headline. On Facebook, LinkedIn and Slack the card already shows your
og:titleas text beneath the image (X shows at most a small headline). Putting the same words in the picture wastes the space — use it for a logo, a category or a single visual idea. - Test it small. Shrink the design to 400 pixels wide and look at it. That is closer to how most people will see it than the canvas you designed on.
- Keep a template. Once a layout works, reuse it with different text. Recognisable cards are worth more than individually clever ones.
When the preview shows the wrong thing
You fix the image, share the link, and the old picture appears anyway. This is caching, not a mistake in your tags. Every platform stores the preview it built the first time anyone shared that URL, sometimes for weeks, and it will not refetch simply because the page changed.
Confirm the tags are actually live
View the page source of the published URL — not your local copy — and check that og:image is present and absolute. A great many of these problems are a build that did not deploy.
Use the sharing debuggers
Facebook's Sharing Debugger and LinkedIn's Post Inspector refetch a URL and show what they found; running one is usually enough to clear that platform's cache immediately. X has no working equivalent — preview the link in the post composer, or append a query parameter to force a fresh fetch.
Change the image filename when you update it
Some caches key on the image URL rather than the page. Publishing card-v2.jpg instead of overwriting card.jpg sidesteps the problem entirely.
Check the crawler can reach the image
Open the image URL in a private browsing window with no session. If it needs a login, or the server blocks unknown user agents, the crawler sees nothing.
Be patient with chat apps
WhatsApp, iMessage and Signal have no public debugger and cache aggressively. A new URL — even with a query parameter appended — is often the only way to force a fresh preview.
A practical note on making the images: card design is the kind of small, repeated task that people hand to an online generator without much thought, and those generators upload whatever you feed them — often including unreleased product screenshots and pre-announcement headlines. The design and image tools here — the poster maker, resizer and compressor — run entirely on your device, so a card for something embargoed is built and exported with nothing transmitted.
Frequently asked questions
What size should an OG image be?
1200 × 630 pixels, an aspect ratio of about 1.91:1. That single size is displayed well by Facebook, X, LinkedIn, Slack, Discord and the major chat apps, and the 1200 pixel width gives the double pixel density that high-resolution screens need for a card rendered around 600 pixels wide.
Why is my link preview not showing an image?
Most often because `og:image` uses a relative path instead of an absolute URL with the domain, or because the image is not publicly reachable — behind a login, on a staging server, or blocked for unknown user agents. The other common cause is a cached preview from before you added the tag.
Do I need separate images for Twitter and Facebook?
No. X reads the same Open Graph tags, so one 1200 × 630 image covers both — just add `twitter:card` set to `summary_large_image` so X renders the full-width card rather than a small thumbnail. Pinterest is the only mainstream exception, preferring a vertical 2:3 image.
How do I refresh a cached link preview?
Run the URL through Facebook's Sharing Debugger or LinkedIn's Post Inspector, which refetch the page and clear that platform's cache. X no longer offers a debugger, and chat apps never had one; for those, publishing the image under a new filename or sharing a URL with an added query parameter is usually the only reliable option.