Skip to content

Link previews

Slack link preview: how unfurling works and how to fix it

By Hannah Voss, Editor · Reviewed September 2026 · Updated · 10 min read

Quick answer

Slack builds a link preview by fetching your page with a robot called Slackbot-LinkExpanding and reading its oEmbed, Twitter Card and Open Graph tags. Slack caches the result for around 30 minutes. When no preview appears, the page usually has no tags, sits behind a login, blocks the robot, or the message holds more than five links.

A cut-paper link preview card with a grey landscape panel, two blank text bars and a small embossed seal in one corner

When someone posts a URL in a channel or a DM, Slack fetches the page and attaches a preview under the message. Slack calls this unfurling. Its developer page on unfurling links in messages describes the default, classic unfurling: Slack crawls the URL, looks for common Open Graph and X (formerly Twitter) Card metadata, and renders a small version of the content.

There is a second path. A Slack app can register up to five domains and draw its own previews for them. That only happens in workspaces that installed such an app for your domain, so for an ordinary WordPress site, classic unfurling is what your readers see. This guide covers that path. The general picture of cards across networks is on the link previews and Open Graph hub.

The Slack Robots page adds detail about the fetch itself. The link expanding robot fetches as little of the page as it can, using HTTP Range headers, to extract meta tags. If the tags point at an image, video or audio file, it fetches that file as well to check it is valid.

How a Slack link preview is built01Link postedin a message02Robot fetchesLinkExpanding03Tags readoEmbed, OG, card04Cachedabout 30 min05Previewunder message
Every step after the post happens on Slack's side; your job is the tags and access.

Which tags does Slack read?

Slack names three formats: oEmbed, Twitter Card tags and Open Graph tags. It does not publish a priority order between them, and it does not publish image size or file size rules. So the safe setup is one complete Open Graph set with a twitter:card line, where the Twitter values either match the Open Graph values or are left out.

Tag groupWhat Slack documentsWhat to do
Open Graph: og:title, og:description, og:image, og:site_nameNamed on both the robots page and the unfurling pagePrint one complete set, once
Twitter Card: twitter:card, twitter:title, twitter:imageNamed on both pagesAdd twitter:card; keep values equal to the og values
oEmbed discovery linkNamed on the robots pageOnly worth adding if you serve embeddable media
Which set wins when values differNot documentedAvoid the question by keeping them identical
Image dimensions and file limitsNot documentedUse the size that suits every other network

In WordPress, one SEO plugin should print these; the setup is in printing Open Graph tags from WordPress. For the image, a 1200 by 630 share image keeps its subject in the centre where crops leave it alone. A head that Slack can read looks like this.

<meta property="og:site_name" content="Example Town Journal">
<meta property="og:title" content="Why the town clock runs slow">
<meta property="og:description" content="A 140 year old escapement and a repair that took three attempts.">
<meta property="og:url" content="https://example.com/town-clock/">
<meta property="og:image" content="https://example.com/wp-content/uploads/town-clock-1200x630.jpg">
<meta name="twitter:card" content="summary_large_image">

The twitter line is the one most sites forget; its values and the name versus property detail are covered under the twitter:card tag set.

What user agent does Slack use?

Each Slack robot identifies itself with its own user agent. The robots page lists three, and only the first one builds link previews.

