/ โ† Social Preview Fixes / Telegram Link Preview
In this guide
  1. How Telegram builds a link preview
  2. Why the link preview is not working in Telegram
  3. How to see what Telegram sees
  4. The Open Graph tags Telegram needs
  5. Image size and format for Telegram previews
  6. Platform notes
  7. The fix, step by step
  8. Edge cases worth knowing
  9. Keeping previews working
  10. Questions and answers

How Telegram builds a link preview

When someone pastes a link into a Telegram chat, the app does not fetch your page from their phone. Telegram's servers fetch it, read the tags in the page head, build the preview card and store it. Every later message with the same URL reuses that stored card. Telegram's fetcher identifies itself with a user agent containing TelegramBot (like TwitterBot).

The preview is built from these tags, roughly in this order of preference:

Part of the cardTag Telegram reads firstFallback
Site name lineog:site_nameThe domain name
Titleog:titletwitter:title, then the <title> element
Descriptionog:descriptiontwitter:description, then the meta description
Imageog:imagetwitter:image; sometimes an image from the page, sometimes none

Two things follow from this. First, the fetcher reads the raw HTML your server sends; it does not run JavaScript, so tags added by scripts after load are invisible to it. Second, because the card is cached, fixing your tags does not fix links that have already been shared until the cache is refreshed. Both are behind most cases of a Telegram link preview not working.

Why the link preview is not working in Telegram

SymptomLikely causeWhere to look
No preview at allThe fetcher is blocked: firewall, bot protection, country block or login wallServer logs for TelegramBot requests and their status codes
Old title or imageTelegram's cached card from before your changeRefresh with @WebpageBot
Title but no imageRelative image URL, image too large, blocked image host or wrong formatThe og:image value and the image's own response
Wrong page's detailsEvery page prints the home page tags, or og:url points elsewhereThe page head, template by template
Generic or missing textTags added by JavaScript, or missing og: tagsView source, not the browser's inspector
Preview for some links onlyTelegram previews only the first link in a message, or the sender switched previews offThe message itself

If you have never set up Open Graph tags, start with the missing Open Graph tags guide, then come back here for the Telegram-specific checks.

How to see what Telegram sees

Request the page the way Telegram does and check the status code and tags:

curl -s -o /dev/null -w "%{http_code}\n" -A "TelegramBot (like TwitterBot)" https://www.example.com/menu/
curl -s -A "TelegramBot (like TwitterBot)" https://www.example.com/menu/ | grep -iE 'og:|twitter:|<title'

You want a 200 and a full set of og: tags in the output. A 403 or 503 usually means a firewall or bot protection is treating the fetcher as a threat. An empty grep means the tags are missing from the server HTML, often because they are added by JavaScript.

Then check the image itself, using the exact URL in og:image:

curl -sI -A "TelegramBot (like TwitterBot)" https://www.example.com/images/menu-share.jpg | grep -iE '^HTTP|content-type|content-length'

It should return 200, a content type of image/jpeg or image/png, and a size comfortably under 5 MB.

Check the server logs

curl from your own machine is not quite the same as a request from Telegram's servers, which may come from another country. The access log shows what really happened:

grep "TelegramBot" /var/log/nginx/access.log | tail -10

If there are no lines at all after a fresh share, the request never reached your server, which points at a CDN or firewall rule upstream. If there are lines with 403 or 429, your own server or a security plugin is refusing it.

The Open Graph tags Telegram needs

Put these in the <head> of each page, in the HTML the server sends, with values specific to that page:

<meta property="og:site_name" content="Example Bakery">
<meta property="og:title" content="Weekend Menu and Opening Times">
<meta property="og:description" content="Fresh sourdough, pastries and cakes, Saturday and Sunday from 8 am.">
<meta property="og:url" content="https://www.example.com/menu/">
<meta property="og:type" content="website">
<meta property="og:image" content="https://www.example.com/images/menu-share.jpg">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta name="twitter:card" content="summary_large_image">

Keep titles under about 60 characters and descriptions under about 160; Telegram trims longer text, and a short description reads better on a phone.

