GUIDE

Why Your Link Preview Isn't Showing an Image (and How to Fix It)

A troubleshooting checklist for missing link preview images — from malformed og:image tags and relative URLs to stale crawler caches on Facebook and X.

August 9, 20264 min read

You're about to share a link and the preview comes back as a bare title with no image, or worse, nothing at all. It usually isn't random — link preview crawlers are picky, deterministic, and fail in a small number of well-known ways. Work through the list below roughly in order; most missing-image cases resolve in the first three or four checks.

Check the og:image tag actually exists and is well-formed

View source on the page (not the rendered DOM — actual HTML response) and look for a meta tag with property="og:image" in the head. If it's missing entirely, that's your answer. If it's there, check for common mistakes: a typo in the property name (og:image vs ogimage), the tag placed outside the head element, or the tag injected client-side by JavaScript after the initial page load. Most social crawlers do not execute JavaScript — they read the raw HTML response, so anything rendered client-side after hydration is invisible to them even though it looks correct in a browser.

Use an absolute URL, not a relative one

og:image needs a full URL starting with https://, not a relative path like /images/og.png. Crawlers don't reliably resolve relative paths against the page's domain the way a browser does, and this is one of the most common silent failures — the tag looks fine to a human skimming the source but fails to fetch. Double-check this especially if your OG tags are generated from a template that also handles regular in-page image src attributes, since those two contexts have different rules.

Make sure the image itself is publicly reachable

The image URL needs to load with no authentication, no cookies, and no redirect chain the crawler can't follow. Common culprits: the image sits behind a login wall meant for logged-in users, it's blocked by a robots.txt rule scoped too broadly, or it lives on a CDN with hotlink protection that rejects requests without a browser-like referer. Open the image URL in an incognito window with no session — if it doesn't load there, it won't load for the crawler either.

Watch for multiple, conflicting og:image tags

If a page has more than one og:image meta tag — often left over from a CMS plugin plus a manually added tag, or a template that both sets a default and lets an editor override it — crawlers behave inconsistently about which one they pick. Some take the first, some take the last, some ignore the page entirely if the markup looks malformed. Search the page source for every instance of og:image and consolidate to exactly one.

Consider a stale crawler cache

Platforms cache their scrape of your page so they're not re-fetching it on every share. If you fixed the image after the first share, the platform may still be showing what it scraped originally. Facebook's Sharing Debugger lets you paste the URL and click "Scrape Again" to force a fresh fetch. On X, appending ?clearcache to the end of the URL (or making any small change to the URL itself) will bypass the cached card. LinkedIn's Post Inspector offers similar re-fetch functionality. This is the single most common reason a fix doesn't seem to "take" — the code is right, the cache is just old.

Rule out a slow-loading image

Crawlers fetch on a timeout, typically a few seconds. If your og:image URL points to an on-demand image generation endpoint, a large unoptimized file, or a server under load, the crawler may give up before the image finishes loading and fall back to no image at all. This shows up as an intermittent problem — it works sometimes and not others — which is a strong signal to check response times on the image URL specifically, separate from the page itself.

Quick checklist

  1. View page source, confirm exactly one og:image tag exists in the head
  2. Confirm the image URL is absolute (https://...) and not relative
  3. Open the image URL in an incognito window to confirm it loads with no auth
  4. Check robots.txt isn't blocking the image path or crawler user agent
  5. Force a re-scrape with Facebook's Sharing Debugger or a cache-busting query param on X
  6. Check the image endpoint's response time — slow responses can time out the crawler

If you'd rather not step through each of these by hand, a scanner that fetches your page the way a crawler does — checking the tag, the URL, and reachability in one pass — can tell you exactly which check is failing in a few seconds. The free scanner at useopengraph.com does this without requiring an account.

Stop paying per seat
for a usage-shaped problem.

Unlimited teammates, one usage pool. Start free with the scanner — no card required.