RobotUser agent stringJob
Link expandingSlackbot-LinkExpanding 1.0 (+https://api.slack.com/robots)Fetches links people post and reads their meta tags
Image proxySlack-ImgProxy 0.19 (+https://api.slack.com/robots)Fetches and caches images posted into channels, served over HTTPS
SlackbotSlackbot 1.0 (+https://api.slack.com/robots)Everything else, such as API requests and outgoing webhooks

One detail surprises people. Slack says it does not currently honor robots.txt files: it tried, received too many complaints, and decided that a robot acting for a human who posted a link is not a crawler. A Disallow line will neither hide your page from Slack nor explain a missing preview. If you want your site kept out of Slack embeds, the robots page asks you to contact Slack.

  1. Open the page logged out and view source. Search for og: and twitter:. You want one og:title, one og:image and one twitter:card. To read the card without posting anything, paste the HTML into our paste-the-source preview checker, which runs in your browser and fetches nothing.
  2. Fetch the page as the robot, with the curl lines below. You want a 200 status and the same tags you saw in the browser. A 403, a challenge page or a login page means the robot sees something your readers do not.
  3. Post the link in a conversation where it has not appeared in the last hour, such as a DM to yourself. The Help Center says no preview expands if the same link was shared in the same conversation within the past hour.
  4. If you administer a workspace, the Help Center points to a URL debugging tool at api.slack.com/tools/unfurl-debugger that shows which preview metadata Slack pulls. When we opened it on November 10, 2026, it redirected to a workspace sign in page, so you need a Slack account to use it.
curl -s -A "Slackbot-LinkExpanding 1.0 (+https://api.slack.com/robots)" https://example.com/town-clock/ | grep -iE "og:|twitter:"

curl -s -o /dev/null -w "%{http_code} %{content_type}\n" -A "Slackbot-LinkExpanding 1.0 (+https://api.slack.com/robots)" https://example.com/wp-content/uploads/town-clock-1200x630.jpg

How do you remove or block a Slack preview?

These click paths come from the Help Center articles Share links and set preview preferences and Manage link previews, as published in November 2026.

  1. Remove one preview on desktop

    Hover over the link preview, then click the x that appears on the left side of the link.

  2. Remove one preview on mobile

    Long press the link in the message, then tap Remove Link Preview.

  3. Block a website for the workspace

    In the desktop app, hover over the shared link and click the close icon at the top left of the preview. Check Also block previews from this website in the future, choose an option from the drop-down menu, then click Remove and Block.

  4. Unblock a website

    Owners and admins: from the Home tab click Admin in the sidebar, select Workspace settings, open the Attachments tab, and under Blocked previews click the x next to the website. On Enterprise plans, start from your organization name, then Tools & settings, then Workspace settings.

  5. Turn previews off for yourself

    Click your profile picture in the sidebar, select Preferences, click Messages & media, and under Inline media & links uncheck Show images and files from linked websites and Show text previews of linked websites.

Slack notes that some third-party app previews stay on even with those boxes unchecked. If you post through the API, the unfurling page says setting both unfurl_links and unfurl_media to false stops Slack from crawling the link at all. It also never unfurls a link whose label is the whole URL minus the protocol, such as a link to http://example.com labelled example.com.

How do you refresh a Slack preview after changing tags?

The robots page says responses are cached globally across Slack for around 30 minutes, and that you should not see more than one request for the same URL more often than that. Neither Help Center article describes a button that forces a fresh fetch. The practical order is:

  1. Fix the tags and purge your page cache and CDN for the URL.
  2. Confirm the new tags with the robot curl above.
  3. Wait at least 30 minutes from the last time the link was posted anywhere in Slack.
  4. Post the link in a conversation where it has not appeared in the past hour.

Because the cache note is about the same URL, a test URL with a harmless query string, such as ?v=2, is a new address to Slack. Use that for testing only; the address you want people to share is the canonical one. Slack's documentation does not say whether previews on older messages update, so if an old message matters, remove its preview and post the link again.

CauseWhere Slack says soFix
The page has no preview dataHelp Center, share links articleAdd Open Graph tags in the server HTML
The page is private or behind a loginHelp Center: private pages and password protected videos do not previewShare a public URL; the robot cannot log in
The same link was shared in that conversation within the past hourHelp CenterTest in another conversation or wait
The message has more than five linksHelp CenterSplit the links across messages
The link has no http:// or https://Help CenterPaste the full URL
Audio or video on a host Slack has not allowlistedHelp CenterLink to a page about the media instead
A workspace admin blocked the siteManage link previews articleAsk an admin to remove it under Blocked previews
The label equals the URL minus the protocolDeveloper unfurling pageUse a descriptive label, or the full URL

Slow pages are the gap in the docs. Slack does not publish a timeout for the robot. What it does say is that the robot fetches as little of the page as it can, so keep the Open Graph tags near the top of the head, ahead of large inline scripts and styles, and make sure the image URL answers quickly. Discord, by contrast, does publish a fetch time budget, which is covered in how Discord builds embeds.

What goes wrong

  • A security rule blocks the robot. Firewall and bot protection settings that challenge unknown agents return a challenge page to Slackbot-LinkExpanding, and the preview shows its title or nothing. Allow the user agent, then test with curl.
  • Tags added by JavaScript. The robots page describes reading meta tags from a partial fetch of the page. Slack does not document running scripts, so print the tags in the HTML your server sends.
  • Two og:image tags. A theme and a plugin each print one, and Slack documents no rule for which one it uses. The cleanup is the same as in the duplicate tag fix list.
  • Retesting in the same channel. Within an hour of the first share the link will not expand again there, which looks exactly like broken tags.
  • Expecting robots.txt to hide a page. Slack does not honor it. Use a login, or contact Slack as its robots page suggests.
  • Judging a fix too early. The 30 minute cache means a correct fix can look broken for half an hour.

Check it worked

  • The robot curl returns 200 and prints one og:title, one og:image and one twitter:card.
  • The og:image URL returns 200 with an image content type to the same user agent.
  • A post in a fresh DM shows your title, description and image under the message.
  • Your site is not listed under Blocked previews in the workspace Attachments settings.
  • The same link previews for a colleague whose preferences have previews switched on.

Sources

Questions

What tags does Slack use for link previews?

Slack's robot looks for oEmbed, Twitter Card and Open Graph tags. Slack does not publish which set wins when they disagree, so print one Open Graph set plus a twitter:card line and keep the values identical.

What is the Slack link preview user agent?

The robot that builds previews identifies as Slackbot-LinkExpanding 1.0 (+https://api.slack.com/robots). Images posted into channels are fetched by Slack-ImgProxy, and other requests by Slackbot 1.0, according to Slack's robots page.

How long does Slack cache a link preview?

Around 30 minutes, according to Slack's robots page, and the cache is global across Slack. Wait out that window after fixing tags, then post the link in a conversation where it has not appeared in the past hour.

Does Slack respect robots.txt?

No. Slack says it does not currently honor robots.txt files, because its robot acts for a person who posted the link rather than crawling. To keep your site out of Slack previews, Slack asks you to contact it.

Why does my link preview show in one channel but not another?

The Help Center says a link does not expand again if it was shared in the same conversation within the past hour. A workspace block, more than five links in the message, or personal preview settings can also hide it.

Share this guide

Hannah Voss, Editor. Checks every guide against a working WordPress install and the networks' current documentation. Last reviewed September 2026.

  1. Discord embed: how link previews are built and fixedHow Discord builds a link embed from your page: the og and twitter tags it reads, theme-color, layouts, limits, the 30 minute cache, testing and fixes.9 min read
  2. Adding Open Graph tags in WordPressAdd Open Graph tags to WordPress with an SEO plugin or theme code: the four required tags, image tags, per-post overrides, and how to avoid duplicate tags.7 min read
  3. Link preview checker: test your Open Graph and card tagsPaste a page's HTML to check its Open Graph and X card tags, see mock previews, and find duplicate, missing or relative tags. Runs in your browser only.10 min read
  4. Twitter cards on X: tags and testingSet up Twitter card tags so links to your WordPress posts show a large image on X: the summary_large_image card, fallbacks to Open Graph, sizes and testing.6 min read