Social Preview Tester — Example Report Run Your Own Audit →
📋 Example Report — Demo Data

Social Preview Example: Multi-Platform Sharing Preview

This example shows the aiwebpageseo Social Preview Tester for a product page. The og:image is 1200×630, so Facebook and X both render correctly. LinkedIn truncates the description at around 120 characters, cutting off the price. WhatsApp shows no image at all — not because of the image, but because the Open Graph tags sit too deep in the head for its scraper to reach.

Social Preview — shop.example.com/products/headphones
✅ 2 platforms — good ⚠ 3 platforms — issues
Facebook ✅ Good
og:image — 1200×630px
SHOP.EXAMPLE.COM
Sony WH-1000XM5 Wireless Headphones
Industry-leading noise cancelling. 30-hour battery. £279.00 with free delivery.
WhatsApp ❌ No image
Sony WH-1000XM5 Wireless Headphones
shop.example.com
Industry-leading noise cancelling...
⚠ WhatsApp fetches only the first part of the HTML and never reached the og:image tag. Move the Open Graph block to immediately after <meta charset>.
Twitter / X ✅ Good
twitter:image — 1200×628px
Sony WH-1000XM5 Wireless Headphones
shop.example.com
LinkedIn ⚠ Truncated
og:image displayed
Sony WH-1000XM5 Wireless...
Industry-leading noise cancelling. 30-hour battery. £27...
⚠ Description truncated at 120 chars
Why one set of tags produces four different cards

Every panel above is rendering from the same Open Graph tags. The differences are entirely in the renderers — each platform applies its own minimums, its own crop and its own truncation, and none of them tells you it did.

PlatformReadsBehaviour to watch
FacebookOpen GraphLandscape card, broadly as designed. Caches hard.
LinkedInOpen GraphTruncates the description early. Caches hardest of all.
Xtwitter:*, falling back to OGsummary gives a square thumbnail; summary_large_image gives the landscape card
WhatsAppOpen Graph onlyCompact card, small thumbnail. Reads only the first part of your HTML.

The X row is the one that catches people. The card type is not a property of your image — it is set by the twitter:card tag. Ship summary and you get a small square crop taken from the middle of your carefully composed 1.91:1 banner, with the left and right thirds discarded. The image is fine. The card type is wrong.

Two green ticks are not reassurance. The panels tell you how the card renders on four platforms — not whether the share is worth clicking on any of them, and not whether the scrapers can reach your page at all when a real user posts the link. Read them as a rendering check, not a verdict.

Design for the crop, not for the file

1200 × 630 is the right file to produce. What each platform then does with it decides whether the image works or becomes a headless torso.

The rule that survives every platform: centre-weight the image. Assume a square crop taken from the middle. Put the subject and any text inside that central square, and treat the left and right thirds as decoration that will sometimes be discarded. A logo tucked into a bottom corner is the most common casualty, and it is the element people are most confident is safe.

reserve

Declare og:image:width and og:image:height

The first time a URL is shared, the platform has not yet fetched the image — so it renders the card without one and fills it in afterwards. Declaring the dimensions lets it reserve the space immediately. This is why your first share of a new post so often looks broken and every later one looks fine, and it is why testing by sharing is misleading.

Truncation: write for the shortest reader

The LinkedIn panel is flagged as truncated, and it is the general case rather than the exception. Every platform cuts the description, at different points, and none of them warns you.

Two rules make this a non-problem:

  1. Front-load the meaning. Descriptions cut from the right, so the first clause has to stand alone. "Industry-leading noise cancelling. 30-hour battery. £279 with free delivery." survives any cut with something useful left. "With over three decades of engineering heritage behind it, this remarkable product…" loses everything that mattered.
  2. Never put the price or the call to action last. On this example the price is the first thing a buyer wants and the first thing LinkedIn removed.

The same logic governs the title: it cuts from the right, so put the distinguishing words on the left and the brand at the end.

And a note on og:description generally — it is not the meta description and it is not doing the same job. Google frequently rewrites your meta description; a social platform will use your og:description exactly as written. This is one of the few pieces of copy on your site that appears verbatim, unedited, in someone else's feed. It deserves more care than it usually gets.

Test without publishing — and debug in the right order

