OGKit

同一份 OG 标签,八种卡片:Facebook、LinkedIn、X 等平台的预览差异与截断规则

  • open-graph
  • 社交预览
  • 平台差异
  • 截断

设计稿里只有一张 1200×630 的分享图,配上标题和描述,看着很完美。上线之后:LinkedIn 上描述整段消失,WhatsApp 里图根本没出来,X 上标题被挤成两行省略号,Slack 里图的左右留白和设想完全不一样。

这不是你的标签写错了。画卡片的是平台,不是你。 同一份 HTML,八个平台各自挑字段、各自截断、各自裁图。这篇把八个主流平台的差异拆成可以直接对照的矩阵表。

先划清边界,这也是我们自己做产品守的规矩:任何第三方预览(包括 OGKit)都是近似 UI,权威永远是各平台官方 debugger。所以下面每个数字都标了来源档位:

  • 官方 —— 平台官方文档明写
  • 社区 —— 社区广泛复现的共识,未经官方确认
  • 实测 —— 社区实测约定,非官方保证
  • unverified —— 没有人核实过,别当事实引用

数字来自 OGKit 的平台档案(core 里的 PlatformProfile,规则引擎和预览组件共用同一份数据);标题行数等外观细节来自预览层的平台复刻。发现哪个数字过时,档案页会跟着数据源一起更新。

先认清:这根本不是同一种「卡片」

八个平台的渲染结构分三族,很多「差异」其实是结构差异,不是参数差异:

结构族 平台 长什么样
stacked Facebook、X、LinkedIn、WhatsApp 上图下文的标准卡片,图大多被裁切填满横幅
attachment Slack、Discord、Telegram 不是卡片,是消息附件:左侧一条竖轨,文字在上,图在文字下方、保持原比例不裁切
search Google 没有卡片:站点名 + 面包屑 + 蓝色标题 + 摘要,图最多是右侧方形小缩略图

记住这张表,后面的数字才不会读拧:Slack 的图「没被裁」不是 bug,Google 的图「那么小」也不是。

矩阵一:字段采信——你的标签被谁读、按什么顺序

同写字段,各平台的回退链不一样。最关键的是 X 优先读 twitter:*,而 Meta 系平台根本不看它。

