og:title和og:description必须是纯文本,不可含HTML标签,否则会导致显示异常或OG数据被忽略;需服务端剥离富文本、控制长度(≤60/155字符),并确保og:image返回200状态码且支持CORS。

og:title 和 og:description 必须是纯文本,不能含 HTML 标签
社交媒体爬虫(如 Facebook、LinkedIn 的解析器)会直接截取 og:title 和 og:description 的内容展示为预览标题和摘要,一旦里面混入 <strong>、<br> 或转义不彻底的引号,轻则显示异常(如文字被截断),重则整个 Open Graph 数据被忽略。常见错误是后端模板直接插入未过滤的富文本字段。
- 用服务端函数剥离 HTML(如 Python 的
html.unescape()+re.sub(r'<[^>]+>', '', text))再设为og:description - 前端 SSR 场景下,避免用
v-html或dangerouslySetInnerHTML渲染到 meta content 属性中 - 长度控制:Facebook 建议
og:title≤ 60 字符,og:description≤ 155 字符;超出部分会被截断且不加省略号
og:image 必须返回 200 状态码且支持 CORS
很多预览图加载失败,不是因为路径写错,而是图片资源返回了 302 跳转、403 权限拒绝,或服务器没配 Access-Control-Allow-Origin: *。Twitter 和 LinkedIn 的预取服务会以跨域方式请求该图片,CORS 不通过就直接放弃加载。
- 检查图片 URL 是否可被 curl 直接获取:
curl -I https://example.com/og.jpg,确认响应头含HTTP/2 200且无Location字段 - 静态图建议用绝对路径,避免相对路径导致解析为当前分享页域名下的子路径
- 推荐尺寸:至少
1200×630像素(Facebook 最小要求),宽高比保持在 1.91:1;小于600×315可能被降权显示
og:url 应指向规范化的页面地址,而非带 UTM 或 session ID 的链接
Open Graph 协议要求 og:url 是该内容的「权威地址」。如果填的是带 ?utm_source=twitter 或 ;jsessionid=xxx 的链接,Facebook 会把它当作独立页面处理,导致同一内容多个 URL 的预览数据分散、点赞数不聚合、甚至被判定为重复内容。
使用 PptxGenJS 和 Python 解析,将结构化的 HTML/CSS 幻灯片内容转换为原生、可编辑的 PowerPoint(.pptx)演示文稿。
- 服务端渲染时,从原始请求中提取 canonical URL(例如 Nginx 中的
$scheme://$host$request_uri去掉 query 参数),再手动剔除已知追踪参数 - 避免前端 JS 动态写入
og:url,因爬虫不执行 JS,读到的仍是初始 HTML 中的静态值 - 若必须支持多语言,应使用
og:locale(如zh_CN)配合不同og:url,而非靠 query 切换
调试时别只信 Facebook Sharing Debugger,要交叉验证
Facebook 的调试工具会缓存结果(最长 24 小时),且它默认用桌面 UA 抓取,而 Twitter/X 和 LinkedIn 使用不同 UA 和解析规则。一个页面在 Facebook 上预览正常,不代表其他平台也生效。
立即学习“前端免费学习笔记(深入)”;
- 每次修改后,先用
curl -s "https://graph.facebook.com/?id=https://example.com/page&scrape=true"强制刷新 FB 缓存 - 用 LinkedIn 的 Post Inspector 和 Twitter 的 Card Validator 分别提交测试
- 注意:微信内置浏览器不识别 Open Graph,它优先读
twitter:或微信自定义的wx-open-graph(需 JS SDK 支持),这点常被忽略


