The instinct is to test by posting the link and looking at it. Do not. The platform caches whatever it scraped on that first attempt, so a broken preview posted once is a broken preview cached — and the post is now public and wrong.

The order that saves an afternoon

  1. curl the page. Are the tags in the raw HTML? Did you get a 200, or a bot-protection challenge? If the tags are absent here, stop — everything below is wasted. Check the attribute too: og: tags need property=, not name=.
  2. Fetch the og:image URL directly, in a private window. Does it load anonymously, over HTTPS, with no referrer and no cookies? This catches hotlink protection, stale CDN paths and images left behind basic auth.
  3. Run the platform debuggers. Facebook's Sharing Debugger is the best diagnostic even for other platforms, because it prints exactly which tags it found. LinkedIn caches unusually hard and needs its Post Inspector to clear.
  4. Only now, share it.
caches

There are two caches, not one

Your CDN is caching the image file, and the platform is caching its own copy of what it scraped. Replacing the file at the same URL frequently changes nothing visible, because you have cleared neither. Publish the new image under a new filenameog-image-v2.png rather than overwriting og-image.png — and you sidestep both at once. It is the fastest way to make a change actually appear.

When the tags are correct and the preview is still blank

These are the causes that produce a bare link on a page that looks perfect in your browser — and they are invisible to a preview tool that is reading your tags rather than impersonating a scraper.

The single test that separates all of these: curl your own URL and read what comes back. That is the document the scraper receives. Everything else is inference.

Frequently asked questions

Why does my link look different on different platforms?

Each platform reads Open Graph tags differently. Facebook and LinkedIn use og:title, og:description and og:image. X uses twitter:title and twitter:image if present, falling back to og: tags. WhatsApp uses og: tags only. Each platform also has different image aspect ratio preferences and character limits for title/description truncation.

Why is my og:image not showing on Facebook?

Common reasons: the image URL is not publicly accessible, the image is smaller than 200x200px (minimum for Facebook), the server returns incorrect content-type headers, or Facebook's cache is showing an old version. Use the Facebook Sharing Debugger to scrape fresh data and clear the cache.

How do I update my social preview after changing OG tags?

Facebook and LinkedIn cache social previews aggressively. Use the Facebook Sharing Debugger (developers.facebook.com/tools/debug) to force a fresh scrape. For LinkedIn, use the Post Inspector (linkedin.com/post-inspector). Twitter/X typically refreshes within 24 hours automatically.

Why does X show a small square image instead of my banner?

Because twitter:card is set to summary rather than summary_large_image. The card type is not a property of your image — it is set by that tag. With summary, X takes a square crop from the middle of your 1.91:1 banner and discards the left and right thirds. The image is fine; the card type is wrong. This is also why you should centre-weight every social image: assume a square crop from the middle and treat the outer thirds as expendable.

My tags are correct but the preview is still blank. What now?

Curl your own URL and read what comes back — that is the document the scraper receives, and everything else is inference. Two causes dominate. Bot protection (Cloudflare's bot-fighting modes, a WAF rule, a rate limiter) may be serving the scraper a challenge page or a 403 containing no Open Graph tags, while your browser sees the real page. Or the tags are injected by JavaScript, which most scrapers never execute. Also check the attribute: og: tags require property=, not name=.

I replaced the image but the old one still appears. Why?

Two caches are holding it, and clearing one does not clear the other: your CDN is serving the old file at that URL, and the platform has cached its own copy of what it scraped. Publish the new image under a new filename — og-image-v2.png rather than overwriting og-image.png — and you sidestep both at once. Also declare og:image:width and og:image:height, so a platform seeing the URL for the first time can reserve the space before it has fetched the file.

How much care does og:description deserve?

More than it usually gets. Unlike a meta description, which Google rewrites most of the time, a social platform uses your og:description exactly as written — it is one of the few pieces of copy on your site that appears verbatim and unedited in someone else's feed. Every platform truncates it at a different point and none of them warns you, so front-load the meaning and never put the price or the call to action last. The title cuts from the right too: distinguishing words on the left, brand at the end.

Related Demo Reports

Run Social Preview Tester on Your Own Site

Get your real audit with specific issues, fixes and improvements — free to start.

⚡ Run Free Audit View Plans