og:image is unreachable
The og:image tag is present but the URL does not return an image. Here are the six reasons a crawler cannot fetch it and how to tell which one applies.
What you are seeing: Your og:image tag exists and looks right, but previews still render without an image — or with a grey placeholder box.
The tag is fine, the fetch is not
This is a different failure from a missing tag. The markup is correct, so most manual checks pass, but when a crawler actually requests the URL it gets something other than an image back. Because the tag looks healthy in the page source, this one tends to survive code review and only surfaces when someone shares the link.
The six causes, in rough order of frequency
404 Not Found — the image was renamed, moved, or never deployed. Common after a redesign, and common when the path is right locally but the file is not in the production build.
403 Forbidden — the host is refusing the request. Usually hotlink protection, a WAF rule, or a bucket that is private. Social crawlers arrive with unfamiliar user agents and no cookies, so anything that gates on either will block them.
An expiring signed URL — S3, Cloudinary and Supabase can all hand out URLs with a time-limited token. It works when you paste it into your template and breaks silently days later.
A timeout — the host is reachable but slow. Crawlers give up quickly, and a large image on a cold CDN edge can exceed that budget.
An HTTP error from the origin — a 500 or a 502 means the image route is failing, which matters most when the image is generated on demand rather than served as a static file.
A network failure — most often a staging or localhost URL left in the tag, or a DNS record that does not resolve from outside your network.
How to diagnose it
Open the exact og:image URL in a private browsing window. That strips your cookies and session, which is the closest quick approximation of how a crawler sees it. If it loads for you but not in private mode, the image is behind authentication.
If it loads in private mode too, the problem is more likely to be the user agent or the origin's rate limiting. Request the URL with curl and check the status code and content type directly.
Check the URL the way a crawler would
curl -sI "https://example.com/og.png"
# Look for:
# HTTP/2 200 ← anything else is your problem
# content-type: image/pngFrequently asked
The image loads in my browser. Why does the checker say it is unreachable?
Your browser sends cookies, a familiar user agent, and a referer header from your own site. A crawler sends none of those. Hotlink protection, WAF rules, and login gates all pass for you and fail for the crawler. Open the URL in a private window with no referer to reproduce it.
Can I use an image behind a CDN or object storage?
Yes, as long as the object is publicly readable and the URL does not expire. Avoid pre-signed URLs in meta tags entirely — they are designed to stop working. Upload the social image to a public path and reference that.
Check your page
Run your URL through the checker to confirm the fix is live and see how the card renders on every platform.
Test a URL