I spent an afternoon last month trying to get a link preview to look right in Telegram. The image was the wrong aspect ratio. Simple enough, I thought — update the og:image dimensions. Except Telegram had cached the old metadata and the cache TTL is opaque. After an hour of trial and error I wrote a quick scraper to fetch what each platform's crawler actually sees, and that's how Novalink started.

The caching problem

Every platform caches OG metadata independently. Slack's cache TTL is roughly 30 minutes but refreshes on demand via their unfurl endpoint. Telegram's is much longer and there's no official invalidation. Twitter/X re-fetches when you use their Card Validator. Facebook has a Sharing Debugger. None of this is in the OG spec, because the OG spec says nothing about caching.

The result is that a change to your OG tags might show up in Slack in 30 minutes, in Telegram in 6 hours, and in iMessage whenever Apple's crawler decides to revisit.

The image size problem

Slack will reject images over 5 MB. Twitter/X crops to 2:1 unless you set twitter:card=summary_large_image. Telegram prefers 1.91:1 (1200×628). iMessage is unpredictable. The safest image is 1200×630 PNG under 1 MB, which nobody tells you anywhere in a canonical place.

What Novalink does differently

Instead of making you remember these rules, Novalink fetches the metadata, validates it against per-platform constraints, and shows you a preview as each platform would render it — all locally, without sending your URL to any external service. The image is downloaded and checked for dimensions, file size, and format. The text fields are checked for length limits. You get a pass/warn/fail per platform, not a vague "looks good."