You spent an hour designing a beautiful 1200×630 OG image. You ship the post. Five minutes later a teammate pastes the link into Slack and the preview is a stretched, blurry placeholder with the wrong title. By the time you fix it, three of the most engaged-with shares of your launch have already gone out with the broken card — and LinkedIn has it cached for the next seven days.
This is the most common preventable launch failure I see. Not because OG images are hard to make, but because almost nobody tests them across all the platforms that actually render the link. Twitter's validator passes. Everyone assumes the rest will too. They don't.
This is the workflow I run before every blog post and product launch goes live. Five tools, ten minutes total, catches roughly 95% of the issues that would otherwise embarrass you in front of a few thousand readers.
Three things changed in the last 18 months that turned link-preview testing from a nice-to-have into a hard requirement:
summary card type. Every link is now summary_large_image by default. Forget the meta tag and your card composes from the title alone with a giant gray placeholder.The cost of a broken preview is also higher than it used to be. Buffer's 2024 social engagement study found that posts with rich previews drove roughly 2.3× the click-through of posts with text-only or broken previews on the same content. Spending ten minutes to verify your card before you ship is the cheapest CRO intervention available to you.
Run these five validators in this order. The order matters because the first three are official platform tools that also force a fresh fetch — so you fix issues once and the cache invalidates everywhere it counts.
The X Card Validator is the canonical first stop. Paste your URL, hit Preview Card. You're checking three things:
summary, your twitter:card meta tag is missing or wrong.The validator was briefly broken between October 2024 and January 2025, which led to a lot of "the validator says it works" stories from teams whose posts shipped with broken cards anyway. As of writing, it's reliable again. But always cross-check with step 4 below.
The LinkedIn Post Inspector is the most important tool on this list because of LinkedIn's 7-day cache. Paste your URL, click Inspect. The preview shown is exactly what every share will render for the next week unless you re-inspect.
What to verify:
If the preview shows a previous version, click Re-Scrape. This is what forces the cache to refresh. Do this before you announce, not after. Once a broken card goes out to 50 connections, it's locked in until the cache expires.
Facebook's Sharing Debugger doubles as a WhatsApp validator (Meta uses the same scraping infrastructure for both). Paste the URL, hit Debug. Then click Scrape Again — this is the step everyone forgets, and it's what actually invalidates the Meta cache.
The debugger surfaces errors that the friendlier validators hide:
facebookexternalhit/1.1 in your firewall.Neither Slack nor Discord publishes a validator. The way to test is to paste the URL into a private channel or DM and look at it. This is the test most teams skip and it's where the highest-impact bugs hide.
Slack scales your 1200 × 630 image down to roughly 360px wide on desktop and 320px wide on mobile. Anything you can't read at that size is invisible. Open a quiet channel, paste your URL, and squint at the preview from across the room. If the headline is unreadable, your on-image text is too small — see our OG image best practices guide for the 30-character / 64–80px headline rule.
Discord crops more aggressively than Slack and renders the image in a slightly cooler color profile. If your design uses a near-black background, it may render as deep purple on Discord. Test with a brand color, not a theoretical hex.
Both platforms cache for about 30 minutes per channel, so if you fix something and re-paste, switch to a different test channel rather than the same one.
This is the one that bites everyone. Send the URL to yourself in iMessage — to your own phone number from your Mac, or copy/paste in a one-person group chat. iOS 19 evaluates the image and decides whether to render a rich card or a plain link bubble. The criteria, based on testing across roughly 80 production blog posts:
If iMessage shows a plain blue link bubble instead of a rich card, you've hit one of these. The most common offender is file size — every 1200 × 630 PNG should be under 300 KB. Use Squoosh or run an mozjpeg pass before publishing.
This is the literal checklist I keep pinned in Notion and run before every post hits the live URL:
| # | Check | Tool | Pass criteria |
|---|---|---|---|
| 1 | Card renders as large image, not summary | X Card Validator | summary_large_image, no crop |
| 2 | LinkedIn cache refreshed | Post Inspector | Re-Scrape clicked, current image shown |
| 3 | Meta image downloads + correct size | FB Sharing Debugger | No errors, ≥1200×630 |
| 4 | Headline readable at thumbnail size | Paste into Slack channel | Eye test from 6 feet away |
| 5 | iMessage shows rich preview | Send URL to self | Card not plain link bubble |
| 6 | File size sane | DevTools or curl -I | < 300 KB ideal, < 5 MB hard limit |
| 7 | Meta tags well-formed | View source / Lighthouse | og:title, og:image, og:image:width, og:image:height all set |
The whole loop takes 8–12 minutes once you're used to it. Doing it before announcement saves you from the much worse alternative: discovering a bug at 9:01 a.m. when the launch tweet has already gone out and the LinkedIn post is locked in for a week.
Eight templates, every one set to 1200 × 630 with safe-zone padding baked in. Compresses to under 300 KB on export so iMessage and Slack render perfectly. No signup, no watermark, no email.
Try it free →About 90% of the broken-preview tickets I see come down to four mistakes. Each one has a specific fix:
Add this meta tag explicitly: <meta name="twitter:card" content="summary_large_image">. As of late 2025 this is mandatory — X no longer infers it from og:image alone for new domains.
The fix is not deleting and re-sharing. LinkedIn's cache is keyed on URL. Either (a) hit the Post Inspector and click Re-Scrape, or (b) add a meaningless query parameter like ?v=2 to the share link to force a new cache entry.
Your CDN or origin is blocking facebookexternalhit/1.1. Whitelist that user agent. If you're on Cloudflare with bot fight mode on, this is the cause about 70% of the time.
Compress your image. The single most common cause is a 1200 × 630 PNG over 1 MB. Run it through Squoosh at quality 75 — the file usually drops to 80–180 KB with no visible quality loss, and the iMessage preview comes back instantly.
If you ship a fix and need every platform's cache to invalidate as fast as possible:
This sequence takes 90 seconds and should be the very first thing you do after pushing a fix. Trying to "warm" the cache by sharing the URL on the platforms themselves is a worse version of this — it locks in whatever current state exists, including the broken state.
Possible, but harder than it looks. The platforms cache aggressively, which means you can't just rotate the image and measure. The pragmatic options:
?v=a vs ?v=b) with different OG images. Track via Plausible or PostHog.If you don't have meaningful traffic yet, skip A/B testing entirely. Get to a defensible baseline first using the best-practices guide, then iterate once you have enough shares per week to detect a real effect.
If you remember nothing else from this post, remember this:
Test on Twitter, LinkedIn, Facebook, Slack, and iMessage in that order. Force-refresh after every fix. The bug you didn't catch on Slack is the bug your readers will see.
Five tools, ten minutes, no surprises on launch day. Worth it every time.
Our free OG Image Generator outputs validator-ready 1200 × 630 PNGs under 300 KB. Eight built-in templates, eight color presets, all with safe-zone padding pre-set. Type your headline and download.
Generate an OG image →