You paste a link into a Signal chat, no preview card appears, and the message goes out as a bare URL. Signal is the one messenger in this series where the fix is usually on the sender's side — because the app builds previews on your device, not on Signal's servers.
That architecture is the whole story. Signal encrypts messages end to end, so its servers can't read the links you share to crawl them. Instead, every client fetches the URL itself, parses the Open Graph tags, and renders the card locally. No shared cache, no crawler, no debugger — just your phone hitting your page directly. That's why the image rules that barely matter on Facebook decide whether Signal shows your card at all.
Here's what I'll cover: why Signal previews fail, the exact specs the app needs (the 500 KB file cap most people miss), and a fix sequence you can run in under ten minutes. Every tag check below is reproducible with ogimgen's free OG checker.
Why Signal Shows No Preview or a Bare URL
Signal previews fail for three platform-specific reasons, plus the usual suspects. The ones unique to Signal all trace back to the client-side fetch:
- Link previews are disabled on that device. The toggle lives in Settings → Chats → Link previews, and it's per device. Preview shows on your phone but not your tablet? This is why.
- The og:image is over roughly 500 KB. Signal's clients drop preview images above that size, and the card falls back to title and description — or nothing at all. The limit keeps showing up in Signal's GitHub issue tracker when large images silently fail to render.
- The URL isn't HTTPS, or the image URL expires. Clients only fetch https:// links. Signed URLs with short expiry windows can render in your chat and fail on the recipient's device minutes later.
- The page responds slowly. The client fetches from a phone on a mobile network and gives up quickly. A 3-second TTFB that passes everywhere else kills the preview here.
- Hotlink protection or IP rules block the fetch. The request comes from the reader's IP, not a whitelisted bot. CDNs set to block direct image requests break the card silently.
- No og:image tag at all. Signal renders a text-only card, or nothing, depending on the client version.
The first five items are what make Signal feel broken. On Facebook or X you scrape the URL with a debugger, fix the tag, and wait for the cache to refresh. Signal has no debugger and no shared cache — every device fetches fresh, so you test by sending messages to yourself.
The OG Image Specs Signal Actually Uses
Signal never published a pixel requirement, which trips up people who size images for Facebook. Dimensions matter less than weight here. The spec that actually enforces itself is the file cap:
| Setting | Signal's Behavior | What Breaks |
|---|---|---|
| File size | Images over ~500 KB are dropped | Most 1200×630 PNGs with text exceed it |
| Dimensions | No published minimum; 1200×630 works | Nothing, as long as the file stays light |
| Format | PNG or JPEG | PNG at high quality is usually too heavy |
| HTTPS | Required for the link and the image | HTTP links render as plain text |
| Access | Public URL, no auth or cookies | Signed URLs that expire between devices |
| Crawler | None — the reader's device fetches | Hotlink protection and IP rules |
| Cache | None — fresh fetch per paste | Nothing; fixes apply instantly |
In practice, a 1200×630 PNG with text usually lands between 1 MB and 3 MB — over the cap more often than not. Re-exporting the same design as a JPEG or a compressed PNG typically gets you under it. Text-heavy designs can keep the PNG format; just run them through a compressor first.
Real talk: more than one "Signal is broken" report I've dug into turned out to be a heavy PNG doing its best. The platform isn't broken — the file is just heavier than what the client is willing to download from a phone.
How to Fix a Signal Link Preview (Step by Step)
- Flip the toggle. Open Settings → Chats → Link previews on the device where the card is missing. If it's off, that's the entire fix — test before touching your site.
- Verify the tags. Paste the URL into the OG checker. Confirm og:image exists, serves over HTTPS, and reports valid dimensions. If the checker flags a broken image, Signal will too.
- Get the file under 500 KB. Re-export the image as a JPEG or compressed PNG. A 1200×630 JPEG at reasonable quality usually lands between 150 KB and 400 KB.
- Test in Note to Self. Open your Note to Self chat, paste the link, and wait. The card appears above the input if the fetch succeeded — you watch it happen in real time.
- Test from a second device. Signal fetches per device, so a preview that renders on your phone can fail on a friend's phone on a different network. If it fails there, check server speed and hotlink rules.
- Confirm there's nothing to wait for. Signal has no preview cache — the next paste fetches fresh. Your fix is live the moment it's deployed. That's the silver lining of the architecture.
Signal vs. Telegram vs. WhatsApp: Preview Behavior Compared
Signal, Telegram, and WhatsApp are all end-to-end encrypted messengers, yet they build previews three different ways. The architecture choice decides which failure modes you'll ever see:
| Aspect | Signal | Telegram | |
|---|---|---|---|
| Preview fetch | Your device | Server-side crawler | Server-side crawler |
| Image cap | ~500 KB | Generous | Generous |
| Debugger | None | Instant View (t.me/iv?url=) | None |
| Cache | None, fresh each paste | Cached, refreshable | Cached |
| Typical failure | Oversized image or slow page | Blocked bot or bad tags | Blocked crawler |
| Fix shows up | Instantly | Minutes to hours | Minutes to hours |
Telegram and WhatsApp crawl from their own servers, so they tolerate heavy images and slower pages, cache results, and hide their internals behind a black box. Signal trades those conveniences for privacy: the "crawler" is literally the person reading your link, which is why file weight and network speed decide the outcome. If a preview fails on Signal, it fails on your reader's device — so the fix is always something you control: a lighter image or a faster page. The Telegram guide in this series covers the server-side model in more depth.
Summary
Signal link previews fail differently because Signal builds them differently: every client fetches the URL itself, under a tight 500 KB image cap, over HTTPS, with no server cache and no debugger. The fix sequence is short once you accept that — check the per-device toggle, verify your tags with an OG checker, compress the image under the cap, and test by pasting the link into Note to Self, from two devices if you can.
Generate a lightweight 1200×630 card with ogimgen, check it with the OG checker, and keep the file slim with the file size guide — the 500 KB cap makes Signal the strictest platform in this series.