Open Graph卡片异常主因是meta标签书写错误或被干扰,需确保og:url、og:type存在且og:image为可访问的绝对URL,三者缺一不可;验证须用平台调试工具而非刷新页面。
Open Graph meta 标签没写对,或者被其他 meta(比如 Twitter Card)干扰,是卡片预览异常的最常见原因。浏览器和社交平台(如微信、Facebook、LinkedIn)在抓取页面时,只看 <head> 里的 og: 属性,且只读一次——顺序错、缺关键字段、值为空或路径不合法,都会导致回退到默认抓取逻辑(比如取第一个 <img> 或 <h1>),结果不可控。
必须确保以下三点同时成立:标签在 <head> 内、og:url 和 og:type 存在、og:image 是绝对 URL 且可公开访问。
og:url 必须与用户实际分享的 URL 完全一致(含协议、大小写、尾部斜杠),否则平台会认为是不同页面而缓存错误卡片og:image 推荐尺寸至少 1200×630 像素,宽高比 1.91:1;小于 200×200 的图会被直接忽略og:description 超过 200 字符可能被截断,但微信等国内平台更倾向显示前 50–80 字,建议前置关键信息不能靠“刷新页面看效果”——绝大多数平台(包括微信)会缓存卡片元数据长达 24–72 小时,改完 HTML 后必须强制刷新缓存。最可靠的方式是用平台官方调试工具:
Scrape Again;注意看 “Redirect Path” 是否跳转、"Response Code" 是否为 200og:title 或无效的 og:image HTTP 状态码(如 403/404)注意:og:image:secure_url 在 HTTPS 页面上不是必需的;如果用了,必须和 og:image 指向同一张图,否则部分平台会拒绝加载。
立即学习“前端免费学习笔记(深入)”;
动态生成 og 标签时,容易把变量拼错成未转义的 HTML 或空字符串,导致整个 <head> 解析失败。核心原则是:**服务端渲染优先、避免 JS 注入、所有值做基础校验**。
functions.php 里用 wp_head hook 输出,用 esc_url() 处理 og:image,用 wp_strip_all_tags() 清洗 og:description
generateMetadata 函数里返回对象,openGraph 字段下直接写 images: [{ url: "/cover.jpg" }];注意路径必须是根目录相对路径或绝对 URL,/cover.jpg 会被自动补全为 https://yoursite.com/cover.jpg
{% if page.og_image %}<meta property="og:image" content="{{ page.og_image | absolute_url }}">{% endif %},避免输出空 content=""
特别注意:不要在客户端用 JavaScript 动态写入 <meta property="og:*">,爬虫不会执行 JS,这类标签完全无效。
微信几乎只认 og:title、og:description、og:image 三个字段,且会覆盖式使用——如果同时存在 twitter:title 和 og:title,微信只读后者;但微博(weibo.com)优先读 weibo:card 和 weibo:title,og: 标签仅作兜底。
og:image 必须是 **HTTPS 协议、无重定向、响应头含 Content-Type: image/***;用 CDN 回源到私有 COS/MinIO 时,若未配置 MIME 类型,图片会显示为灰色方块weibo:image,允许传多张图(用英文逗号分隔),但 og:image 只能有一个;若想适配微博多图,必须同时写两套标签og:video,视频卡片需走各自平台的专属 API(如微信“网页视频播放器”组件)最稳妥的做法是:以 og: 为基础写全,再按平台补充专属标签,而不是反过来依赖某一家的扩展属性。