Image size and format for Telegram previews

Telegram does not publish exact limits for preview images, so the safest approach is to use values that every major messaging app accepts.

SettingRecommendedWhy
Dimensions1200 ร— 630 pixelsWide images are shown as a large picture across the full width of the card
MinimumAt least 600 pixels wideSmall or square images tend to appear as a small thumbnail
File sizeUnder 1 MB, never over 5 MBLarge files may be skipped, leaving a card with no picture
FormatJPEG or PNGWidely supported; avoid SVG, and test WebP or AVIF before relying on them
HostingSame domain, public, no hotlink protectionHotlink rules that check the referrer can block the fetcher

In recent Telegram apps, the sender can tap the preview while writing a message and choose larger or smaller media, so a small picture is not always your fault. A wide image of the recommended size gives the sender the large option. For more on sizing across apps, see the Open Graph image size guide.

Platform notes

WordPress

Yoast SEO, Rank Math and similar plugins output Open Graph tags, with a social image field on each post. Set a default image in the plugin's social settings so pages without their own image still get one. If two plugins both print tags, switch one off. The WordPress previews guide has the details.

Shopify

Most themes print Open Graph tags from a snippet included in theme.liquid, using the product image and the social sharing image set in the theme settings. Check that the snippet is included once and that products have a main image.

Next.js

Use the Metadata API or generateMetadata in the App Router so tags are rendered on the server. Tags set only in client components, or with a client-side head manager after load, will not be seen by Telegram's fetcher.

Cloudflare

Bot Fight Mode, managed challenges and country blocks can all stop the fetcher. Check Security, Events for blocked requests with TelegramBot in the user agent. A WAF skip rule for that user agent on your HTML and image paths fixes it; user agents can be faked, so keep the rule narrow.

The fix, step by step

Step 1

Fetch the page as Telegram does

Run curl with the user agent TelegramBot (like TwitterBot) against the exact URL people share and check the status code. You want a 200. A 403, 429 or 503 means something is blocking the fetcher, so go to the firewall step before changing any tags. Also confirm the URL does not redirect to a login, cookie or country page, because Telegram would build its card from that page instead.

Step 2

Check the tags in the server HTML

Pipe the same curl request through grep for og: and twitter: tags. You should see og:title, og:description, og:image and og:url with values for this page, not the home page. If they are missing from the curl output but visible in the browser inspector, they are being added by JavaScript, and you need to output them directly from the server, theme or framework instead.

Step 3

Fix or add the Open Graph tags

Add a single set of og: tags to the head of each template, with a page-specific title and description, an absolute https:// image URL and the canonical og:url. In WordPress, set them in your SEO plugin; in Shopify, in the theme's social meta snippet; in Next.js, with the Metadata API. Run the curl check again and confirm exactly one of each tag appears in the output.

Step 4

Fix the share image

Make the image 1200 by 630 pixels, JPEG or PNG, and under 1 MB. Request it with curl using the Telegram user agent and check it returns 200 with an image/jpeg or image/png content type. Remove hotlink protection for this path if it blocks requests without a referrer. Add og:image:width and og:image:height so apps know the shape before downloading the file.

Step 5

Let the fetcher through your firewall

Search the access log for TelegramBot after sharing the link in a test chat. If there are no entries, check your CDN's security events for blocked requests and add a narrow skip rule for that user agent on public pages and images. If entries show 403 or 429, look at security plugins, rate limits and country blocks on the server itself, then share the link again to test.

Step 6

Refresh the cached preview

Open a chat with @WebpageBot in Telegram and send it the exact URL, up to ten links in one message. It fetches the page again and replies with the updated preview, which then replaces the cached card for new messages. If the reply still shows the old details, your server is still sending old tags, so purge your page cache and CDN and send the link to the bot again.

Step 7

Test in a real chat

Paste the link into Saved Messages or a test chat and wait for the preview to appear before sending. Check the site name, title, description and image. Make sure it is the first link in the message, because Telegram previews only one. If the image appears small, tap the preview to see whether the larger media option is offered, which needs a wide image of the recommended size.

