Likely causes
Same root causes as Facebook’s wrong image issue, since Threads shares the crawler and cache:
- Relative URL:
og:imagemust be a full HTTPS URL. Relative paths like/images/og.jpgfail silently or produce unexpected results. - Image below 200 x 200px: ignored entirely. The crawler falls back to picking a random image from the page.
- Multiple
og:imagetags: the crawler uses the first one. If a CMS plugin or theme injects its ownog:imagebefore yours, that one wins. - Cached old image: Threads shares Facebook’s cache (~7 days, sometimes longer).
Diagnosing
1. Sharing Debugger
Open the Facebook Sharing Debugger and check the “og:image” field. It shows exactly what Meta’s crawler is using for both Threads and Facebook.
2. Verify image URL is absolute and reachable
curl -A "facebookexternalhit/1.1" -I https://example.com/your-image.jpgNeed a 200 OK with a valid Content-Type. A 403, 404, or login redirect means the crawler can’t get to it.
3. Check for duplicate tags
curl -A "facebookexternalhit/1.1" https://example.com/page | grep -i "og:image"Multiple tags? The crawler uses the first. Remove or reorder duplicates.
4. Check dimensions
- Minimum: 200 x 200px (ignored below this)
- Recommended: 1200 x 630px for best mobile display
The fix
- Absolute HTTPS URL for
og:image - Image at least 200 x 200px (ideally 1200 x 630)
- Single
og:imagetag, or correct one first - Add
og:image:widthandog:image:height:
<meta property="og:image" content="https://example.com/correct-image.jpg">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
- Sharing Debugger, “Scrape Again” two or three times
- If image content changed but the URL stayed the same, use a new filename to force Meta’s CDN to fetch it fresh