.jpg 和 .png 后缀比你想象的更重要尤其是当你面对微信、WhatsApp 和 Telegram 这些「挑剔」的平台时。
你在 NXplace 或自己博客上发表了一篇好文章,配了一张很精美的封面图。你把链接发到微信群里——
结果只看到一串光秃秃的 URL。没有标题,没有描述,没有图片。
然后你检查了一下 HTML:
<meta property="og:image" content="https://cdn.example.com/w/i/my-post/job_abc123" />
URL 看起来没问题,图片也能访问。但微信就是不显示预览卡片。
这其实是一个被很多开发者忽略的细节。
og:image URL 中文件扩展名的敏感度| 平台 | 无扩展名 URL | .jpg / .png 结尾 |
.webp 结尾 |
|---|---|---|---|
| 微信 (WeChat) | ⚠️ 不稳定 | ✅ 可靠 | ⚠️ 部分支持 |
| ❌ 经常不显示 | ✅ 可靠 | ✅ 支持 | |
| Telegram | ⚠️ 不稳定 | ✅ 可靠 | ❌ 不推荐 |
| Facebook / Messenger | ✅ 较宽容 | ✅ | ✅ |
| Twitter / X | ✅ 较宽容 | ✅ | ✅ |
| ⚠️ 偶尔失败 | ✅ | ✅ | |
| Slack | ✅ 较宽容 | ✅ | ✅ |
| Discord | ✅ 较宽容 | ✅ | ✅ |
结论:如果你想让链接在「所有平台」上都能正常展示预览卡片,请确保 og:image 的 URL 以 .jpg 或 .png 结尾。
WhatsApp 的爬虫在解析 og:image 时,会先检查 URL 的文件扩展名来决定是否下载。Stack Overflow 上有大量开发者报告:Cloudinary 等 CDN 生成的「无扩展名」图片 URL 在 WhatsApp 上不显示预览图,加上 .jpg 后缀后立即生效。
微信的爬虫(WeChatBot)也有类似行为——它会根据 URL 中的文件扩展名来判断图片格式。如果 URL 没有明确的扩展名(比如 /job_abc123),爬虫可能直接跳过图片抓取。
Telegram 的文档明确指出:只可靠支持 JPEG 和 PNG 格式,WebP 和 GIF 可能不被渲染。
instant_media 现已支持带扩展名的 URL以前:
https://cdn.builder2.com/w/i/my-blog-featured/job_d6810322-282
现在(2025年6月更新):
https://cdn.builder2.com/w/i/og-image-social-sharing-dev-workshop/job_d6810322-282.png
注意到了吗?URL 末尾多了 .png!
这意味着通过 instant_media 生成的图片,现在可以直接作为 og:image 使用,无需任何代理或 URL 重写——微信、WhatsApp、Telegram 都能正确识别并展示预览卡片。
<!-- 基础 OG 标签 -->
<meta property="og:title" content="你的文章标题(建议 40-70 字符)" />
<meta property="og:description" content="文章摘要,建议 55-200 字符,前两句话要抓人眼球" />
<meta property="og:image" content="https://cdn.builder2.com/w/i/your-slug/job_abc123.png" />
<meta property="og:url" content="https://yourdomain.com/your-post" />
<meta property="og:type" content="article" />
<meta property="og:site_name" content="你的网站名称" />
<meta property="og:locale" content="zh_CN" />
<!-- 图片尺寸(帮助爬虫快速判断) -->
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:type" content="image/png" />
<!-- Twitter/X 卡片(没有这些,Twitter 不会展示大图) -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="你的文章标题" />
<meta name="twitter:description" content="文章摘要" />
<meta name="twitter:image" content="https://cdn.builder2.com/w/i/your-slug/job_abc123.png" />
| 参数 | 推荐值 | 原因 |
|---|---|---|
| 尺寸 | 1200 × 630 px | 所有平台通用黄金比例 |
| 格式 | JPG 或 PNG | WhatsApp/Telegram 最可靠 |
| 文件大小 | < 600 KB | WhatsApp 的硬性限制 |
| 宽高比 | 1.91:1 | Facebook/Twitter 最佳比例 |
| 最小宽度 | 200 px | Facebook 的最低要求 |
| 最小高度 | 200 px | WhatsApp 的最低要求(推荐 > 300px) |
在上线之前,用这些工具验证:
| 工具 | 地址 | 适用场景 |
|---|---|---|
| Facebook Sharing Debugger | developers.facebook.com/tools/debug | 通用 OG 标签验证,强制刷新缓存 |
| Twitter Card Validator | cards-dev.twitter.com/validator | Twitter/X 卡片预览 |
| LinkedIn Post Inspector | linkedin.com/post-inspector | LinkedIn 预览验证 |
| WeChat Debug | 手机端直接分享到微信 | 最真实的微信预览效果 |
| 手机端粘贴链接到聊天框 | WhatsApp 预览效果 | |
| OpenGraph.dev | opengraph.dev | 多平台模拟预览 |
⚠️ 注意:Facebook Sharing Debugger 在你修改 OG 标签后需要手动点击「Scrape Again」来刷新缓存。
如果你的博客平台(比如 NXplace)不自动渲染 OG 标签,最简单的方案是创建一个代理页面:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<!-- ===== 核心 OG 标签 ===== -->
<meta property="og:title" content="Open Graph 图片分享终极指南" />
<meta property="og:description" content="为什么 .jpg 和 .png 后缀比你想象的更重要——微信、WhatsApp、Telegram 分享链接时图片不显示的终极解决方案。" />
<meta property="og:image" content="https://cdn.builder2.com/w/i/og-image-social-sharing-dev-workshop/job_d6810322-282.png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:type" content="image/png" />
<meta property="og:url" content="https://your-real-blog-url.com" />
<meta property="og:type" content="article" />
<meta property="og:site_name" content="🛠️ 开发者实操" />
<meta property="og:locale" content="zh_CN" />
<!-- ===== Twitter 卡片 ===== -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Open Graph 图片分享终极指南" />
<meta name="twitter:description" content="为什么 .jpg 和 .png 后缀比你想象的更重要" />
<meta name="twitter:image" content="https://cdn.builder2.com/w/i/og-image-social-sharing-dev-workshop/job_d6810322-282.png" />
<!-- ===== 用户重定向到真实博客 ===== -->
<meta http-equiv="refresh" content="0;url=https://nxplace.com/x/dev-workshop/你的文章">
</head>
<body>
<p>正在跳转到文章... <a href="https://nxplace.com/x/dev-workshop/你的文章">如果没有自动跳转,请点击这里</a></p>
</body>
</html>
工作原理:
meta refresh → 自动跳转到真正的博客文章这样,你既获得了社交分享的完美预览,又不需要修改博客平台本身的代码。
instant_media 的新优势| 特性 | 旧版 (无扩展名) | 新版 (.png/.jpg) |
|---|---|---|
| 微信分享 | ❌ 不显示预览图 | ✅ 完美显示 |
| WhatsApp 分享 | ❌ 经常失败 | ✅ 完美显示 |
| Telegram 分享 | ⚠️ 不稳定 | ✅ 可靠显示 |
| Facebook Debugger | ⚠️ 可能报错 | ✅ 正常 |
| 直接作为 og:image | ❌ 不推荐 | ✅ 推荐 |
| 生成速度 | ~50ms | ~50ms(不变) |
| CDN 持久化 | ✅ | ✅ |
| HTTPS | ✅ | ✅ |
在你分享链接之前,确认以下每一项:
og:image URL 是否以 .jpg 或 .png 结尾?og:title 是否在 40-70 字符之间?og:description 是否在 55-200 字符之间?twitter:card = summary_large_image?社交媒体分享预览卡的「图片不显示」问题,90% 是因为
og:image的 URL 缺少文件扩展名。
builder2.com 的 instant_media 现在已经默认返回 .png 或 .jpg 后缀的 URL,这意味着你可以直接将生成的图片用作 og:image,无需任何中间代理或额外处理。
下次发文章之前,记得检查一下:你的 og:image URL 最后有没有 .jpg 或 .png?这一个字符的差异,可能就是「精美的分享卡片」和「光秃秃的蓝色链接」之间的区别。
本文发表于 🛠️ 开发者实操频道。所有测试基于 2025 年 6 月的各平台行为,如有变化请以各平台最新文档为准。