Your og:image Updated — Slack Still Shows Last Quarter's Card
Launch day: marketing swaps the hero OG image at 09:00. By 09:05 the HTML on production has the new og:image. By 09:06 someone drops the URL in Slack — and the unfurl is still the winter campaign. The site is fine. The crawler cache is not.
Who fetches what
| Consumer | Fetcher | Cache behavior (practical) |
|---|---|---|
| Facebook / IG | Meta crawler | Sticky; use Sharing Debugger + “Scrape Again” |
| Slack | Slackbot unfurl | Aggressive; often needs a new URL or long wait |
| Discord | Discordbot | Usually quicker; still sticky on popular links |
| LinkedInBot | Debugger / Post Inspector style refresh | |
| iMessage / Messages | Apple bots | Opaque; image URL changes help most |
Your Chrome DevTools Network tab never speaks for these bots. They use their own user agents, often ignore your logged-in cookies, and may hit a regional edge that still holds an old HTML snapshot.
Verify the live HTML first
Before blaming Slack, curl the public URL the way a bot would:
curl -sL -A "facebookexternalhit/1.1" https://example.com/launch | findstr og:
Confirm:
- Absolute
https://image URLs (relative paths fail for many bots) og:title,og:description,og:image, and preferablyog:image:width/height- No
noindexor auth wall for anonymous GETs - Image returns
200with a saneContent-Type(image/pngorimage/jpeg), not an HTML error page
If HTML is wrong, fix deploy. If HTML is right and Slack is wrong, you are in cache territory.
Cache-busting that actually moves the needle
Changing only the meta tag while keeping https://cdn.example.com/og.png stable is the classic fail. Many CDNs and bots key on that URL. Prefer:
- New path:
/og/launch-2026-07.png - Or immutable query:
/og/launch.png?v=20260716
Purge the CDN object when you overwrite in place. Marketing “replaced the file in the same S3 key” without invalidation is a frequent root cause.
For Facebook, open the Sharing Debugger, paste the URL, scrape again, and check for warnings (image too small, wrong type, redirect loops). For LinkedIn, use its inspector. For Slack: post a URL with a harmless query (?utm_unfurl=2) only if your app treats query strings as the same page for OG purposes — or wait and educate the team that first-paste wins for a while.
Discord and Slack are not the same product
Discord often re-fetches sooner when you edit a message or paste again after hours. Slack workspaces can keep an old unfurl associated with a domain for a long time. Enterprise proxies and link expanders add another layer. Treat “works in Discord” as weak evidence that Slack will update.
Preview before the all-hands paste
Use an OGP preview tool against the production URL (or a publicly reachable staging host) to confirm title, description, and image dimensions before anyone pastes into a 500-person channel. Catch 1200×630 mistakes and missing absolute URLs while you can still fix them without a cache war.
Redirects and soft 404s
Bots that follow a chain of 301s sometimes cache the intermediate URL’s tags, or give up and show a generic card. Keep launch URLs stable. If you must redirect vanity paths, ensure the final 200 response carries the og tags you expect, and scrape the canonical URL in debuggers — not only the short link.
Internationalized sites add another wrinkle: og:locale and alternate locales should match the page the bot received. A bot hitting /en/launch while your CDN geo-redirects to /ja/launch can produce a Japanese card in an English Slack thread. Pin locale with explicit links during launch week.
Runbook snippet for on-call
When someone reports “OGP broken” after a deploy:
- Fetch HTML with a bot user-agent; confirm tags.
- Fetch
og:imagedirectly; confirm bytes and content-type. - Check CDN cache status headers on both HTML and image.
- Scrape Meta debugger; note warnings.
- If Slack-only, assume workspace cache; version the image URL and re-announce with the new absolute path.
OGP bugs feel like “deploy didn’t work.” Usually deploy worked — the social graph remembered yesterday. Version images, scrape with official debuggers, and assume every messenger keeps its own souvenir of your old card.