OG 图 1200×630 由来 + 微信/Twitter/LinkedIn/Slack 抓取规则差异

· 更新于 2026-05-02 · 约 3 分钟 🃏 OG 卡片预览

链接发到微信、推特、Slack——会显示一张卡片预览,里面有标题、描述、缩略图。这背后是 Open Graph Protocol(OGP),但每个平台的解析规则不同,缓存策略不同,对图片尺寸的容忍度不同。

OG 协议核心字段

字段含义是否必填
og:title标题(可与 <title> 不同)
og:description一句话描述
og:image卡片图片绝对 URL
og:url规范 URL(避免 UTM 参数干扰)
og:typewebsite / article / product / video…推荐
og:site_name站点名推荐
og:localezh_CN / en_US推荐
og:image:width / og:image:height图片尺寸(帮助预渲染布局)推荐

Twitter Card 补充字段

字段含义
twitter:cardsummary / summary_large_image / app / player
twitter:title标题(覆盖 og:title)
twitter:description描述(覆盖 og:description)
twitter:image图片(覆盖 og:image)
twitter:site@站点账号
twitter:creator@作者账号

关键差别og:property=twitter:name=——写反了部分解析器会忽略。

1200×630 由来

Facebook 早期定义卡片为 1.91:1
1.91:1 + 1200px 宽 → 1200×629.3 ≈ 1200×630
Retina 2x 时缩放到 600×315 显示,仍清晰

它适合作为默认宽图模版,但如果你明确要做 X summary 小图卡,就应该额外准备更接近 1:1 的版本。

各平台显示规则(速查)

平台优先级图片偏好备注
Facebook主要看 og:*1.91:1 宽图常见可用 Sharing Debugger 重抓
X summary_large_imagetwitter:* 优先,缺失时回退 og:*宽图,接近 2:1更适合 1200×630 这类模板
X summarytwitter:* 优先,缺失时回退 og:*方图,接近 1:1不是 1200×630 的理想形态
LinkedIn通常看 og:*宽图更稳可用 Post Inspector 重抓
Slack / Discord通常看 og:*宽图常见客户端样式会有差异
微信 / 微博会参考标准 meta 与 og:*常有二次裁剪最终以实机分享结果为准

安全区设计

┌──────────── 1200 ────────────┐
│      安全边距 100px          │ 60
│  ┌────────────────────────┐  │
│  │                        │  │
│  │     主标题文字         │  │ 630
│  │     1000×450 内        │  │
│  │                        │  │
│  └────────────────────────┘  │
│                              │ 60
└──────────────────────────────┘
  • 主标题:60-100px 字号
  • 描述:30-50px
  • 装饰边距:≥60px

调试工具速链

平台工具
Facebookhttps://developers.facebook.com/tools/debug/
LinkedInhttps://www.linkedin.com/post-inspector/
通用预览https://opengraph.dev/
Slack在 Slack 输入 URL 重抓

curl 模拟抓取

curl -A "facebookexternalhit/1.1" -L https://你的页面 | grep -i og:

常见错误清单

  1. ❌ og:image 用相对路径或 // 协议无关——抓取器读不到
  2. ❌ og:image 用 HTTP 不是 HTTPS——iOS / 微信拒绝
  3. ❌ JS 注入 og meta——抓取器不执行 JS,SSR / 预渲染才行
  4. ❌ 图片在 robots.txt 禁止——抓取被 403
  5. ❌ 改了图但平台还显示旧的——平台有缓存,要么强刷要么换 URL
  6. ❌ 图上文字太小——预览缩略图尺寸下文字糊掉
  7. ❌ og:title 和 <title> 重复——浪费描述空间,应该写更营销化的标题
  8. ❌ Twitter 用了 summary 但图是 1.91:1——会被压缩成正方形

自动化生成方案

