1. The tags are in the <head>, not the <body>
Open Graph and Twitter tags must live inside <head>. Crawlers read the head and frequently stop there; a tag that a template accidentally rendered into the body is invisible to them. View source (not the live DOM — the raw HTML) and confirm your og: tags sit above </head>.
2. You changed the tags but the platform cached the old ones
This is the number-one false alarm. Platforms cache a preview the first time any link is shared — often for days. You fix your tags, re-post, and see the old card. Your markup is fine; the cache is stale. Force a fresh read:
- Facebook & WhatsApp: Sharing Debugger → "Scrape Again". WhatsApp uses Facebook's cache, so this fixes both.
- LinkedIn: Post Inspector re-fetches on load.
- X (Twitter): the Card Validator is gone — add
?v=2to the URL to defeat the cache, then post. - Slack / Discord: a query-string change (
?x=1) forces a new unfurl.
3. The image URL is relative, not absolute
The most common reason the image alone is missing. og:image must be a full https:// URL:
Same applies to og:url. External crawlers have no base to resolve a relative path against, so it fails silently.
4. The crawler can't reach the page or the image
If the preview is blank everywhere, the crawler may be blocked before it reads a single tag. Check:
robots.txtisn't disallowing the crawler. Social bots (facebookexternalhit, LinkedInBot, Twitterbot, Slackbot) must be allowed to fetch both the page and the image path.- The page isn't behind a login, paywall or staging password. If a logged-out visitor can't see it, neither can the crawler. (For unpublished pages, use this tool's Manual Input mode to preview before launch.)
- The image returns HTTP 200, not a redirect chain or 403. Some crawlers won't follow redirects to the image.
- No hotlink protection on the image host that blocks requests without your own referer.
5. property vs name is swapped
Open Graph uses property=; Twitter uses name=. Mix them up and the tag is ignored without any error message:
If Facebook works but X doesn't (or vice versa), this mismatch is the first thing to check.
6. Required tags are missing or malformed
A valid card needs, at minimum, og:title, og:type, og:image and og:url. Also watch for:
- An
og:imagethat's too small (under ~200×200) — some platforms drop it or fall back to a tiny thumbnail. - An unclosed or duplicated tag earlier in the head that breaks parsing.
- An SVG or WebP image — use PNG or JPG (see image size & format).
The fastest way to find it
Rather than guess, read what the crawler reads. Paste the live URL into the OG Preview tool in Fetch mode: it lists the tags it found and the ones it didn't, so a missing og:image or a swapped attribute shows up immediately. Then fix, re-scrape in the platform's own debugger, and share again.
Quick diagnostic order
- View raw source — are the tags in
<head>? - Re-scrape in the Facebook / LinkedIn debugger — was it just the cache?
- Is
og:imagean absolutehttps://URL that returns 200? - Can a logged-out user (and a bot) reach the page and image?
property=for OG,name=for Twitter?- Are title, type, image and url all present, image PNG/JPG?
Next: the perfect OG image · how each platform reads your tags · check your page now