A link that shows no image and a generic title when shared on social media almost always comes down to missing or incorrect Open Graph tags — not an algorithm issue, just metadata the platform’s scraper couldn’t find or parse correctly.

The core tags

add_action('wp_head', function() {
    if (!is_singular()) return;
    $image = get_the_post_thumbnail_url(get_the_ID(), 'large') ?: get_site_icon_url();
    ?>
    <meta property="og:title" content="<?php echo esc_attr(get_the_title()); ?>">
    <meta property="og:description" content="<?php echo esc_attr(get_the_excerpt()); ?>">
    <meta property="og:image" content="<?php echo esc_url($image); ?>">
    <meta property="og:url" content="<?php echo esc_url(get_permalink()); ?>">
    <meta property="og:type" content="article">
    <meta name="twitter:card" content="summary_large_image">
    <?php
});

twitter:card set to summary_large_image specifically matters — without it, Twitter/X falls back to a small thumbnail even if og:image is set correctly, since Twitter’s card type tag controls layout independently of the Open Graph image tag.

Image size requirements that actually matter

Platforms have real minimum dimensions before they’ll display an image at all — under roughly 200×200px, some platforms won’t show it, and the recommended size for a proper large preview card is around 1200×630px. A thumbnail sized for a blog archive grid is usually too small for this and needs its own dedicated size.

Debugging when it’s not working

Social platforms cache the scraped metadata aggressively — if you fix the tags after a bad share already happened, the platform may keep showing the old, broken preview until the cache clears. Each platform has its own debug/refresh tool:

  • Facebook’s Sharing Debugger forces a re-scrape
  • Twitter/X’s Card Validator does the same for X
  • LinkedIn’s Post Inspector for LinkedIn specifically

Running the URL through the relevant debugger after any change is the fastest way to confirm the fix actually worked, rather than sharing the link again and hoping.