Link Not Unfurling in Slack

Why your URL shows as plain text with no preview

OG tags outside the 32KB window

Slackbot only reads the first 32KB of your HTML. If your <head> has large inline styles or scripts before the meta tags, the crawler never reaches them and the link won’t unfurl. Move your OG tags to the top of <head>.

Diagnosis checklist

  1. Check the 32KB window: view source and confirm og:title, og:description, and og:image appear within the first 32KB
  2. Check server-side rendering: curl your URL and verify the tags are in the HTML, not injected by JS
  3. Check HTTP status: must be 200 OK; 4xx/5xx errors prevent unfurling
  4. Check HTTPS: Slack requires it; invalid SSL certs also break unfurling
  5. Check the cache: if you just added tags, Slack may have cached the empty state. Wait 30 minutes or delete the message and re-post
  6. Check workspace settings: admins can disable link previews entirely

Bot messages

Slack doesn’t auto-unfurl links in bot messages. You need unfurl_links: true in the chat.postMessage call:

{
  "channel": "C1234567890",
  "text": "Check out https://example.com",
  "unfurl_links": true
}

Without that flag, links in bot messages stay as plain text.

Client-side rendering

Slackbot doesn’t run JavaScript. If your app renders OG tags client-side (React, Vue, Angular, etc.), you need SSR, pre-rendering, or static meta tags in your HTML template.

Testing

Simulate Slackbot’s request, including the Range header:

curl -A "Slackbot-LinkExpanding 1.0 (+https://api.slack.com/robots)" \
     -H "Range: bytes=0-32768" \
     https://yoursite.com/page | grep -i "og:"

If your tags show up, use the unfurl debugger to confirm the preview looks right.