Home/ Guides/ Link preview not working

Guide · Open Graph

Why your link preview is broken on X, fine on LinkedIn.

Same URL, two different stories: it unfurls beautifully on LinkedIn and falls flat on X (Twitter). The cause is almost always a missing twitter:card tag plus a stale, aggressive cache. Here's how to diagnose the mismatch and fix it.

Updated June 3, 2026 · by slsh.me

The short answer

X needs a twitter:card tag. LinkedIn doesn't.

X / Twitter twitter:card first LinkedIn og: tags Caches per-platform og:image absolute HTTPS

X (Twitter) reads Twitter Card tags first and only draws the big banner when twitter:card = summary_large_image. LinkedIn, Facebook, Slack and Discord just read your og: tags. So a page with only og: tags renders on LinkedIn but shows a bare or small card on X. The other usual suspects: a stale per-platform cache, a scraper bot blocked by robots.txt or user-agent rules, a relative or non-HTTPS og:image, or an image over ~1 MB.

Tired of chasing tags per platform? Every slsh.me short link ships one correct card, with og: and twitter:card set together, so it renders right on X, LinkedIn and everywhere else. Free.

Who reads what.

The mismatch comes down to which tags each platform's scraper trusts — and how long it remembers the first thing it saw.

Platform What it reads Common failure
X / Twittertwitter:card, then og: fallbackNo summary_large_image → small card or no image. Caches the first scrape hard.
LinkedInog: tagsAggressive cache — once scraped, the old card sticks until you re-run the Post Inspector.
Facebookog: tagsCaches scrapes; the Sharing Debugger ("Scrape Again") is the only reliable refresh.
Slack & Discordog: tagsUsually forgiving, but skip a blocked scraper or a non-HTTPS og:image.
iMessage & WhatsAppog: tagsCrop to a tight bubble — edge content and tall images get cut.

Why the mismatch happens.

Every platform runs its own scraper. When you paste a link, a bot fetches the page and reads its <meta> tags, then decides on its own what to show. The scrapers don't share results, so a tag one platform ignores can be the very tag another requires.

X requires a Twitter Card tag. X looks for twitter:card first. With twitter:card set to summary_large_image you get the full-width banner; set to summary you get a small square thumbnail; absent, X falls back to your og: tags but won't draw the large card. LinkedIn, Facebook, Slack and Discord never look at twitter:* at all — they read og:title, og:description and og:image. That single difference is why an og-only page is fine on LinkedIn and broken on X.

Caching is per platform, and sticky. The first time a URL is scraped, the result is cached; edit your tags afterward and the platform keeps showing the stale card until you force a re-scrape. Each one caches independently, so a fix can land on one network and still look broken on another for hours.

Blocked or mis-served scrapers see nothing. If robots.txt or a user-agent / WAF rule blocks Twitterbot, facebookexternalhit or LinkedInBot, that platform gets an empty page and renders a bare card — even though the tags are perfect for everyone else.

og:image must be absolute and HTTPS. A relative path like /og.png or an http:// URL resolves in your browser but not for a scraper, so the image silently drops. See the Open Graph image size guide for the exact spec, and the Open Graph tags guide for the full tag set.

The diagnosis checklist.

Work these four in order. The first one fixes the X-vs-LinkedIn mismatch most of the time.

1

Confirm twitter:card = summary_large_image

View source on the page and search for twitter:card. If it's missing or set to summary, that's your X problem in one line. Add <meta name="twitter:card" content="summary_large_image">; twitter:title/description/image are optional and default to your og: values.

2

Check og:image is absolute, HTTPS, and under ~1 MB

The URL must start with https:// and be a full address, not /og.png. Keep the file under 1 MB at 1200×630 — heavy or relative images drop on the platforms that are otherwise fine.

3

Force a re-scrape on each platform

Your tags may already be correct but cached stale. Run the URL through Facebook's Sharing Debugger ("Scrape Again") and LinkedIn's Post Inspector, and for X paste it fresh — append ?v=2 if the old card lingers. Each cache is separate, so refresh them all.

4

Confirm the scrapers aren't blocked

Check robots.txt and any user-agent / WAF rules don't block Twitterbot, facebookexternalhit or LinkedInBot. A blocked bot sees an empty page and renders a bare card — even when the tags are flawless.

Test it the fast way.

Instead of pasting into four platforms and clearing four caches, fetch your page once and see every card side by side. A checker reads your live tags and renders the real preview per platform — so you can spot the X-vs-LinkedIn gap before you post, not after.

The free slsh.me Open Graph checker fetches your page, reads its og: and twitter:card tags, and renders the real card on X, LinkedIn, Facebook, Slack, Discord, iMessage and WhatsApp — with a best-practices audit that flags a missing summary_large_image or a relative image.

Check your link preview on the free checker

Or stop maintaining tags by hand: every slsh.me link ships one correct card that renders everywhere, free.

Questions

Why does my link preview work on LinkedIn but not Twitter/X? +
LinkedIn reads your standard Open Graph (og:) tags, so a page with only og: tags unfurls fine there. X (Twitter) looks for Twitter Card tags first — if there's no twitter:card set to summary_large_image, it falls back to a small card or none at all, and its scraper caches aggressively. Add the twitter:card tag and force a re-scrape and the X card matches LinkedIn.
Do I need twitter:card tags if I have Open Graph tags? +
X will fall back to your og:title, og:description and og:image when Twitter Card tags are missing, but it won't draw the large image card unless twitter:card is set to summary_large_image. To match what LinkedIn and Facebook show, add at minimum twitter:card = summary_large_image; twitter:title, twitter:description and twitter:image are optional and default to the og: values.
How do I refresh a cached link preview? +
Each platform caches the first scrape and shows the stale version until you force a refresh. Use Facebook's Sharing Debugger and click "Scrape Again," run the URL through LinkedIn's Post Inspector, and for X paste the URL fresh (append a harmless query string like ?v=2 if it still shows the old card). A working preview checker fetches your page live, bypassing all of those caches.
Why is my X card showing a small image instead of a large one? +
A small square thumbnail on X means your twitter:card is set to summary (or is missing and X guessed), not summary_large_image. The large 1200×630 banner card only renders when twitter:card is explicitly summary_large_image and og:image is an absolute HTTPS URL under about 1 MB. Set both, re-scrape, and the small card becomes the large one.

One link, one correct card.

Shorten any URL with slsh.me and it ships both the og: and twitter:card tags set together — so it renders right on X, LinkedIn and everywhere else. No more per-platform tag chasing, plus live click analytics for free.

Create a link with slsh.me

Free forever · see pricing