Debugging & testing

Why Your Link Preview Is Broken (and How to Fix It)

By Social Card Studio3 min read

A broken link preview — a blank box, a missing image, last week's headline — is almost never mysterious. In practice it comes down to one of five causes. Here's how to find which one, using the official debuggers, and fix it.

First, see what the scraper sees

Before guessing, look at the page through the platform's own eyes. Three tools cover most cases:

  • Facebook Sharing Debugger — shows the tags Facebook read, warnings, and a Scrape Again button that forces a fresh fetch.
  • LinkedIn Post Inspector — re-fetches on demand and previews the LinkedIn card.
  • opengraph.io (or similar) — previews several platforms at once.

Each one tells you whether the tags are present and well-formed. That alone usually identifies the cause.

The five causes, in order of likelihood

1. A relative og:image URL

By far the most common. The scraper isn't on your domain, so a relative path can't resolve.

<!-- Broken: no domain -->
<meta property="og:image" content="/cards/post.jpg" />

<!-- Correct: absolute HTTPS URL -->
<meta property="og:image" content="https://yoursite.com/cards/post.jpg" />

2. A cached old preview

Platforms cache the first card they scrape. If you fixed the tags but still see the old preview, you're looking at the cache, not your fix. Use Scrape Again (Facebook) or the Post Inspector (LinkedIn) to force a refresh. On X, there's no public force-refresh, so append ?v=2 to the URL — see Twitter Card Meta Tags.

3. The image is too big or unreachable

A multi-megabyte image, or one behind a slow or failing host, can time out the scraper.

100–200 KB
is the target file size; large images time out on scrapers and slow connections, producing a blank card. MyOG Image, 2025

Keep cards well under the platform ceilings (5 MB generally, 8 MB on Facebook) and confirm the image URL loads in a private browser window with no login. Details in the image-size cheat sheet.

4. The page is behind auth or blocked

If the post requires a login, sits behind a paywall, or your robots.txt blocks the platform's crawler, the scraper can't read the tags at all. Confirm the page is publicly reachable and that you aren't disallowing the relevant user agents.

5. Malformed or missing tags

name vs property mix-ups, a missing og:url, or no tags at all. The debugger flags these directly. The minimum set is og:title, og:description, an absolute og:image, and og:url — see What Is Open Graph?.

A 60-second checklist

  1. Run the URL through the Facebook Sharing Debugger.
  2. Is og:image an absolute HTTPS URL? (Fixes most cases.)
  3. Click Scrape Again to clear the cache.
  4. Open the image URL in a private window — does it load, and is it under a megabyte?
  5. Confirm the page is public and tags aren't malformed.

The takeaway

Broken previews are predictable: a relative image URL, a stale cache, an oversized or unreachable file, an inaccessible page, or malformed tags. The debuggers tell you which. The most durable fix, though, is to never emit a broken image in the first place — which is the contract behind Social Card Studio: the image endpoint always returns a valid card, so your og:image tag can't point at nothing.

Frequently asked questions

Why is my Open Graph image not showing?

The most common cause is a relative og:image URL — it must be an absolute HTTPS link. Other causes are a cached old preview, an image that is too large or unreachable, or the page being behind authentication so the scraper can't read the tags.

How do I refresh a cached link preview?

Use the platform's debugger to force a re-scrape: Facebook's Sharing Debugger has a 'Scrape Again' button, and LinkedIn's Post Inspector re-fetches on demand. For X, append a query parameter to the URL to bypass the cache.

How do I test a link preview before publishing?

Paste the URL into Facebook's Sharing Debugger, LinkedIn's Post Inspector, or a multi-platform tool like opengraph.io. They show exactly which tags each platform reads and flag missing or malformed ones.

← All posts