# rich-link-previews
> Create and debug rich link previews (Open Graph + Twitter/X Cards) for iMessage, WhatsApp, Slack/Discord, and social platforms. Use when user asks about og tags, twitter cards, link previews, social sharing metadata, or when a shared link preview looks wrong or missing.
- Author: Marcus Vorwaller
- Repository: marcus/marcus-skills
- Version: 20260120170157
- Stars: 0
- Forks: 0
- Last Updated: 2026-02-06
- Source: https://github.com/marcus/marcus-skills
- Web: https://mule.run/skillshub/@@marcus/marcus-skills~rich-link-previews:20260120170157
---
---
name: rich-link-previews
description: Create and debug rich link previews (Open Graph + Twitter/X Cards) for iMessage, WhatsApp, Slack/Discord, and social platforms. Use when user asks about og tags, twitter cards, link previews, social sharing metadata, or when a shared link preview looks wrong or missing.
---
# Rich Link Previews (Open Graph + Twitter/X Cards)
Help users add the right meta tags, choose image sizes that survive crops, and debug missing/broken previews.
## Ready-to-paste snippet
Default answer when user says "just tell me what to add":
```html
```
Twitter/X falls back to OG tags, so `twitter:title` and `twitter:description` are optional.
## Image sizing
| Platform | Size | Aspect | Notes |
|----------|------|--------|-------|
| OG default | 1200x630 | 1.91:1 | Works across most platforms |
| Twitter/X | 1200x600 | 2:1 | For `summary_large_image` |
| WhatsApp | 300px+ wide | <= 4:1 | **Must be < 600KB** |
**Composition rules**: Treat it like a phone billboard. 3-7 words max. Critical content in center (assume top/bottom cropping). High contrast, no thin fonts.
## Platform notes
**iMessage**: Emphasizes `og:title` and `og:image` over description. Make the title and image carry the message alone.
**WhatsApp**: OG tags must appear in first ~300KB of HTML response. Image must be < 600KB.
**SPAs**: Scrapers don't execute JS. Tags must exist in initial server HTML. Use SSR, prerendering, or dedicated share URLs.
## Before you ship
- [ ] All URLs absolute (not `/og.png`)
- [ ] Tags in server HTML, not client-injected
- [ ] `og:url` matches canonical URL
- [ ] Image returns 200 OK to anonymous requests
- [ ] Image < 600KB (for WhatsApp)
- [ ] No robots/auth blocking the image
## Common failures
- **No preview**: Tags only injected client-side, or og:image 403/404 to bots
- **Wrong image**: Multiple og:image tags (first one wins), or platform cache stale
- **Cropped badly**: Image too tall/narrow, or text at edges
- **WhatsApp broken**: Image > 600KB, aspect > 4:1, or tags too deep in HTML
## Debugging
See [references/debugging.md](references/debugging.md) for step-by-step commands.
Quick check:
```bash
curl -sL https://example.com/page | head -100 | grep -E "og:|twitter:"
```
**Cache busting**: Change the og:image filename. Platform validators (Facebook Debugger, X Card Validator) can force refresh.
## References
- [Open Graph Protocol](https://ogp.me/)
- [Twitter Cards docs](https://developer.x.com/en/docs/twitter-for-websites/cards/overview/abouts-cards)
- [Facebook Sharing Debugger](https://developers.facebook.com/tools/debug/)
- [Twitter Card Validator](https://cards-dev.twitter.com/validator)