Skip to main content

Slack Link Preview Not Working? Fix It

5 min read

You paste a URL into a Slack channel and nothing happens. No thumbnail, no title, just a plain link. Slack unfurls links by fetching Open Graph tags from your page. When the crawler fails or tags are missing, the preview stays blank.

Short answer

Add og:title, og:description, and og:image to your server-rendered HTML with absolute HTTPS URLs. Confirm Slackbot can reach your page (check robots.txt and firewall rules). Test the og:image URL directly. Paste your link into OpenGraph Check before sharing in Slack.

How Slack unfurling works

When you post a URL in Slack, the app sends a request to unfurl the link. Slack's crawler fetches your HTML and reads Open Graph meta tags:

<meta property="og:title" content="Page Title">
<meta property="og:description" content="Short summary.">
<meta property="og:image" content="https://example.com/og.jpg">
<meta property="og:url" content="https://example.com/page">

Slack renders an attachment card below your message with title, description, and image.

Slack does not execute JavaScript. Meta tags must be in the initial HTML response.

No preview at all vs. partial preview

SymptomLikely cause
Plain URL, no cardUnfurling disabled, crawler blocked, or no OG tags
Title and text, no imageog:image missing or image fetch failed
Wrong titleMissing og:title, fallback to page <title>
Preview in one workspace, not anotherWorkspace unfurl settings or link already cached
Link unfurls slowlyServer response time or large image

Check Slack workspace settings

Before debugging your site, confirm unfurling is enabled:

  1. Workspace admins: Settings & administrationWorkspace settings
  2. Under Permissions, check that link previews are allowed
  3. Some enterprise workspaces restrict unfurling for external domains

Individual users cannot override a workspace-level block.

Step 1: Verify Open Graph tags in source HTML

  1. View page source.
  2. Search for og:title and og:image.
  3. Confirm all URLs are absolute (https://example.com/...).

If your app is a single-page application, use SSR or framework metadata APIs so tags appear before JavaScript runs.

Reference: Open Graph Tags Explained.

Step 2: Allow Slackbot in robots.txt

Slack identifies as Slackbot or Slackbot-LinkExpanding. Your robots.txt should not block it:

User-agent: Slackbot
Allow: /

User-agent: Slackbot-LinkExpanding
Allow: /

Also allow other common crawlers if you share across platforms:

User-agent: LinkedInBot
Allow: /

User-agent: Twitterbot
Allow: /

Step 3: Test image and server response

Open og:image in a browser tab:

  • HTTP 200 response
  • HTTPS required
  • No authentication wall
  • Response time under 3 seconds
  • File size under 5 MB (under 1 MB is better)

Slack may skip the image if the download times out but still show title and description.

Step 4: Check firewall and CDN

Cloudflare bot fight mode, aggressive WAF rules, and geo-blocking can prevent Slack from fetching your page. Whitelist Slackbot user agents or reduce bot challenges on public pages.

If your CDN caches error responses for bots, purge the cache after fixing the page.

Slack-specific unfurl behavior

Caching

Slack caches unfurl data per URL. After fixing tags, post the link in a new message or add a query parameter (?s=1) to force a fresh fetch.

Multiple URLs in one message

Slack unfurls the first recognizable URL. Put the link on its own line for reliable unfurling.

Internal vs. external links

Links to Slack-connected apps (Google Drive, Figma, etc.) use native unfurling, not Open Graph. This guide covers standard website URLs.

localhost and staging URLs

Slack cannot unfurl localhost or VPN-only staging servers. Test with a publicly accessible URL.

Image recommendations for Slack

PropertyRecommendation
Size1200 × 630 px
FormatJPG or PNG
URLAbsolute HTTPS
File sizeUnder 1 MB

Slack crops images to fit the card. A 1.91:1 ratio avoids awkward cropping.

Common mistakes

MistakeFix
Relative og:image pathUse full https:// URL
Meta tags in client-side JS onlyServer-render HTML tags
noindex on page with X-Robots-Tag blocking allAllow crawlers on shareable pages
Password-protected staging URLTest on production or public preview
og:image points to HTML pagePoint to actual image file

FAQ

Does Slack use Twitter Card tags?

Slack primarily uses Open Graph. Include og:* tags. Twitter tags alone may not be enough.

Why did unfurling work before and stop now?

Check recent deploys: robots.txt changes, CDN rules, SSL expiry, or removed og:image tag.

Can I disable unfurling for specific links?

Slack users can remove an unfurled preview from a message. Site owners cannot opt out per URL from Slack's side.

Does Slack unfurl in DMs and channels the same way?

Yes. Same crawler and OG parsing for channels, DMs, and private groups.

How is Slack different from Discord unfurling?

Both read Open Graph tags but use different crawlers and caches. Fix tags for each platform independently. See Discord Link Preview Not Working.

Do I need a Slack app for link previews?

No. Standard OG tags on public pages are sufficient. Slack apps are for custom interactive unfurling.

Bottom line

Slack link previews need Open Graph tags in server HTML and a crawler that can reach your page. Add og:title, og:description, and og:image on HTTPS, allow Slackbot in robots.txt, keep images fast and small, then test with a fresh message. Most unfurl failures resolve once the crawler gets valid tags and a 200 response.