方案工具适用
构建时生成@vercel/og + Astro Endpoint静态站,页面数 < 1000
构建时生成satori + puppeteer同上,复杂模板
边缘函数Cloudflare Workers / Vercel OG动态参数化
模板手画Figma / Canva 导出少量重要页面

Astro 推荐astro-og-canvasastro-og-image-generator,构建时为每篇 markdown 生成对应 OG 图。

实操流程

  1. 设计 1200×630 模板,标题占位字号定下
  2. 各页面 frontmatter 配 title / description
  3. 构建时为每篇文章生成 OG 图到 /og/<slug>.png
  4. 模板里输出 og: 和 twitter: 系列 meta
  5. 用 Facebook Sharing Debugger 或 LinkedIn Post Inspector 抓一次,确认图能加载
  6. 链接发到自己目标 App(例如微信 / Slack / X)测试,看预览是否符合预期
  7. 更新图后用 URL 参数(?v=2)强制各平台重抓

OG 图是站外曝光的”封面”——优化它的成本远低于优化首屏内容,但点击率提升经常立竿见影。

❓ 常见问题

为什么 OG 图标准是 1200×630?

1200×630 更适合被理解成通用 OG 宽图模板,不是所有平台和卡片类型的唯一标准。它来自 Facebook 体系下常见的 1.91:1 宽图实践,所以后来也被很多站点拿来做 LinkedIn、Slack、Discord 等的通用分享图。但 X 里至少要分两种情况summary_large_image 更接近宽图,summary 官方则更接近 1:1 方图。因此更准确的说法是:1200×630 是一张“默认先做它通常不吃亏”的图,不是所有卡片的唯一最佳解。

微信、Twitter、LinkedIn、Slack 的链接预览规则有什么差异?

先抓三个核心差异就够用:(1) X 会区分 summarysummary_large_image,并优先读取 twitter:*,找不到时再回退到 og:*;(2) LinkedIn / Slack / Discord 通常优先依赖 og:*,所以一套标准 OG 宽图往往能覆盖大多数 B2B 或协作场景;(3) 微信 / 微博 常常会参考 <title>descriptionog:image,但不同入口、不同端内 WebView 的真实渲染并不完全一致。实操上就是:先把 OG 和 Twitter Card 配齐,再去目标 App 实测。

OG meta 的最小必填集是什么?

最少 4 个og:titleog:descriptionog:imageog:url完整推荐集: ```html <meta property="og:title" content="页面标题" /> <meta property="og:description" content="一句话描述" /> <meta property="og:image" content="https://example.com/og.jpg" /> <meta property="og:image:width" content="1200" /> <meta property="og:image:height" content="630" /> <meta property="og:url" content="https://example.com/page" /> <meta property="og:type" content="website" /> <meta property="og:site_name" content="站点名" /> <meta property="og:locale" content="zh_CN" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:title" content="..." /> <meta name="twitter:description" content="..." /> <meta name="twitter:image" content="..." /> <meta name="twitter:site" content="@你的账号" /> `` 注意og: 的属性名用 property=(OGP 协议规定),twitter:name=`(Twitter 文档要求)——写错属性名很多解析器会忽略。

为什么 og:image 必须是绝对 URL(带 https)?

抓取器从外部访问,没有当前页面的"上下文"。普通浏览器解析 <img src="/og.jpg"> 会按当前页面 URL 拼接出绝对路径,但 OG 抓取器(Facebook crawler、Twitterbot、Slackbot)从外部抓取页面后单独发起对图片的请求,没有"相对路径基准"——必须给完整 https URL。常见错误:(1) 写了 /og.jpg(相对路径)——抓取器读到后无法解析;(2) 写了 http://...(HTTP 而非 HTTPS)——很多平台(如微信、iOS 默认 ATS)拒绝加载非 HTTPS 资源,OG 图变空白;(3) 写了 protocol-relative //example.com/og.jpg——大多数抓取器识别不了,必须显式 https:调试:用 curl 模拟抓取:curl -A "facebookexternalhit/1.1" https://你的页面 看返回 HTML 中 og:image 是否真的可访问。

