Peekly

Mastodon Link Preview Checker

The Mastodon server that sees a post fetches the first link and stores a preview card of its own. Paste a URL to check the Open Graph tags that card is built from. The cards below are the other platforms that read the same tags — Peekly does not draw a Mastodon post.

Free. No signup. Public pages only.

How Mastodon builds the preview

  • oEmbed, then Open Graph. In the current Mastodon source, the preview-card fetch tries oEmbed first. A link, photo, or video oEmbed response becomes the card. A rich oEmbed response is rejected, and the Open Graph path runs instead. With no oEmbed card, the title is a NewsArticle or WebPage JSON-LD headline, then og:title, then the document title. The description follows the same order: that JSON-LD description, then og:description, then the meta description. A headline that disagrees with og:title is what the card will show. The image is og:image only. twitter:image is not read. A relative og:image is resolved against the page URL. Only the first link in the post is fetched, and a post that already has media or a quote is skipped. The request asks for text/html and sends a user agent that ends in Bot: Mastodon/<version> (http.rb/<version>; +https://<that-server>/) Bot. The host in the agent is the instance doing the fetch. There is no single Mastodon crawler to allow. The response has to be HTTP 200 and text/html. Mastodon parses that HTML with Nokogiri. It does not run JavaScript.
  • Each server has its own card. The card is a row on the server that processed the post, keyed by the final URL after redirects. A same-host canonical link or og:url replaces that key. A canonical on another host is ignored, so a tag pointing at a different site does not move the card. The fetch service reuses a card that is less than two weeks old. It fetches again when there is no row, when the row is older than that, or when the row has no image file. A card that saved the old image keeps it for the two weeks. A card that never saved an image can recover on the next post. Every other Mastodon server has its own table. A boost does not update a card another server already stored. Misskey, GoToSocial, and the rest of the Fediverse fetch with their own code. Mastodon does not publish a debugger. An admin of one server can drop local thumbnails with tootctl preview_cards remove. That command's description says media from the last 14 days will not be fetched again until the link is posted two weeks after the last usage. A query string such as ?v=2 is a different URL, and a new card, on every server that sees it.
  • Why the image is missing. Preview-card images are JPEG, PNG, GIF, or WebP, under 8 MB. Anything else fails validation, the image is dropped, and the title and description are saved anyway. Mastodon then stores a thumbnail capped at 230,400 pixels, about 640×360, and converts a GIF to JPEG. There is no published minimum size. Ship the same 1200×630 image you use elsewhere. A login wall, a bot challenge, or a filter that blocks a user agent containing Mastodon leaves that server with nothing to parse. og:image:alt is kept as the image description. fediverse:creator attributes an account. It does not fill in a missing title or image.

Tags covered: og:title · og:description · og:image · og:image:alt · og:url · og:site_name

More checkers

Twitter Card ValidatorOpen Graph CheckerLinkedIn Link Preview CheckerDiscord Embed PreviewWhatsApp Link Preview CheckerSlack Link Preview CheckeriMessage Link Preview CheckerFacebook Link Preview CheckerOpen Graph Image SizeTelegram Link Preview CheckerReddit Link Preview CheckerNext.js Open GraphRefresh a Link Preview CacheBluesky Link Preview CheckerMicrosoft Teams Link Preview CheckerFix a Broken Open Graph PreviewAll platforms

What each platform reads

  • X / Twittertwitter:card, twitter:* → og:* fallback1200×630 (min 300×157), < 5 MB
  • Facebookog:title, og:description, og:image1200×630, 1.91:1
  • LinkedInog:title, og:image (og: only)1200×627, 1.91:1
  • Discordog:site_name, og:*, theme-color, twitter:cardLarge image needs summary_large_image
  • Slackog:site_name, og:title, og:description, og:image1200×630
  • WhatsAppog:title, og:description, og:imageKeep < 300 KB

Guidance based on each platform's public documentation and observed behavior. Platforms change their rules without notice.

FAQ

+Is Peekly free?

Yes. Checking a single URL is free forever — no signup and no limit on one-off checks. Batch watching and monitoring may arrive later as a paid Pro plan; the free single-URL tool stays.

+Why does my link show no image when I share it?

Usually one of four things: there's no og:image tag, the image URL is relative instead of absolute, the image is behind a login, firewall or bot block, or the file is too big or in an unsupported format like SVG. Peekly checks all four and tells you which one it is.

+What size should my og:image be?

1200×630 pixels (a 1.91:1 ratio) as a PNG or JPG under about 300 KB. That size works for large cards on X, Facebook, LinkedIn, Discord, Slack and WhatsApp.

+Do I need twitter: tags if I already have Open Graph tags?

X reads og:title, og:description and og:image as fallbacks, but you still need twitter:card set to summary_large_image if you want the big image card. Without it, X shows a small thumbnail.

+I fixed my tags but the old preview still shows. Why?

Platforms cache link previews, sometimes for days. Facebook and LinkedIn let you force a refresh with their own debugging tools. On X, Slack and Discord the cache usually expires on its own, or you can add a query string such as ?v=2 to the URL.

+Do you store the pages I check?

No. We fetch the page once to read its <head>, show you the result, and don't save the page or the result. We only fetch public http(s) URLs, and private or internal addresses are blocked.

+Are the previews pixel-perfect?

They're close approximations of each platform's current card layout, built from the same tags the platforms read. Platforms change their designs from time to time, so treat them as a very good guide rather than a screenshot.

$9

One time

A written fix for the batch.

Up to 25 URLs. We check og:image, Twitter cards, size, redirects, and cache, then send copy-paste meta tags within 48 hours. The free single-URL check stays free.

Get the fix report — $9