When a shared link shows no preview, the cause is usually one of four things: the page has no Open Graph tags (og:title, og:description, og:image, og:url), og:image is a relative URL or an unreachable image, the platform is serving a cached preview, or the tags are added only by JavaScript. Preview bots do not run JavaScript, so the tags must be in the server-delivered HTML.
What are Open Graph tags and which ones do you need?
Open Graph tags are meta tags in the page head, written with a property attribute, that decide which title, description and image WhatsApp, LinkedIn, Facebook, Slack and similar platforms show in a link preview card. The tags come from a protocol Facebook created, and today almost every platform reads them.
- —og:title: The card headline; it can be shorter than the page title and drop the brand suffix.
- —og:description: One or two sentences; some platforms truncate or hide it.
- —og:image: The absolute https URL of the preview image, the most decisive part of the card.
- —og:url: The page's canonical URL; share counts and caching attach to this address.
- —og:type: Usually "website", or "article" for blog posts.
- —Also useful: og:site_name, og:locale (tr_TR, en_US), og:image:width, og:image:height and og:image:alt.
Related services
Are Twitter Card tags different from Open Graph?
Twitter Card tags are meta tags defined for X (formerly Twitter) and written with a name attribute. When X cannot find twitter:title, twitter:description or twitter:image, it falls back to the Open Graph equivalents, so in practice the only X tag you really need is twitter:card set to summary_large_image for the large-image card.
Without twitter:card, X usually shows a summary card with a small square image. Adding twitter:site with the brand's X handle is optional. On 404 Ajans's site, Open Graph and Twitter tags for every page are generated from the same data object, so the two sets never disagree on title or image.
How do you set up Open Graph on a multilingual site?
On a multilingual site, each language version should carry its own Open Graph tags: og:title and og:description written in that language, og:url pointing to that version's canonical URL, and og:locale holding a language-region code such as tr_TR or en_US. The optional og:locale:alternate tag lists the other language versions.
A common mistake is the English page showing the Turkish title and description, usually because the tags come from a single hard-coded template. For preview images that contain text, generating a separate image per language keeps the card consistent.
What size should the preview image be?
The safest preview image size is 1200x630 pixels (roughly 1.91:1). A 1200x630 image displays properly as a large card on Facebook, LinkedIn, X and WhatsApp. It should be referenced by an absolute https URL, be a JPEG or PNG, and keep important text and logos centred, away from the edges, because some platforms crop.
- —Size: 1200x630 pixels; images narrower than 600 pixels are shown as small cards on many platforms.
- —Format: JPEG or PNG gives the widest compatibility; some preview bots may not handle WebP.
- —File size: keep it small; images under a few hundred KB load more reliably, especially on WhatsApp.
- —Access: the image must be public, with no login, cookie or bot wall; your CDN's bot protection must not block preview bots.
- —Page-specific images: rather than the same logo everywhere, custom cards with the headline, at least for key service pages and blog posts, get more clicks.
Read next
Why do previews fail on single-page apps?
Previews fail on single-page apps (SPAs) because the preview bots of WhatsApp, LinkedIn, Facebook and X do not run JavaScript. These bots read the raw HTML the server returns. On a client-rendered React or Vue site, that raw HTML is the same empty shell for every URL, so page-specific tags simply do not exist for the bot.
The result is that every share shows the homepage title and image, or nothing at all. The fix is to produce the tags on the server: SSR, static site generation (SSG) or prerendering at build time. 404 Ajans's site is built with React 18 and Vite and uses a custom prerender step to generate static HTML for every route with its own title, description, canonical and Open Graph tags, which is why each blog post shares with its own card.
How do you clear a platform's share cache?
A share cache is the preview a platform stores for a URL after first scraping it; even after you fix the tags, the old card can keep appearing. Facebook and LinkedIn offer official debugging tools that refresh the cache, while WhatsApp and X have no official refresh tool.
- —Facebook Sharing Debugger: enter the URL and click "Scrape Again"; it also lists missing or invalid tags.
- —LinkedIn Post Inspector: inspecting a URL refreshes its preview and shows which tags LinkedIn read.
- —X: the Card Validator's preview feature was removed; check the preview in the post composer, and the cache refreshes over time.
- —WhatsApp: no official tool; for testing, adding a harmless query parameter (for example ?v=2) produces a fresh preview.
- —If you replaced the image, rename the file too; an image re-uploaded under the same name can stay stale in CDN and platform caches.
Local support
Link preview troubleshooting checklist
A link preview troubleshooting checklist rules out the most common causes in order. The first step is always to view the page source (the HTML from the server, not the live DOM); if the tags are missing there, the problem is your rendering method, not the platform.
- —Does the server HTML contain og:title, og:description, og:image and og:url?
- —Are og:image and og:url absolute https URLs rather than relative paths?
- —Does the image open in a private browser window and return 200?
- —Is the image around 1200x630 with a reasonable file size?
- —Do robots.txt or CDN bot protection block bots such as facebookexternalhit, LinkedInBot or Twitterbot?
- —Is any tag duplicated on the page (for example, added by both the template and a plugin)?
- —After fixing, did you refresh the cache with Facebook Sharing Debugger and LinkedIn Post Inspector?
