If your link preview isn't showing, it's almost always one of five things: a stale cache, a relative image URL, JavaScript-injected tags, an oversized image, or missing tags entirely. Here's how to identify which one — in the order they're most likely — and fix it.
First: see what the scrapers actually see
Before guessing, look at your page the way a scraper does. Our free OG / Social Card Previewer fetches your URL's raw HTML and shows exactly which Open Graph tags are present and how the card renders — if a tag is missing or an image URL is broken, you'll see it immediately. That one check usually tells you which of the causes below you're dealing with.
Cause 1: The platform cached an old version (most common)
Social platforms scrape your page once and cache the result — sometimes for weeks. If you shared the link before adding OG tags, or you've since fixed them, the platform is still showing the stale (often empty) version.
Fix: force a re-scrape with the platform's debugger:
- Facebook / Instagram: the Sharing Debugger — paste the URL, click "Scrape Again."
- LinkedIn: the Post Inspector — paste the URL to refresh (LinkedIn caches especially long).
- X: simply sharing the updated link usually re-fetches, but the Card Validator history has been folded into the posting flow.
After re-scraping, the next share shows the fresh preview. This alone fixes a large share of "preview not showing" reports.
Cause 2: Relative image URL
og:image must be an absolute URL:
<!-- ❌ Won't work -->
<meta property="og:image" content="/images/og.png" />
<!-- ✅ Correct -->
<meta property="og:image" content="https://yoursite.com/images/og.png" />
Scrapers don't resolve relative paths reliably. If your image tag starts with / instead of https://, that's your bug.
Cause 3: Tags injected by JavaScript
This is the sneaky one. If your OG tags are added client-side — by a tag manager, a client-rendered SPA, or a script — the scraper never sees them, because social scrapers read raw HTML and don't run JavaScript (the same reason most AI crawlers can't read JS-rendered content).
Fix: move the tags into your server-rendered <head>. On Next.js, Nuxt, and similar frameworks this is the default when you use their metadata APIs; the problem appears when tags are bolted on with client-side scripts. To confirm: curl -s https://yoursite.com/your-page | grep "og:image" — if it's not in the output, it's not in the HTML.
Cause 4: The image is too large or the wrong format
Platforms silently drop images that exceed their limits. Keep og:image under ~1MB (WhatsApp is the strictest), use PNG or JPG (not every scraper handles WebP), and serve it over HTTPS. Also make sure the dimensions are right — see Open Graph image size for the 1200×630 spec.
Cause 5: The tags are simply missing
If the previewer shows nothing, you may not have OG tags at all. At minimum every shareable page needs:
<meta property="og:title" content="Your page title" />
<meta property="og:description" content="A one-line summary." />
<meta property="og:image" content="https://yoursite.com/og-image.png" />
<meta property="og:url" content="https://yoursite.com/your-page" />
<meta name="twitter:card" content="summary_large_image" />
The OG previewer generates this full set for you if you're starting from scratch.
The diagnostic order, in one list
- Preview the URL with the social card previewer to see what's actually there.
- If tags exist but the old preview persists → re-scrape with the platform debugger.
- If
og:imageis relative → make it absolute. - If tags are absent from
curloutput but present in the browser → they're JS-injected; move them server-side. - If the image is huge → compress it under 1MB.
- If there are no tags → add them.
Nine times out of ten it's cause 1 (cache) or cause 3 (JavaScript). Start there, verify with the previewer, and your cards will render everywhere your links get shared.