iMessage Link Preview Not Working — How to Fix It
When you share a URL in Apple iMessage, iOS fetches the page and displays a compact preview card below the message — showing a title, description, and thumbnail image. If the preview is missing or shows the wrong content, the fix is almost always in your Open Graph tags.
How iMessage Generates Link Previews
iMessage uses Apple's server-side fetcher to read metadata from the shared URL. It checks, in order:
- Open Graph tags —
og:title,og:description,og:image— the primary source <title>tag — fallback for the headline ifog:titleis absent<meta name="description">— fallback for description text
Like all major messaging platforms, iMessage's fetcher does not execute JavaScript. All meta tags must be present in the raw HTML response from the server.
Common Reasons iMessage Previews Fail
Missing og:title or og:image
iMessage requires og:title to render a preview card. Without it, only the bare URL is shown. Without og:image, the preview renders as text-only with no thumbnail.
Image too small or wrong format
iMessage works best with images of at least 300×157 px. For a consistent thumbnail experience on iOS, use a square or near-square image crop alongside your standard 1200×630 px og:image — iOS may crop wide images to a square thumbnail depending on the device and iOS version.
Supported formats: JPEG and PNG. Avoid WebP for og:image if broad iOS compatibility matters.
Page is JavaScript-rendered
iMessage's fetcher reads raw HTML. If your og: tags are injected by React, Vue, Angular, or any other client-side framework, iMessage will not see them. The tags must be present in the server-sent HTML.
og:image URL is not publicly accessible
The image URL must load with a plain GET request and return HTTP 200. No authentication, VPN, or redirects requiring cookies.
og:image uses HTTP not HTTPS
iMessage requires HTTPS image URLs. HTTP images are blocked on modern Apple platforms.
CDN or server blocks Apple's crawl bot
If your server blocks unfamiliar user-agents or applies aggressive bot-protection rules, iMessage's fetcher may receive an error response and show no preview.
How to Fix iMessage Link Previews
- Add Open Graph tags to your page's
<head>:
<meta property="og:title" content="Your Page Title" />
<meta property="og:description" content="A concise description." />
<meta property="og:image" content="https://example.com/preview.jpg" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:url" content="https://example.com/your-page" />
- Confirm tags are server-rendered — check with
curl:
curl -s https://example.com/your-page | grep 'og:'
If the tags don't appear in the output, they are JavaScript-injected and invisible to iMessage.
Verify the image is accessible and HTTPS — open your
og:imageURL in a private browser window. If it fails to load, iMessage can't fetch it either.Test with TryUnfurl — paste your URL at TryUnfurl to see the iMessage preview tab alongside all other platforms. TryUnfurl simulates the same server-side fetch that iMessage performs and shows detected image dimensions and any missing tags — without needing to send a real iMessage.
Re-send the link to see the updated preview — iMessage caches previews per device and per message thread. To see a fresh preview, send the link in a new message (or to a different contact). There is no server-side cache to clear.
iMessage Preview Caching
iMessage is unique among messaging platforms in that there is no central server-side cache to clear. The preview is generated and stored locally on the recipient's device at the time the message is received.
This means:
- After you fix your og: tags, new shares will immediately show the correct preview
- Existing messages in existing threads will continue to show the old (stale) preview on recipients' devices
- The recipient can delete the message and ask you to resend the link to get a fresh preview
This is different from Facebook (Sharing Debugger), LinkedIn (Post Inspector), and Twitter/X (Card Validator), which all have server-side cache-clearing tools.
iMessage vs. Other Messaging Apps
| Feature | iMessage | Telegram | Slack | |
|---|---|---|---|---|
| Reads og: tags | ✓ | ✓ | ✓ | ✓ |
| Executes JavaScript | ✗ | ✗ | ✗ | ✗ |
| Server-side cache | ✗ (device only) | ✓ | ✓ | ✓ |
| Cache-clearing tool | None | None | None | None (re-paste) |
| Minimum image size | 300×157 px | 300×200 px | ~200×200 px | ~80×80 px |
| HTTPS image required | ✓ | ✓ | ✓ | ✓ |
Frequently Asked Questions
Why does my iMessage preview show only a URL with no card?
og:title is likely missing from the raw HTML, or iMessage's fetcher couldn't reach your page. Confirm your URL is publicly accessible and that og:title is set in the server-rendered HTML (not injected by JavaScript).
How do I refresh an iMessage link preview?
There is no cache-clearing tool for iMessage. The preview is cached on each recipient's device. To force a fresh preview, the recipient should delete the message and you should resend the link. Alternatively, test it yourself by sending the updated URL to a new contact.
Why does my image appear as a small square thumbnail in iMessage instead of a large card?
iOS crops og:image to a square thumbnail in compact thread views. The full 1200×630 image appears when the recipient taps on the preview to expand it. For the best compact thumbnail, ensure the key visual subject of your image is centred so it looks good when square-cropped.
Does iMessage support Twitter Card tags?
No. iMessage only reads Open Graph (og:) tags.
Do Android Messages / RCS previews work the same way?
Android Messages and RCS link previews also read Open Graph tags server-side, but the rendering differs slightly from iMessage. For cross-platform coverage, ensure your og: tags are complete — this covers both iMessage on iOS and RCS/Messages on Android.
Why does my preview work in Safari but not in iMessage?
Safari renders your page with full JavaScript execution; iMessage's fetcher does not. If your og: tags are injected by JavaScript, they'll be visible in Safari but invisible to iMessage. Use server-side rendering or static HTML to make them available to all crawlers.