What unfurling is
When someone posts a link in Slack, Slack’s link expander fetches the page and adds a preview under the message. That preview is the unfurl. Testing one normally means posting in a real channel, so this checker fetches your page instead, shows the unfurl it expects, and lists each problem with its fix. It’s an independent tool and the preview is an approximation, so post the link in Slack for the final check.
The tags Slack reads
Slack looks for oEmbed first, then Twitter Card and Open Graph tags, then the plain meta description. Most sites need only this:
<meta property="og:site_name" content="Your site">
<meta property="og:title" content="Your page title">
<meta property="og:description" content="One or two sentences about the page.">
<meta property="og:image" content="https://example.com/images/card.png">
<meta name="twitter:card" content="summary_large_image">Expect up to about 150 characters of title and 300 of description, under your favicon and site name. If you use both twitter: and og: tags, give them the same values, because the one that wins can depend on their order.
twitter:card decides the image layout: summary_large_image gives a large image, and anything else gives a small thumbnail beside the text. For a large image, 1200×630 works well, and the cheat sheet compares this with other platforms.
How Slack’s crawler behaves
Slack’s documentation (opens in a new tab) describes a few behaviors that are useful when you’re debugging:
- User agent: it identifies itself as
Slackbot-LinkExpanding. Allow it in any firewall or bot filter. - robots.txt: Slack doesn’t follow it for unfurls, because it’s fetching on behalf of a person. You can’t turn unfurls off with a
Disallowrule. - Partial fetches: it fetches as little of the page as it can, so keep your tags near the top of the
<head>. The health report flags tags that sit too far down. - Short cache: responses are cached across Slack for around 30 minutes.
What this preview doesn’t cover
Our preview doesn’t read oEmbed, or the twitter:label and twitter:data tags that can add extra rows to an unfurl. If your site uses them, Slack may show something different from this preview. Links to apps with their own Slack integration can also unfurl differently.
Why your Slack unfurl isn’t showing
- The image is small:
twitter:cardis missing or isn’tsummary_large_image. - There’s no unfurl: a firewall or bot filter may be blocking Slack. Our checker uses its own user agent, so a pass here doesn’t prove Slack gets through.
- It works elsewhere but not in one workspace: workspace or personal settings can limit link previews.
- The image doesn’t load: the URL is relative or needs a login, or the format is unsupported, such as SVG.
- The tags are added by JavaScript: link preview crawlers don’t run it, so the tags must be in the HTML your server sends.
Seeing your changes in Slack
There’s no public refresh tool. After you change your tags, wait out the short cache or post the URL with a harmless query string such as ?v=2. Messages already in a channel may keep their old unfurl, so post the link again if you need the new one. Then check your page again to confirm the tags are right.