Benchvale

Why your link preview image is not showing

Almost always one of three things: the platform cached a scrape of your page from before the image existed, your og:image is a relative path instead of a full URL, or the tag is being added by JavaScript and most scrapers do not run JavaScript; Apple says its Messages previews do not.

You can tell which one it is in about two minutes. Work through the checks below in order, because the cheap ones rule out the expensive ones.

Check 1: look at the HTML the scraper sees, not the page you see

This is the check that saves the most time and it is the one people skip. Your browser shows you the rendered DOM. A social scraper reads the raw HTML that came back in the first response, and that is often a different document.

View source rather than inspecting the element, and search for og:image. Or pull it from the command line:

curl -sL https://example.com/your-page | grep -i "og:"

If the tag is not in that output, the preview is not broken. To a scraper that does not run JavaScript, which is most of them, the tag does not exist. That happens when the meta tags are injected client side by a framework, a tag manager, or a plugin that runs after page load. The fix is to render the tags server side or put them in the static HTML.

If the tag is there, read the value carefully before moving on.

Check 2: is the image URL absolute?

og:image needs a complete, absolute URL including the scheme and the domain:

<meta property="og:image" content="https://example.com/images/preview.png">

Not /images/preview.png, and not //example.com/images/preview.png. A relative path works fine in an <img> tag, but Open Graph expects a full http:// or https:// URL, and a relative one fails unpredictably across platforms. Mixed protocols cause the same trouble: an http:// image on an https:// page can cause a preview that appears for some platforms and not others.

While you are looking, confirm the URL actually loads when pasted into a private browsing window with no session. A preview image sitting behind a login, a staging password, a hotlink protection rule, or a robots.txt disallow will not be fetched.

Check 3: clear the cache on the platform's side

Every major platform caches what it scraped. If you shared the URL before the image was in place, the platform is showing you a stored answer and will keep doing so until you force a refresh. This is what is behind a preview that shows the old image after you have already fixed the tag. If you replaced the image file but kept its URL, rename the file too. Meta says images are cached by URL and are not updated until the URL changes.

If a fresh scrape fixes it, you are done, and the tags were correct all along.

Check 4: the image itself

Once the tag is present, absolute and publicly reachable, the remaining failures are properties of the file.

Check 5: conflicting or duplicated tags

Two og:image tags on the same page is a problem you should not leave in place. The Open Graph protocol says the first tag is given preference during conflicts, but do not count on every platform following that, and do not rely on ordering to pick the right image. This happens constantly on sites where a theme sets Open Graph tags and an SEO plugin sets them again. Search the raw HTML for og:image and count the matches. There should be exactly one per page unless you are deliberately offering multiple images.

Two neighboring tags are worth checking in the same pass:

Redirects belong here too. A URL that redirects to a different page will normally be scraped at its destination, so a preview that looks wrong on a shortened or campaign tagged link is often just the destination's tags showing through.

Check 6: the URL you are sharing is not the URL you are testing

The last one, and the quietest. Campaign parameters make a different URL. On platforms that cache by exact URL, such as Slack, example.com/page and example.com/page?utm_source=newsletter can hold two different cached scrapes. If a link works when you paste it plainly and fails in your newsletter, test the exact tagged string, not the clean one.

If the two versions of your link also disagree about capitalization, you have a second problem underneath this one, and why UTM names split your reports covers that.

Put the tags in right the first time

The reliable fix order is: write correct tags, confirm they appear in the raw HTML response, then force one re-scrape on each platform you care about.

The Benchvale Open Graph generator writes the tag block for you and sketches LinkedIn, X, Facebook and Slack cards, so you can catch a title or description that will be cut before the post is out. It runs entirely in your browser, so the page you are describing never gets sent anywhere.

Related

The Open Graph generator writes the tags and sketches approximate LinkedIn, X, Facebook and Slack cards, so you can spot a title that will be cut. It doesn't fetch your page or load your image, so check the image URL itself as in Check 2. The UTM builder handles the campaign parameters that ride on the same links, and the marketing tools hub has the rest.

Maintained by Aaron Wilson
Published . Last updated . How the tools work and how we check them: how we build tools. Something wrong? Tell us.