平台 标题字段优先级 twitter:* 站点名那一行显示什么 来源
Facebook og:title<title> 域名(大写 社区
X twitter:titleog:title<title> 优先 域名 官方(字段优先级)
LinkedIn og:title<title> 域名 社区
Slack og:titletwitter:title<title> 回退 og:site_name + favicon 社区
Discord og:titletwitter:title<title> 回退 og:site_name(provider 位) 社区
WhatsApp og:title<title> 域名(底部小字) 社区
Telegram og:titletwitter:title<title> 回退 og:site_name品牌蓝 社区
Google og:title<title>(搜索信号更多) og:site_name + 面包屑 社区

两个直接可执行的结论:

  1. og:site_name 不是摆设——Slack / Discord / Telegram / Google 四个平台把它放在卡片最显眼的位置,而 Meta 系只显示域名。不写它,你在 IM 里就少了一行品牌曝光。
  2. twitter:* 仍然要写。X 优先读它,Slack / Discord / Telegram 拿它当回退;只写 og:* 在 X 上等于放弃了单独控制标题和图的能力。

矩阵二:文本截断——标题和描述能活多长

「字符数」是各平台档案里的软上限估计,「行数」是渲染层的行钳制。两者叠加作用:任一触发就出省略号。

平台 标题字符 标题行数 描述字符 描述行数 来源
Facebook ≈60 2 ≈200 3 社区
X ≈70 2 ≈200 2 社区
LinkedIn ≈150 2 不显示 字符:社区;不显示:社区复刻
Slack unverified 3 unverified
Discord 256 3 4096 社区(embed 上限)
WhatsApp ≈65 2 ≈160 2 社区
Telegram unverified 3 unverified
Google ≈60 1 ≈160 社区

反直觉程度排序:

  • LinkedIn 直接丢弃 og:description。feed 卡片上只有标题和域名,你精心写的描述一个字都不会出现。所以 LinkedIn 受众的页面,标题必须自己把话说完。
  • Google 标题只有一行,20px 的蓝色大标题单行截断,比任何社交卡片都狠。
  • Discord 是文本最宽松的:256 / 4096 是 embed 协议上限,长描述在这里真的能展开——这也是观察你自己文案「全文」最方便的地方。
  • Slack / Telegram 没有公开字符预算(unverified),截断完全由容器宽度决定。别引用任何「Slack 标题 100 字符」之类的说法,包括二手博客里的。

实务建议:标题控制在 60 字符以内能同时活着通过 Facebook 和 Google;前 65 个字符放好关键信息,WhatsApp 也不会砍到骨头。

矩阵三:图片——裁切、降级与字节预算

「一张图走遍社交」的最大误区:只有 stacked 族会裁图,而且各自的降级阈值和字节预算完全不同。

平台 图槽与裁切 源图太小时 字节预算 来源
Facebook 1.91:1,cover 居中裁 <600px 宽:退化为文字旁小方图 8MB 官方(尺寸/预算);阈值:官方
X ≈1.91:1,cover 居中裁 <300×157:退化为 summary 小方卡 5MB 社区
LinkedIn 1.91:1,cover 居中裁 <200px 宽:图直接被丢掉 5MB 社区
Slack contain 不裁,最大宽 360px 保持原比例缩小 未公布 社区
Discord contain 不裁,最大宽 400px 保持原比例 8MB 社区
WhatsApp ≈1.91:1,cover 居中裁 <300px 宽:退化为 60px 小图 ≈300KB(软上限 ≈200KB) 实测(社区共识,非官方)
Telegram contain 不裁,最大宽 320px 保持原比例 5MB 社区
Google 1:1 方形,cover 居中裁 <1200px 宽:没有图 未公布 社区

三条最值钱的结论:

  1. WhatsApp 的字节预算是最紧的约束。≈300KB 是社区实测共识而非官方承诺,但「大 PNG 在 WhatsApp 里静默不出图」是被反复复现的现象。一张 1200×630 的 PNG 很容易超过 1MB——要全平台稳,用 JPEG 并把文件压到 300KB 以内,一张图就兼容了最严格的平台。
  2. Google 的方形裁切决定了安全区。它要求源图 ≥1200px 宽,却只显示一个方形居中裁切;Facebook / X / LinkedIn 则是 1.91:1 横裁。同一张图要同时过这两关,重要内容必须放在「横裁和方裁的交集」——也就是画面中央区域。
  3. LinkedIn 和 Google 对「小图」的惩罚是删除,不是缩小。阈值之下连缩略图都没有,卡片退化成纯文字。

矩阵四:缓存与官方工具——预览之后去哪定稿

第三方预览站(包括我们自己的多端预览)用来日常 QA;改完图想确认线上效果,只有官方入口能清平台自己的缓存

平台 官方入口 缓存刷新方式 来源
Facebook Sharing Debugger 「Scrape Again」强制重抓;TTL 未公开(unverified) 官方
LinkedIn Post Inspector 提交即重抓;TTL 社区常引 ≈7 天 官方(工具)/ 社区(TTL)
X Card Validator(可用性不稳定,以现状为准) 常引 ≈7 天,非官方固定值 社区
Slack 无公开 debugger 重新分享链接 社区
Discord 无公开 debugger 改 URL 查询串 bust 缓存 社区
WhatsApp 无公开 debugger 等,或改 URL 社区
Telegram 无网页 debugger 私聊 @WebpageBot 强制刷新 社区(实践)
Google Rich Results Test Search Console 请求重新索引 官方

完整的按平台入口清单(输入 URL 直接拼好调试链接)在重新抓取助手。缓存与 rescrape 的完整玩法是本系列第 05 篇的主题。

设计 checklist:一张图过八关

综合上面的矩阵,全平台兼容的分享图设计约束是这么推出来的:

  • 1200×630(1.91:1)——Meta 官方推荐尺寸,X / LinkedIn / WhatsApp 同槽位,Google 也要求 ≥1200px 宽
  • 重要文字与 logo 放中央安全区——1.91:1 横裁与 1:1 方裁的交集区域;四周只放可以牺牲的底纹(这是从矩阵三推出来的设计约束,不是某家平台的明文规则)
  • 文字别贴边——X 的圆角会吃掉图的四角,WhatsApp 的图四周还有内缩
  • 对比度按白底和黑底各验一遍——Discord 默认深色,暗色文字配暗色图直接消失
  • JPEG 优先、总量 ≤300KB——一次满足 WhatsApp 的实测预算,其他平台都更宽松
  • 图 URL 绝对 HTTPS、直接 200——鉴权图床和多跳 302 会让爬虫拿到 403(排查顺序见系列第 04 篇,规划中)
  • 标题 ≤60 字符、关键信息前置,描述写全但别依赖它——LinkedIn 根本不显示

怎么交叉验证,而不是交叉引用谣言

推荐的工作流,从设计稿到上线:

  1. 出稿阶段:用多端预览组件(@ogkit/preview,也是 OGKit 扩展和网页扫描里的渲染层)把八种卡片摆在一起看。它的每个数字都链回平台档案的数据源,结构按真实布局复刻,但请记得它的定位:近似,用于日常 QA
  2. 存疑阶段:某个数字影响决策时,打开对应的平台档案页看它的来源档位和核实日期——「官方」可以放心依赖,「社区」注意语境,「unverified」就实测一次再说。
  3. 定稿阶段:把线上 URL 挨个过矩阵四里的官方工具。只有这一步看到的结果,才是平台缓存里真正存着的东西。

下一步