Blog/March 29, 2025·6 min read
Social link previews: a deeper look at Open Graph, Twitter Cards, caches, and debugging
Why link previews fail across Slack, LinkedIn, X, and iMessage, how og:image and twitter:meta interact, and a structured approach to validating tags before launch.
When someone pastes your URL into Slack, Discord, LinkedIn, X, or iMessage, they see a preview card: title, description, image, sometimes site name. That card is not magic - it is assembled from HTML meta tags (primarily Open Graph and Twitter Card fields) plus each platform’s fetch rules, image constraints, and cache.
This guide goes beyond “add og:image” and explains how things break, why caches lie to you, and how to use OG Preview as part of a sane release checklist.
The two families of tags (and how they interact)
Open Graph (og:*)
Open Graph tags describe a URL as a rich object: og:title, og:description, og:image, og:url, og:type, and more. Facebook popularized the vocabulary; many messengers and social apps reuse it or map from it.
Mental model: OG is the baseline many crawlers read first.
Twitter Cards (twitter:*)
Twitter-specific tags can override or complement OG. Important fields include:
twitter:card- summary, summary_large_image, etc.twitter:title,twitter:description,twitter:image
Mental model: if you only set OG and ignore Twitter, you are usually fine - but large-image layouts and image URL choices sometimes need explicit twitter:image tuning.
Practical overlap
In a healthy setup, OG and Twitter agree on title and description so users do not see one story in Slack and a different headline on X. When they disagree, it is usually because someone updated one template and not the other - or an old CMS plugin injects duplicate tags.
What crawlers actually fetch (and what trips them up)
Link preview bots are not identical to normal browsers:
- Redirects: too many hops, or http/https mismatches, confuse some parsers.
- Robots and paywalls: if a bot cannot fetch HTML, previews fail.
- JavaScript-only titles: some bots execute little or no JS; SSR or static HTML for critical meta is safer than “set title in
useEffect.” - Timeouts: huge
og:imagedownloads may be abandoned.
Absolute URLs for images: og:image should be a full HTTPS URL. Relative paths often break depending on the consumer.
Image dimensions and aspect: “Large image” cards often expect roughly 1.91:1 (commonly discussed as 1200×630). Too-small images may look blurry; absurdly large files may never finish downloading during the fetch window.
Caching: the part that makes everyone angry
You fixed your meta tags, redeployed, and Slack still shows last year’s screenshot. That is usually not your HTML being stale on the edge - it is the preview service’s cache.
Different networks expose different refresh or debug tools (and they change). The useful mindset:
- Fix tags and deploy.
- Wait - sometimes minutes, sometimes longer.
- Use official debuggers where available to request a rescrape.
- Do not assume instant updates in every app simultaneously.
This is why OG Preview is about your truth (what your HTML says now), not Apple’s cache or LinkedIn’s queue. You still need both checks before a big announcement.
A structured debugging workflow
When previews look wrong, do not randomize edits. Walk the list:
1. Confirm the HTML source
View page source (not only DevTools Elements - injected tags can mislead). Search for:
og:title,og:description,og:image,og:urltwitter:card,twitter:image
Duplicate tags: last one wins in many parsers - or behavior becomes undefined. Clean duplicates.
2. Validate URL and image reachability
Open og:image in a new incognito window. If you get 403, auth, or a redirect loop, bots may fail too.
3. Check image file size and format
If the image is a 12MB PNG, consider exporting a web-friendly version for og:image even if your on-page hero uses a heavier asset. Preview bots are impatient.
4. Compare environments
Staging vs production domains often differ in canonical URL, robots, or basic auth. Debug previews on the exact URL you will share publicly.
5. Use OG Preview on toolit
Paste the public URL into OG Preview to surface OG and Twitter fields in one place. It is a fast sanity check that complements platform-specific debuggers.
Frequently asked questions
Does Open Graph affect Google rankings? Not directly as a ranking signal in the simplistic sense. Indirectly, better titles and images improve click-through from social and sometimes from rich results experiments - but treat OG primarily as distribution and UX, not a substitute for on-page SEO.
Should og:url match the canonical?
Generally yes. Inconsistent signals confuse analytics and sometimes parsers.
What if I use a CMS that strips tags? You need a theme or plugin that emits tags in server-rendered HTML, or middleware that injects them before response. Client-only fixes are fragile for crawlers.
Why does WhatsApp show a different crop? Clients crop to their layout. Design safe margins and test on real devices when campaigns depend on the image.
Bringing it back to your launch calendar
Add one line to your release template:
After deploy: run OG Preview on the live URL; verify title, description, and image; schedule platform rescrapes if needed.
That single habit prevents more “why does our launch post look broken?” incidents than another week of keyword research.
Platform quirks (high level, because details change)
Consumers differ in minimum image size, aspect crop, allowed protocols, and timeout behavior. You cannot perfectly predict every app - but you can avoid the universal foot-guns:
- HTTP vs HTTPS: serve previews on HTTPS in production; mixed-content warnings break images in subtle ways.
- Redirects: keep chains short; some bots stop early.
- Blocking bots: if your WAF challenges unknown user-agents, preview crawlers may fail - whitelist known social/link-preview bots carefully (security review required) or accept broken cards.
- A/B tests: if title/description vary by segment, remember crawlers may see one variant - usually the default for anonymous fetches.
When something works in OG Preview but fails in an app, you are often looking at cache, bot differences, or client-side-only meta - not a mystery ghost.
A/B testing titles for social vs on-page SEO
Some teams want a punchier og:title than the <title> tag. That is valid for click-through in feeds, but keep the promise aligned with the page - bait-and-switch titles erode trust and can increase bounces. If you diverge, document the rule: marketing owns OG variants; SEO owns the HTML title - or one owner for both.
Related tools on toolit
- OG Preview - read meta from any URL you can fetch.
- Image compress - produce a lighter
og:imagecandidate when your art team exported a billboard-sized PNG.
Link previews are first impressions in chat apps. They deserve the same rigor as your hero image - and they reward a boring, repeatable debugging process.