Step 8

Standardise the shared URL

Pick one form of each URL, with or without the trailing slash, on https and on your preferred host, and redirect the other forms to it. Use exactly that same form in og:url and in every link you post. Telegram caches each variant separately, so a single consistent address means one refresh fixes the card everywhere, and tracking parameters do not create stale copies.

Edge cases worth knowing

Keeping previews working

Previews break quietly when a theme update, a new plugin or a security change touches the page head or blocks bots. A few habits keep them reliable:

Questions and answers

1. Why is my link preview not working in Telegram?

A Telegram link preview usually fails because Telegram's fetcher cannot read your page, the page has no Open Graph tags in its server HTML, or Telegram is showing an old cached card. Check the page with curl using the TelegramBot user agent and look for a 200 response and og:title, og:description and og:image tags. If those are fine, send the URL to @WebpageBot to refresh the cache. Also check that the link is the first one in the message and previews are switched on.

2. How do I refresh a Telegram link preview?

You refresh a Telegram link preview by sending the URL to @WebpageBot, Telegram's own bot for updating previews. Open a chat with it, paste the exact link, and it fetches the page again and replies with the new preview. You can send up to ten links in one message. Make sure your server and CDN are already serving the new tags first, otherwise the bot will cache the old version again. Messages sent earlier may keep their original card.

3. What image size does Telegram use for link previews?

Telegram works best with a share image of 1200 by 630 pixels in JPEG or PNG format, kept under 1 MB. Telegram does not publish an exact limit, but files over about 5 MB are often skipped, leaving a card without a picture. Wide images can be shown large across the preview, while small or square images tend to appear as a thumbnail. Always use an absolute https address for og:image, and add width and height tags.

4. Does Telegram use Open Graph tags?

Yes, Telegram builds link previews mainly from Open Graph tags: og:site_name, og:title, og:description and og:image. If those are missing it falls back to Twitter card tags, the page title and the meta description. The tags must be in the HTML your server sends, because the fetcher does not run JavaScript. Use one set of tags per page with values specific to that page, and make sure the image address is absolute and publicly reachable.

5. Why does Telegram show the wrong image or an old title?

Telegram shows an old title or image because it cached the preview the first time someone shared the URL, and it keeps using that card until it is refreshed. Fix the tags on your site, purge any page cache or CDN, then send the URL to @WebpageBot. If the bot still shows the wrong details, check that your template is not printing the home page tags on every page, and that the shared address matches your og:url exactly.

6. Can Cloudflare block Telegram link previews?

Yes, Cloudflare can block Telegram previews when Bot Fight Mode, a managed challenge, a WAF rule or a country block treats Telegram's fetcher as a bot to stop. The fetcher cannot solve a challenge, so it gets no tags and builds no card. Look in Cloudflare's security events for blocked requests with TelegramBot in the user agent. A narrow skip rule for that user agent on your public pages and images usually fixes it, and you can confirm it in the access log.

7. Why does only one link get a preview in my Telegram message?

Telegram shows a preview for only one link per message, normally the first one, so other links in the same message appear as plain text. That is how the app works, not a fault with your site. If you need a preview for a particular page, put that link first or send it in its own message. The sender can also remove a preview before sending, and some chats or settings turn previews off entirely.

See how your links look before you share them

Our social preview checker fetches your page the way messaging apps do and shows the title, description and image they will find, along with any missing or broken tags.

Open Social Preview Fixes โ†’
๐Ÿ’ฌ Got a problem?
Related Guides: All Social Preview Fixes  ·  Fixing WhatsApp link previews  ·  Fixing Discord link previews  ·  Clearing a stale Open Graph cache  ·  Fixing Open Graph image size  ·  Learning Hub

About aiwebpageseo

aiwebpageseo.com is a data-driven SEO and AEO (Answer Engine Optimisation) platform providing a free suite of technical SEO tools. Rather than relying on AI-theorised assumptions, the platform analyses live URL performance, delivering objective diagnostics, page speed metrics, CLS debugging, and site crawl data alongside actionable technical tutorials.