微信分享卡片不显示的排查:从 SDK 到缓存
作者:夸父
网页分享到微信时卡片图/标题/摘要不生效的排查手册:JS-SDK 签名、域名验证、缓存问题,以及无 SDK 场景的默认行为说明。
先分清两种分享形态
无 SDK 的默认抓取:用户直接点微信右上角分享,卡片显示页面 title + 随机/首图。这个形态不需要任何开发,但卡片不可控。JS-SDK 自定义卡片:通过微信 JS-SDK 设置分享标题/描述/缩略图——需要公众号(服务号或认证订阅号)+ 安全域名配置 + 后端签名接口。
JS-SDK 的四步检查链
1. 公众号域名配置:公众号后台的"JS 接口安全域名"必须包含你的分享页域名(每月可改次数有限,先想好再加)。2. 后端签名:用 access_token 换 jsapi_ticket,再用 ticket+nonceStr+timestamp+URL 计算 signature——access_token 与 ticket 都有 7200 秒有效期且需全局缓存(重复获取会互相顶掉,这是高频坑)。3. 前端 config:wx.config 的参数与后端签名一致,debug: true 打开看具体报错。4. 签名 URL:与页面 URL 完全一致(前端把当前 URL 传给后端计算,后端不要自己拼)。
缓存的三处陷阱
微信的卡片缓存:同一 URL 的卡片被微信缓存,改了图和标题没生效——给 URL 加个无意义参数(?v=2)强制刷新。access_token 缓存穿透:多实例部署时各自取 token 互相顶掉——token 集中存储(Redis)统一刷新。签名 URL 的动态参数:页面 URL 带 hash 路由(#/xxx)时,hash 不参与签名但会干扰——SPA 用 history 模式或签名时去掉 hash。
静态站的务实建议
静态导出的内容站(逐日 AI 的 out/),若只需"分享时有个像样的图",最低成本方案:确保每页有 ≥300px 的首图与准确的 title(默认抓取即可用);要品牌化卡片再上 JS-SDK——JS-SDK 需要后端签名接口,静态站需要额外的签名服务,量力而行。
常见问题
不接 JS-SDK 分享到微信会显示什么?
未配置 JS-SDK 时,微信抓取页面的 title + 首张符合尺寸的图片(≥300px)作为卡片——多数情况"能用但不好看"。要自定义卡片必须接 JS-SDK 签名。
签名在本地能算对,线上就 invalid signature?
JS-SDK 签名用的是"当前页面 URL"——SPA 前端路由变化后 URL 带了参数/锚点,签名用的 URL 与实际不一致。原则:签名的 URL 必须与调用 wx.config 的页面 URL 完全一致(含协议与参数)。


