根本原因是og:image未被正确解析:必须为HTTPS绝对URL、尺寸≥1200×630像素、响应头含Access-Control-Allow-Origin: *、图片可公开访问且无403/404,同时需用Facebook Sharing Debugger强制刷新缓存。
根本原因通常是 og:image 没有被正确解析:路径不是绝对 URL、尺寸不符合平台要求、响应头未允许跨域加载,或者图片本身返回 404/重定向/非公开资源。Facebook 和 LinkedIn 会缓存 OG 数据,所以即使你改了 meta,旧缓存仍生效。
og:image 的值必须是完整 URL(如 https://example.com/img/share.jpg),相对路径或 protocol-relative 路径(//example.com/...)会被忽略Access-Control-Allow-Origin: *(尤其当图片放在 CDN 或不同域名下)https://developers.facebook.com/tools/debug/)强制刷新缓存,不要只靠清浏览器缓存Twitter 使用自己的 twitter:card 系列 meta,和 Open Graph 并行存在,但参数语义有重叠(比如 twitter:image 和 og:image)。不冲突,但写错顺序或漏掉关键字段会导致某平台 fallback 到网页截图。
og:title、og:description、og:url 和 og:type(推荐 website 或 article),缺一不可twitter:card(值为 summary_large_image 才能显示大图)、twitter:title、twitter:description、twitter:image
og:url 和当前页面 URL 不一致(比如带 utm 参数),Twitter 可能抓取该 URL 对应的页面内容,导致预览错乱<head> 中重复写 name 和 property 混用的 meta —— 同一含义字段只留一个,优先用 property(Open Graph)+ name(Twitter)并列纯客户端渲染(CSR)页面的 meta 标签在初始 HTML 中为空,而多数社交爬虫不执行 JS,结果抓到的是空 title 或默认 fallback 图。服务端渲染(SSR)或静态生成(SSG)是硬性前提。
next/head 或 generateMetadata(App Router)注入 OG 标签,且确保数据在构建时或请求时已就绪<head>,不能依赖 useEffect 或 useState 初始化 meta<meta property="og:title" content="..."> 真实存在,而非仅在 DevTools 的 Elements 面板里可见og:url 指向的地址必须能直出 HTML,不能是前端路由跳转后的路径本地 http://localhost:3000 域名几乎被所有社交平台拒绝抓取 —— 它们只接受公网 HTTPS 地址,且证书有效。这不是配置问题,是平台策略限制。
立即学习“前端免费学习笔记(深入)”;
ngrok 或 localtunnel 暴露本地服务为 HTTPS 公网地址(如 https://abc123.ngrok.io),再用 Debugger 工具验证updateAppMessageShareData,和 OG 无关;但微信朋友圈会读 OG,前提是域名已备案且在 JS-SDK 白名单中og:title 字体大小,却没发现 og:image 的 CDN 返回了 403。