SiteAssets SiteAssets
Blog · Platforms 5 min read

Discord embeds: why the image is missing

Discord renders two very different cards depending on message width and client. A page that looks right on desktop can lose its image entirely in compact mode. These are the constraints behind that.

5 min read SiteAssets team

Discord reads Open Graph, renders a wide embed when the message has room, and switches to a compact layout with a small square thumbnail when it does not. Both come from the same og:image, which is why the corner-safe rule matters more here than on any other platform.

What Discord reads

  • og:title for the embed title, truncated around 256 characters.
  • og:description for the body, capped at 2048 characters but visually clipped much earlier.
  • og:image for the large embed image; some clients fall back to twitter:image.
  • og:site_name for the small label above the title.
  • og:type and og:url for the link target and embed type.

Why the image silently fails

  1. 01 The image returns a non-200 status to the unfurler, often because of a hotlink rule or a signed URL that expires.
  2. 02 The file is served with the wrong content type, so Discord refuses to decode it.
  3. 03 The image is under roughly 300 × 200, and the embed falls back to text.
  4. 04 The URL requires cookies or a challenge page, which the unfurler cannot complete.
  5. 05 The page itself returns a redirect chain that ends without tags.

The square thumbnail in compact mode

In compact mode Discord crops og:image to a square and places it on the right. A card designed with a wordmark on the far right puts that wordmark under the crop line. Keep the focal point within the centre 60% of the canvas and both layouts survive.

Beating the cache

Discord keys its embed cache on the full URL string. Appending any query parameter creates a new cache entry, which makes it the fastest way to test a fix. This only proves the tags are correct — for real shares you want the clean URL, so fix the tags before the first public post.

bash
# Discord's unfurler identifies as Discordbot
curl -A "Mozilla/5.0 (compatible; Discordbot/2.0; +https://discordapp.com)" \
  -s https://example.com/article | grep -E 'og:(title|image|description)'

Getting both layouts right

Design at 1200 × 630, keep content inside the central safe area, and verify the square crop by literally cropping the file to a centre square before publishing. If the cropped version still reads as your brand, the embed is done.

Try it on your own site

Fifteen checks, about five seconds.

Paste a deployed URL and read the check table: weight, status and the rule behind every row.