ScreenshotNeo

BlogHow-to

Why Does Slack Show an Old Link Preview After a Page Update?

Slack builds classic link previews from page metadata, and its public docs do not promise when an old preview will refresh. Here’s how to diagnose the cause.

By the ScreenshotNeo team4 October 20267 min read

Slack can show an old link preview because a classic preview is created from metadata Slack fetched from the page, rather than being a live rendering of the page each time someone opens an old message. Slack’s public documentation does not specify how long classic previews are cached or provide a general user-facing command to refresh an old preview in place. If you own the page, check the current metadata it serves and inspect the URL with Slack’s URL debugging tool.

When a link is spotted, Slack crawls the URL and looks for metadata such as Open Graph and X Card tags. That metadata can supply the preview title, description, and image. Slack describes this as classic unfurling, the default path when no Slack app handles the domain. Slack’s link unfurling documentation explains the classic and app-controlled paths.

If you update a page after Slack has already generated a preview, the old message may continue displaying the earlier preview. The public Slack documentation reviewed here does not state a cache lifetime, a guaranteed refresh delay, or a universal refresh command for an existing classic unfurl.

2. Diagnose an outdated preview if you own the page

  1. Check what the URL serves now. Inspect the page response and confirm that the intended title, description, and image are present in the Open Graph or X Card metadata. Check the exact URL being shared, including redirects and canonical URL behavior.
  2. Use Slack’s URL debugging tool. Slack recommends its URL debugger to inspect the preview metadata it pulls. Compare that result with the metadata you expect. If Slack sees old values, investigate the URL response, redirects, or metadata deployment.
  3. Identify the kind of unfurl. If a Slack app is registered to handle the domain, the preview may be an app unfurl rather than classic metadata-based unfurling. App unfurls have separate event and API requirements.
  4. Make any metadata correction at the source. Ensure the shared page returns the updated values at the URL Slack is inspecting. Then use the debugger to verify what Slack currently reads. The documentation does not promise that this changes an already-posted classic preview.

Slack’s member help page, Share links and set preview preferences, also recommends the URL debugging tool when previews do not display as expected.

3. Distinguish classic previews from app unfurls

Classic unfurling is Slack’s default behavior when no app handler is configured for a domain: Slack fetches the URL, reads supported metadata, and displays a preview. An app unfurl is controlled by a Slack app using Slack’s Events API and Web API. Slack documents the chat.unfurl method for attaching or modifying an app unfurl on a posted message, subject to requirements such as associating the domain with the app and supplying a fully qualified URL.

This is relevant only if you operate a Slack app configured for the domain. It is not a general member-facing way to refresh an old classic preview. For current implementation details and requirements, consult the link unfurling guide and the chat.unfurl API reference.

4. What members and workspace admins can control

Slack provides member and administrator settings to manage whether link previews appear, remove previews, and block previews from particular sites. Those controls affect visibility and site handling; Slack’s cited help pages do not describe them as a way to refresh metadata already attached to an old message.

Clearing Slack’s desktop cache is documented for connection troubleshooting, not as a stale-preview fix. Slack’s connection troubleshooting instructions do not establish that cache clearing refreshes old link previews.

5. Common troubleshooting cases

What you see Likely check What to do
Slack’s debugger shows the old title, description, or image The URL response still exposes old metadata, or the shared URL redirects to a different page. Inspect the exact URL and its redirects, correct the metadata served there, then run the debugger again.
The debugger shows current metadata, but an old message still has the earlier preview The preview is already attached to that message; public guidance does not promise an in-place refresh mechanism for classic unfurls. Use the debugger as a diagnostic, and avoid assuming a specific wait time or refresh action will update the old message.
No preview appears The site may be blocked, previews may be disabled, or Slack may not be able to read the expected metadata. Check member and workspace preview controls and inspect the URL with Slack’s debugger.
The preview is generated by an app A Slack app may handle the domain instead of classic unfurling. Check the app’s event handling and unfurl implementation against Slack’s current API documentation.
A suggestion says to clear the desktop cache Slack documents cache clearing for connection problems, not as a link-preview refresh procedure. Use the URL debugger for preview metadata diagnosis; do not treat cache clearing as a documented fix for stale previews.

