How iMessage builds a link preview
iMessage previews (Apple calls them rich links) are built on the sender's iPhone, iPad or Mac when the message is sent, then delivered with the message. Apple's fetcher sends a User-Agent that includes facebookexternalhit/1.1 Facebot Twitterbot/1.0, so it sees what Facebook's and X's crawlers see.
The rich link is minimal:
- Image from
og:image(ortwitter:image), shown large, edge to edge. - Title from
og:title, then<title>, up to two lines. - Domain under the title.
There's no description: iMessage ignores og:description. Everything the reader needs to decide whether to tap has to be in the title and the image.
When the page has no usable image, iMessage shows a compact link with your site icon next to the title. It looks for apple-touch-icon first, then the favicon, so declare a 180×180 PNG:
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
Why the iMessage link preview isn't showing
The page is slow
The sender's device fetches the page while sending, with a short time limit. A slow server or long redirect chain means the message goes out as a plain link. The checker shows the response time and every redirect.
Tags only exist after JavaScript runs
Apple's fetcher reads the HTML without running scripts. Client-rendered apps need server-side rendering for their meta tags.
The image needs cookies or isn't HTTPS
Use a public HTTPS URL for og:image. Images behind sign-in, hotlink protection or plain HTTP are skipped.
The link was sent before the fix
The preview is stored with each message. Messages already sent keep their original preview.
How to refresh an iMessage preview
There's nothing to purge: iMessage builds a new preview for every new message. Fix the page, check it here, and send the link again. If a device still shows the old version, add a parameter such as ?v=2 to rule out local caching.
iMessage extras
- Video: if
og:videopoints directly to an MP4 file, iMessage can play it inline in the conversation. - Mac and iPhone look the same: the layout scales with the bubble, so one 1200×630 image works for both.
- Dark mode only changes the bubble around the card. Check that a transparent PNG still reads on a dark background, or use a JPG.