Almost always because of the Open Graph tags in your page head: there is no og:image, the image URL is relative instead of a full https address, the tags are only added by JavaScript after the page loads, or the platform cached an old version. Fix the tags, then refresh the cache with LinkedIn Post Inspector or the Facebook Sharing Debugger.
Free link preview checker. See how your URL looks when shared on X (Twitter), LinkedIn, Facebook and Slack, and what is missing from your Open Graph and Twitter Card tags.
Open Social Media Link Preview Checker → Free toolFree Open Graph generator. Enter title, description, image and type to build valid og meta tags for rich link previews on Facebook, LinkedIn and Slack.
Open Open Graph Tag Generator →LinkedIn, Facebook and Slack build the card from og:title, og:description and og:image in the HTML your server returns. X also reads twitter:card, and summary_large_image gives the big image. Their crawlers generally do not run your JavaScript, so a single page app that sets these tags in the browser often shows a blank card.
Add an og:image with a full https URL, make sure that image is public and loads quickly, and render the meta tags on the server or prerender the page. If the tags are right but the old card still appears, the platform cached it: LinkedIn Post Inspector and the Facebook Sharing Debugger both fetch your page again.
The platform cached your page the first time it was shared. Use its debugger or inspector to fetch it again.
X falls back to Open Graph for title, description and image, but twitter:card set to summary_large_image controls the big image layout.
Not reliably. Use a full https URL so every crawler can fetch it.