Open Graph Image Size Guide — og:image Dimensions + URL Unfurl Testing
The recommended og:image size is 1200 × 630 pixels (1.91:1 aspect ratio). That single dimension works across Facebook, Twitter/X, LinkedIn, Slack, Discord, iMessage, WhatsApp, Telegram, and Microsoft Teams — every major platform that reads Open Graph tags to unfurl links.
Get this wrong and your URL unfurl preview image will be cropped, blurred, downgraded to a tiny thumbnail, or skipped entirely. This guide covers every platform's minimum and ideal dimensions, why 1200 × 630 is the safe default, how to set the tag correctly, the common og:image mistakes that break unfurl previews, and how to test your URL unfurl so nothing ships with a broken image.
→ Test your og:image on TryUnfurl
Why og:image Size Matters for URL Unfurling
Every time a URL unfurls on a social network or chat app, the platform fetches your og:image, validates its dimensions, and decides how to render the preview card. Three things can go wrong:
- Too small — the platform falls back to a tiny square thumbnail or skips the image entirely. LinkedIn is the strictest; anything under 1200 × 627 px gets downgraded.
- Wrong aspect ratio — a square or portrait image gets letterboxed, cropped, or forced into a small thumbnail instead of a full-bleed rich card.
- Not accessible — the URL is relative, returns 404 or 403, uses HTTP instead of HTTPS, or lives behind a hotlink allowlist that excludes platform crawlers.
The unfurl preview is the single most visible output of your Open Graph tags. Getting the image right is the difference between a card that earns the click and one that gets scrolled past.
The Correct og:image Dimensions at a Glance
| Platform | Minimum size | Ideal size | Max file size |
|---|---|---|---|
| 200 × 200 px | 1200 × 630 px | 8 MB | |
| Twitter/X | 300 × 157 px | 1200 × 628 px | 5 MB |
| 200 × 200 px | 1200 × 627 px | 5 MB | |
| Slack | 80 × 80 px | 1200 × 630 px | — |
| Discord | 300 × 157 px | 1200 × 630 px | — |
| 300 × 200 px | 1200 × 630 px | — | |
| iMessage | 300 × 157 px | 1200 × 630 px | — |
| Telegram | 200 × 200 px | 1200 × 630 px | ~5 MB |
| Microsoft Teams | 200 × 200 px | 1200 × 630 px | — |
Safe universal recommendation: 1200 × 630 px, JPEG or PNG, under 1 MB.
Why 1200 × 630?
The 1.91:1 aspect ratio was standardised by Facebook's Open Graph specification and adopted by nearly every other platform. At 1200 × 630 px:
- Facebook renders the full image without cropping in link posts.
- Twitter/X uses it for
summary_large_imagecards. - LinkedIn link posts display it at full width (LinkedIn's exact ideal is 1200 × 627, but 630 is close enough).
- Slack and Discord unfurl it without any scaling artefacts.
- WhatsApp, iMessage, Telegram, and Teams all render it cleanly.
If your image is smaller than 600 × 315 px, many platforms will fall back to a small thumbnail or no image at all. Anything under 200 × 200 px is universally ignored.
Platform-Specific Requirements
Facebook / Meta
- Minimum: 200 × 200 px. Anything smaller is silently dropped.
- Anything under 600 × 315 px gets the small thumbnail layout.
- 1200 × 630 px unlocks the full-bleed large card.
- Max file size: 8 MB.
Twitter / X
- Minimum: 300 × 157 px for
summary_large_image. - Ideal: 1200 × 628 px.
twitter:cardmust be set tosummary_large_imageto use the large format.- Max file size: 5 MB.
- Minimum: 200 × 200 px, but realistically you need 1200 × 627 px for the full-width card.
- Anything smaller is downgraded to a tiny thumbnail.
- Max file size: 5 MB.
- LinkedIn ignores Twitter Card tags — Open Graph only.
Slack
- Very forgiving — minimum 80 × 80 px.
- 1200 × 630 px renders as the large unfurl.
- No hard file-size limit, but keep under 1 MB to avoid timeouts.
Discord
- Minimum: 300 × 157 px.
- Angle-bracket suppression (
<URL>) disables the embed entirely. - Supports animated GIFs as
og:imageon some clients, but reliability is mixed.
iMessage
- Minimum: 300 × 157 px.
- iOS crops wide images to square thumbnails in compact thread views; keep the subject centred.
- Must be HTTPS.
- Minimum: 300 × 200 px.
- Max reliable file size: ~1 MB.
- HTTPS only.
Telegram
- Minimum: 200 × 200 px.
- JPEG and PNG; WebP and GIF aren't reliably rendered.
- Keep files under 1 MB.
Microsoft Teams
- Minimum: 200 × 200 px.
- HTTPS required.
- Public URL only (no tenant-internal URLs).
How to Set the og:image Tag Correctly
<meta property="og:image" content="https://example.com/preview.jpg" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:alt" content="Description of your image" />
<meta property="og:image:type" content="image/jpeg" />
Always include og:image:width and og:image:height. Without them, crawlers must download the image to check dimensions — slowing down URL unfurling and occasionally causing the image to be skipped.
Common og:image Mistakes to Avoid
Image is too small
Any image below 200 × 200 px will be ignored by Facebook entirely. Twitter requires at least 300 × 157 px for summary_large_image. LinkedIn downgrades under 1200 × 627 px. Keep above 1200 × 630 px for maximum compatibility.
Wrong aspect ratio
A square image (1:1) works on most platforms but will be letterboxed or cropped on Facebook, LinkedIn, and Twitter. Always use 1.91:1 for URL unfurl previews.
Image uses a relative URL
The og:image value must be an absolute URL including the protocol:
<!-- Wrong -->
<meta property="og:image" content="/images/preview.jpg" />
<!-- Correct -->
<meta property="og:image" content="https://example.com/images/preview.jpg" />
Image is behind a login or returns a redirect
Crawlers cannot access authenticated content. Your og:image URL must be publicly accessible with a direct 200 response.
Hotlink protection blocking the crawler
If your image host only serves images with a matching Referer, platform crawlers get blocked. Allowlist the platform user-agents or remove hotlink protection for OG image paths.
CORS headers block the image
Some CDNs block cross-origin image loads. The og:image URL needs to allow public reads — no special headers required.
Missing og:image:width / og:image:height
Without explicit dimensions, platform crawlers that time out before the image downloads will skip it.
Signed-URL og:image that expires
If your image URL is a signed CDN link (e.g. an S3 presigned URL) with a short expiry, the cached copy will start returning 403 later. Use permanent image URLs in OG tags.
Critical content at the edges of the image
Mobile clients (especially iMessage and WhatsApp) crop images more aggressively. Keep the brand logo and headline in the central 800 × 400 px so the thumbnail still makes sense.
How to Test Your URL Unfurl Preview
Testing how your og:image actually renders across every major platform takes under a minute.
Step 1 — Run the URL through TryUnfurl
Paste the URL into TryUnfurl. It fetches the page fresh, pulls your og:image, and renders the URL unfurl preview card for Facebook, LinkedIn, Twitter/X, Slack, Discord, iMessage, WhatsApp, Teams, and Telegram side by side. You'll see the image exactly as each platform will render it — including the crops, downgrades, and tiny-thumbnail fallbacks that catch teams out.
Step 2 — Confirm dimensions and file size
TryUnfurl shows the detected image dimensions. Confirm they match the og:image:width and og:image:height you declared. Open the image URL directly to check the file size — aim for under 1 MB.
Step 3 — Open the image URL in an incognito window
If it doesn't load there — no cookies, no browser extensions — it won't load for platform crawlers either.
Step 4 — Run the platform-specific debuggers
Use the official tools to validate and force cache refresh:
- Facebook: Sharing Debugger — also clears the cache
- Twitter/X: Card Validator
- LinkedIn: Post Inspector
Step 5 — Bulk-test for campaigns
If you're auditing more than a handful of URLs, the bulk URL unfurl checker runs up to 100 URLs in one pass and flags every image that's missing, too small, or unreachable. Export results as CSV for the dev team.
Tools for Testing URL Unfurl Results
| Tool | Use case | Login required |
|---|---|---|
| TryUnfurl | Multi-platform URL unfurl preview + raw metadata | No |
| Bulk URL Unfurl Checker | Audit 100 URLs at once | No |
| Facebook Sharing Debugger | Force Facebook cache refresh | Yes |
| Twitter Card Validator | Force X cache refresh | Yes |
| LinkedIn Post Inspector | Force LinkedIn cache refresh | Yes |
Start with TryUnfurl to confirm the metadata is correct, then use the platform-specific tools to force caches to pick up your updated og:image.
Frequently Asked Questions
What is the best og:image size?
1200 × 630 pixels is the universally recommended size. It satisfies Facebook, Twitter/X, LinkedIn, Slack, Discord, and every messaging app without any cropping or scaling issues.
Does og:image size affect SEO?
Indirectly, yes. Pages without valid og:images get fewer social shares, which reduces traffic and backlinks. Google also reads og:image for rich results in some contexts. The image itself is not a direct ranking factor.
Can og:image be a PNG?
Yes. Both JPEG and PNG are widely supported. JPEG is preferred for photos due to smaller file sizes. PNG works well for logos and graphics with transparency — though some platforms fill transparent backgrounds with white or black.
What happens if og:image is missing?
Platforms will attempt to find an image on the page automatically. This usually results in a random small image being used, or no image at all. Always set og:image explicitly.
Can I use a WebP og:image?
Support varies. Facebook and Twitter support WebP, but some older clients and bots do not. For maximum URL unfurl compatibility, use JPEG or PNG.
How do I test URL unfurl after changing the og:image?
Paste the URL into TryUnfurl. It fetches live with no cache, so you see the new image immediately. For platform-specific cache-busting, run the URL through the Facebook Sharing Debugger, X Card Validator, and LinkedIn Post Inspector.
How do I update the og:image after changing it?
Platforms cache previews. After updating your image, use the platform debuggers (or TryUnfurl to verify new tags) to force a cache refresh. See how to refresh a link preview for full instructions.