Reposting a link, changing query parameters, or waiting for a fixed duration may be suggested informally, but the reviewed Slack documentation does not say these reliably refresh an old classic unfurl. Treat them as unverified for a particular case.

6. Inspect the page metadata and screenshot the result

For a page you control, inspect the HTML response for the metadata Slack may use. This small Python script fetches a URL and prints common Open Graph and X Card tags. It is a page inspection aid; it does not query Slack’s internal preview state.

import requests
from bs4 import BeautifulSoup

url = "https://example.com/page"
response = requests.get(url, timeout=20)
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")

wanted = {
    "og:title", "og:description", "og:image",
    "twitter:title", "twitter:description", "twitter:image", "twitter:card",
}
for tag in soup.find_all("meta"):
    key = tag.get("property") or tag.get("name")
    if key in wanted:
        print(f"{key}: {tag.get('content', '')}")

Install the dependency with python -m pip install requests beautifulsoup4. The fetched HTML may differ from what a browser renders if the site builds metadata with JavaScript, requires authentication, varies by user agent, or redirects. Compare against the URL debugger’s result for Slack’s view.

A screenshot can help document the rendered page after an update, but a screenshot does not tell you what metadata Slack fetched. For a browser-based manual check, open the page in a browser and capture the page or its metadata inspection view. If you need repeatable visual captures, ScreenshotNeo is a website screenshot API and MCP server for developers. Its options include full-page capture, device and viewport selection, custom headers, cookies, user agents, and custom JavaScript. See the ScreenshotNeo website and API documentation.

7. Or skip the browser setup

Use one GET request to save a screenshot of the updated page. This captures the rendered page for visual review; use Slack’s URL debugger to inspect the metadata Slack pulls.

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com/page -o shot.webp

Equivalent Python and Node.js requests:

import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://example.com/page"}, timeout=90)
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://example.com/page' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`Screenshot request failed: ${res.status}`);
await import('node:fs/promises').then(fs => fs.writeFile('shot.webp', Buffer.from(await res.arrayBuffer())));

ScreenshotNeo accepts cookie and consent banners before capture and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each step can be turned off. Bot checks, blank pages, failed loads, timeouts, and cache hits cost nothing, and response headers indicate the page verdict and whether the request was billed. Its MCP server lets AI agents use take_screenshot, get_page_info, and capture_pdf. The free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 screenshots. Every feature is available on every plan. Read the ScreenshotNeo docs and product details, then sign up for 1,000 free screenshots a month with no card.

8. Reliability, performance, and cost considerations

  • Verify the exact URL: redirects and page variants can expose different metadata from the URL you intended to share.
  • Separate visual checks from metadata checks: a screenshot confirms what rendered in a browser capture; Slack’s URL debugger is the relevant check for metadata Slack reads.
  • Do not rely on an undocumented cache interval: Slack’s reviewed documentation does not give a refresh time for classic previews.
  • Choose captures for the debugging question: a full-page image helps review visual layout, while a normal viewport can be quicker for checking the visible page. Neither replaces the metadata debugger.
  • Account for capture cost: ScreenshotNeo plans range from a free 1,000 monthly shots to paid plans starting at $5 for 3,000; higher tiers are $15 for 15,000, $39 for 60,000, $99 for 250,000, and $249 for 1,000,000. Yearly billing gives two months free. Only clean shots are billed, and cache hits are free.

9. Frequently asked questions

Does Slack refresh an old preview when someone opens the message?

The reviewed public documentation does not say that an old classic preview is regenerated whenever someone views the message.

Can I force Slack to refresh a classic preview?

Slack’s public guidance reviewed here does not document a general user-facing command to refresh an old classic unfurl in place. The URL debugger helps inspect pulled metadata.

No. It is an app API for developers operating an app configured for the relevant domain, with Slack’s documented registration and request requirements.

A screenshot image is separate from the Open Graph or X Card image metadata. Update and inspect the metadata itself if the preview image is wrong.

Sources