What they actually read
Slack, WhatsApp, LinkedIn, Facebook, Discord and iMessage all read Open Graph tags: og:title, og:description, og:image and og:url. X reads Twitter Card tags and falls back to Open Graph.
With none of them, the platform guesses — usually your navigation, your logo, and whatever text it finds first. That is the generic broken-looking preview you are trying to fix.
The four things that break it
A relative image URL. og:image must be absolute, including https://. A relative path works perfectly on your own page and fails in every preview.
The image is behind a login or blocked. Preview bots are anonymous and follow no redirects you have not allowed. If the image needs a session, they get nothing.
The preview is cached. Platforms cache aggressively — often for days. Your fix is live and the old preview persists. Facebook and LinkedIn both publish debuggers that force a re-scrape; Slack refreshes if you add a ?1 to the URL.
The tags are added by JavaScript. Preview bots do not run scripts. Tags injected client-side are invisible to every one of them, which is why single-page apps so often have broken previews.
Getting the image right
1200×630 pixels is the size to target — it is what Facebook, LinkedIn and Slack all expect, and it degrades gracefully everywhere else. Under 600px wide, most platforms drop to a small thumbnail instead of the large card.
Keep it under about 5MB and use PNG or JPEG. Some platforms will not fetch WebP, and an image that fails to load produces a preview that looks worse than having no image at all.
Generate your tags → Every field marked found, derived, or still needs writingCommon questions
Why does my link preview show the wrong image?
Almost always a cache. The platform fetched your page before you added the tag and kept the result. Use the platform's sharing debugger to force a re-scrape, or append a query string to the URL to make it look new.
Do I need Twitter Card tags as well as Open Graph?
X falls back to Open Graph for title, description and image, so the minimum useful addition is twitter:card set to summary_large_image, which controls the layout. The rest is optional.
Why is my preview blank on WhatsApp but fine on Slack?
Usually image size or format. WhatsApp is stricter about dimensions and file size than Slack, and silently drops images it will not render. A 1200x630 PNG or JPEG under 5MB works on both.