Slack Link Preview: Tags, Image, and Unfurl
A Slack link preview, or unfurl, reads Open Graph tags. See the title, description, and image Slack can show, and how to check them before you paste the URL.
By Abid Ali, maintainer of OG Scope
Published

A Slack link preview is the block Slack adds under a URL in a channel or a direct message. Slack calls that an unfurl. For a public web page, the slack unfurl is built from Open Graph tags: og:title, og:description, and og:image. og:site_name can appear as the source name beside the card.
Workspace apps can supply a custom unfurl for a domain they own. That path is for Slack apps, not for a normal article or product page. A marketing or docs page should set the Open Graph tags and let the default unfurl use them. This page is that default path.
Tags for the default unfurl
The tags have to be in the HTML the server sends. Slack does not run the page's JavaScript to find them. View the page source, not the inspector after the app has hydrated.
<meta property="og:title" content="Write limit drops to 60 requests a minute" />
<meta property="og:description" content="The change lands on 18 March. Existing keys keep the old limit until then." />
<meta property="og:image" content="https://example.com/docs/rate-limit.png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:site_name" content="Northwind Docs" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:image" content="https://example.com/docs/rate-limit.png" />- The title is one line. Put the subject first.
- The description is a sentence or two. Longer text is trimmed in the client.
- The slack og image needs an absolute https URL. 1200 x 630 is the size most often used for a large card.
og:site_nameis the short source label. Use the site name, not the article title again.
This sample is a docs page. A default slack unfurl built from these tags has four pieces: the title "Write limit drops to 60 requests a minute," the description with the 18 March date, the source name Northwind Docs from og:site_name, and the image at https://example.com/docs/rate-limit.png when og:image is set.
twitter:image points at the same file on purpose. Slack's robots documentation says link expansion also reads Twitter Card markup. Delete og:image and leave twitter:image, and the Slack estimate on this site has no picture. The channel may still show one. Confirm that in a workspace you can edit. This page does not call Slack, and the card here is not a screenshot of an unfurl.
The OG image guide covers the image URL and the file. Crop to 1200 x 630 in the OG image size tool before you upload. Keep the subject near the center so a tighter crop still shows it.
When the image is missing
A title with no picture means the image request failed or the tag was absent. Open the image URL in a private window. A 404, a redirect to a login page, or a relative path is the usual cause. A file under about 200 pixels on a side is a weak card image. Fix the file first, then paste the page URL again.
An empty og:image content attribute is the same as a missing tag. A URL that returns HTML, even with a 200 status, is not an image. The slack og image has to be the file itself: JPG, PNG, or WebP, on a host that answers a request with no cookie.
A slack cached unfurl
A slack cached unfurl is a copy Slack already showed for that URL or that message. After the tags change, remove the old attachment if the message is yours, or send the link in a new message. A changed image URL is more reliable than overwriting the same file and expecting every client to drop its copy.
This guide does not state a fixed refresh time. Workspace settings and Slack apps can also suppress unfurls for some domains. If a public page unfurls in one workspace and stays a bare URL in another, the HTML may not be the only difference. The second workspace may have link previews turned down, or an app that handles that domain.
A custom app unfurl is a different feature. It can ignore Open Graph tags and draw its own attachment. If your domain has such an app installed, the card in that workspace is the app's card. The public tags still matter everywhere the app is not installed.
Title, description, and source name
Write og:title as the line a teammate needs before they open the page. A title that repeats the domain wastes the only bold line. og:description should add a fact the title did not already say. og:site_name stays short, the product or publication name, so the unfurl has a source without a second headline.
If the HTML title and og:title differ, Slack uses the Open Graph title for the unfurl. Keep them aligned unless the share line really should be shorter than the browser tab. A mismatch that is accidental is harder to spot in the channel than in the page source.
What the unfurl cannot do
The default unfurl is a title, a description, a source name, and one image. It does not run buttons from your page, play a video inside the card, or read text that appears only after a click. If the message needs those, the page still needs the Open Graph tags for everyone else, and a Slack app is a separate project.
A link inside a code block, or a URL with no scheme, may stay plain text. Paste a full https:// URL on its own line when you are testing. A URL shortener adds a redirect. The tags Slack should read are on the final page, after that hop, not on the shortener's interstitial.
Signed-in previews and paywalled articles often return a login document to Slack. The unfurl then shows the login title, or nothing useful. Put the share tags on a public URL, or on the HTML your server sends to a logged-out request.
Check the page before you paste it
The Open Graph checker shows an estimated Slack card from the public HTML, next to the tags it used. The card is an estimate, not a screenshot of Slack, and this site is not affiliated with Slack. Slack's robots documentation says link expansion reads oEmbed discovery tags and Twitter Card markup as well as Open Graph tags, and that those responses are cached globally for around 30 minutes. A missing image in this estimate is a reason to check og:image. It is not proof the channel unfurl will have no picture, because an oEmbed endpoint or twitter:image can still supply one. The 30 minute figure is Slack's published cache guidance, not a promise that a message already sent will update.
The Discord link preview guide covers the same tags in another chat app, where the card is called an embed. Paste the URL only after the checker shows a title and a loaded image. Then send it once in a channel you can edit, so a wrong card can be removed.