OG 图改了为什么平台还显示旧图?怎么强制刷新?

几乎所有平台都会缓存抓取结果,但缓存时长和刷新入口会变。更稳的流程是: - 先用平台官方调试工具重抓:Facebook 用 Sharing Debugger,LinkedIn 用 Post Inspector; - X 文档仍保留 Card Validator 故障排查说明,但实际可用性和刷新体验可能变化; - 微信通常没有统一公开的强刷入口,最常见兜底仍然是换 URL 或加版本参数应急方案:同时更新页面 URL 或图片 URL(如 og-v2.jpg?v=2),让平台把它当成新资源。

OG 图上放文字会被裁掉吗?文字应该多大?

安全区原则:1200×630 的画布,留 60-100 像素边距,核心文字放中央 1000×450 区域。裁剪风险:(1) Twitter 大图卡片保留全图但圆角裁剪边缘 ≈15px;(2) iMessage 链接预览裁成 1.91:1 但显示宽度只有 ≈280px 物理像素,文字小于 60px 会糊;(3) Facebook 移动端有时裁中央 1.91:1 但比例略变;(4) LinkedIn会按 1.91:1 显示但 mobile 上可能被压缩成方形预览。字号建议: - 主标题:60-100px - 副标题 / 描述:30-50px - 站点 / Logo:20-30px 对比度:标题文字与背景对比度至少 4.5:1(WCAG AA),否则在不同设备的不同色温下可能糊掉。测试:把生成的 OG 图缩成 300×157px 缩略图——还能看清主标题就 OK,看不清就放大字号或简化文字。

纯静态站点 / Astro / Next.js 怎么自动生成 OG 图?

两种主流方案:(1) 构建时生成——用 @vercel/og / satori / puppeteer 在构建期为每个页面渲染一张 PNG,路径如 /og/page-slug.png,HTML 里 og:image 引用它。优点:完全静态、CDN 友好;缺点:构建时间随页面数线性增长,1000 页要花几分钟。(2) 请求时动态生成——Vercel / Cloudflare Workers 提供 OG 图边缘函数,URL 如 /api/og?title=xxx,访问时实时合成 SVG → PNG。优点:参数化灵活,新页面零延迟;缺点:需要 Serverless 运行时(纯静态托管不支持)。Astro 项目推荐:用 astro-og-canvas 或自写 Astro Endpoint + satori,构建时生成,托管到任何静态平台。模板设计:固定背景 + 标题(动态文字)+ 站点 logo + 装饰元素——保证视觉一致,比每页手画 OG 图省事。

做了 og:image 但抓取器抓不到,怎么排查?

按这个 checklist 走一遍:(1) HTML 中真有 meta 标签吗?查看页面源码(不是 DevTools 的 Elements 面板,那是 JS 改过的 DOM)——抓取器只读 HTML 不执行 JS,SPA 中通过 JS 注入的 og:meta 不会被抓(除非用 SSR / 预渲染)。(2) og:image URL 直接访问能打开吗?(a) 是不是 https?(b) 文件是不是真存在?(c) 服务器有没有 robots.txt 禁止抓取?(d) CDN 配置了防盗链?(3) 页面本身能被抓吗?检查 robots.txt 是否允许 facebookexternalhit / Twitterbot / Slackbot 等 user-agent;返回 200 而不是 301/302/403/404。(4) 图片尺寸 / 格式合规吗?至少 600×315、< 8MB、JPG/PNG/GIF。(5) 改完后清缓存了吗?平台都有缓存,调试工具刷新后再测试。抓取模拟curl -A "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" -L https://你的页面 看返回是否含 og:image。

🃏 打开 OG 卡片预览 OG/Twitter Card 实时预览·Twitter/Facebook/微信/微博·粘 HTML 自动解析·一键生成 meta 代码