iMessage Link Preview Not Working? How to Fix OG Tags on iOS

Links shared in iMessage showing no preview, wrong image, or just a plain URL? Learn why iMessage link previews fail and how to fix og:image, og:title, and og:description for iOS.

Why iMessage link previews break

When you paste or send a link in iMessage, iOS fetches Open Graph metadata from the page to render a rich preview card — complete with title, description, and image. If your og:title, og:description, or og:image tags are missing, malformed, or loaded via JavaScript, iMessage silently falls back to a plain URL with no card.

Apple's link preview crawler (used by iMessage and Safari) is conservative: it requires HTTPS, expects static HTML tags, and will not execute JavaScript to find metadata. This catches a lot of React, Next.js, and SPA sites that rely on client-side rendering for their <head>.

Quick fix checklist

  1. Add the required OG tags in static HTML: your page must include og:title, og:description, and og:image inside a server-rendered <head> block — not injected by JavaScript after load.
  2. Use HTTPS: both your page URL and your image URL must use HTTPS. iMessage will not load previews over plain HTTP.
  3. Use an absolute image URL: write https://yourdomain.com/og.jpg, not /og.jpg. Apple's crawler needs a fully-qualified URL to fetch the image.
  4. Meet Apple's image specs: recommended 1200×630 px (1.91:1 ratio). Minimum 600×315 px. Use JPEG or PNG. Keep file size under 8 MB.
  5. Make the image publicly accessible: open the image URL in an incognito browser tab. If it requires login, returns 403, or redirects, Apple cannot load it.
  6. Also add Twitter Card tags: iMessage on iOS 13+ can use twitter:card, twitter:title, and twitter:image as a fallback when OG tags are absent.

Common causes and specific fixes

1. JavaScript-rendered metadata

If you use React, Vue, or another SPA framework and inject meta tags on the client, Apple's crawler will never see them. Switch to server-side rendering (SSR) or static generation. In Next.js, use the built-in metadata export or generateMetadata(). In Nuxt, use useHead() within a server component.

2. Missing og:image

iMessage will show a card with title and description even without an image, but no image means a much smaller, less eye-catching preview. Always include og:image for maximum impact. Verify it with OG Fixer before deploying.

3. Cached old metadata

iOS caches link previews aggressively. After fixing your tags, the recipient may still see the old (broken) preview for a while. To test immediately:

  • Delete the existing message thread and send the link again.
  • Test from a different device or a device that has never seen the URL.
  • Add a query string like ?v=2 to bust the cache during development.

4. Image served from a CDN with restrictive headers

Some CDNs add Cache-Control: private or X-Robots-Tag: noindex headers that block Apple's crawler. Check your CDN configuration and ensure OG images are served with public cache headers.

5. Wrong image aspect ratio

Images that are too tall (portrait) or too wide (banner) may be cropped or rejected entirely. Stick to the 1.91:1 ratio (1200×630 px) for the best results across all Apple surfaces.

Minimum required tags for iMessage

<meta property="og:title" content="Your Page Title" />
<meta property="og:description" content="A short description of your page." />
<meta property="og:image" content="https://yourdomain.com/og-image.jpg" />
<meta property="og:url" content="https://yourdomain.com/your-page" />
<meta property="og:type" content="website" />

<!-- Twitter Card fallback (also used by iMessage) -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:image" content="https://yourdomain.com/og-image.jpg" />

How to test your iMessage link preview

The fastest way to preview your link before sending it to real users is to use OG Fixer. Paste your URL and instantly see how it will look on iMessage, Twitter, Slack, Discord, and more — without sending a single message.

You can also use Apple's Simulator (Xcode > Open Developer Tool > Simulator) to send your link to Safari or Messages on a virtual iPhone. Or simply AirDrop the link to yourself and check the preview in Messages.

iMessage vs other platforms — key differences

PlatformJS renderingCache TTLMin image
iMessageNoHours–days600×315 px
WhatsAppNo~3 days300×200 px
SlackNo~30 min200×200 px
DiscordNo~1 hour256×256 px
Twitter/XNo~7 days144×144 px

Fix your iMessage preview in 30 seconds

Paste your URL into OG Fixer and see exactly how your link will appear in iMessage, WhatsApp, Slack, and Twitter — before you send it. No sign-up required.

Preview my link now →

Related guides