作者按: 这篇文章写给已经上线一段时间、UV停滞在某个数字(比如每天几十个、几百个)不增长的小程序运营者。我会给你一个诊断清单,按照这个清单逐项检查,基本能找到问题所在。
一、先算一下:你的UV到底算不算低(行业基准参考)
在急着优化之前,先确认你的UV是否真的偏低。不同品类、不同发展阶段的小程序,UV基准差别很大。
行业基准参考(日均UV)
| 小程序类型 | 上线1个月 | 上线3个月 | 上线6个月 | 上线1年 |
|---|---|---|---|---|
| 电商类(无推广) | 20-100 | 100-500 | 300-1500 | 1000-5000 |
| 工具类(无推广) | 10-50 | 50-300 | 200-1000 | 800-3000 |
| 内容类(无推广) | 5-30 | 30-200 | 100-800 | 500-2000 |
| 服务类(有门店) | 30-150 | 150-800 | 500-2000 | 1500-8000 |
说明:
- 以上数据是基于真实案例的经验值,不是官方数据,仅供参考
- "无推广"指没有投广告、没有大规模线下推广的自然增长
- 有公众号、视频号等外部流量导入的,UV会明显高于上表
- 垂直细分领域(如"宠物殡葬"“古董修复”)的UV天然偏低,但转化率可能很高,不能单纯看UV
怎么判断UV是否正常
计算方法: 你的UV ÷ 同类型同阶段小程序的基准中值
- 大于1.5倍: UV表现优秀,重点看留存和转化
- 0.8-1.5倍: UV正常,可以按本文清单做细致优化
- 小于0.8倍: UV确实偏低,需要按本文清单逐项排查
示例: 你的电商小程序上线4个月,日均UV是200。查表:电商类上线3个月基准是100-500,中值是300。200 ÷ 300 = 0.67,小于0.8,说明UV确实偏低,需要排查。
二、检查1:场景值分布 — 流量入口是否过于单一
什么是场景值
场景值是微信用来标识用户从哪里进入小程序的代码。比如:
1001:发现栏小程序主入口1020:公众号关联小程序卡片1022:聊天顶部置顶小程序入口1023:安卓系统桌面图标1024:微信小程序桌面快捷方式1025:长按图片识别小程序码1026:扫描小程序码1027:扫描手机相册中的小程序码1028:扫描一维码1029:扫描小程序码(长期有效)1030:扫描小程序码(临时有效)1035:公众号自定义菜单1036:App分享消息卡片1042:添加到桌面图标1043:公众号模板消息1044:群聊会话中的小程序消息卡片1045:朋友圈广告1046:朋友圈消息1047:扫描小程序码(长期有效)1048:扫描一维码1049:扫描小程序码(临时有效)1052:客服消息列表1053:搜一搜1056:聊天顶部置顶小程序入口1057:系统桌面快捷方式1058:小程序主页(附近的小程序)1059:体验版小程序绑定邀请页1060:内部测试(WeChat Work)1065:URL Scheme1067:公众号文章1068:附近的小程序列表1069:移动应用(App)1072:二维码1073:小程序互跳1074:小程序互跳(返回)1077:浮窗1078:连Wi-Fi状态栏1079:微信游戏中心1081:客服消息1082:公众号标签1084:朋友圈广告(小程序)1088:会话分组1089:微信聊天主界面下拉(我的小程序)1090:长按小程序右上角菜单1091:公众号文章商品卡片1092:城市服务入口1095:小程序广告组件1096:微信钱包(微信卡包)1097:微信支付收银台1099:视频号1100:视频号(直播)1101:视频号(短视频)1102:聊天主界面下拉(最近使用)1103:聊天主界面下拉(我的小程序)1104:群应用(群工具栏)1106:聊天主界面下拉(我的设备)1107:订阅消息1113:视频号(活动)1119:订阅号消息1120:聊天主界面下拉(我的小程序)1121:视频号(直播)1124:1124:朋友圈广告(小程序)1125:朋友圈广告(小程序)1126:朋友圈广告(小程序)1129:微信小程序客服1131:朋友圈广告(小程序)1133:微信小程序客服1135:朋友圈广告(小程序)1137:微信小程序客服1142:朋友圈广告(小程序)1144:微信小程序客服1146:朋友圈广告(小程序)1148:微信小程序客服1150:朋友圈广告(小程序)1152:微信小程序客服1154:朋友圈广告(小程序)1156:微信小程序客服1158:朋友圈广告(小程序)1160:微信小程序客服1162:朋友圈广告(小程序)1164:微信小程序客服1166:朋友圈广告(小程序)1168:微信小程序客服1170:朋友圈广告(小程序)1172:微信小程序客服1174:朋友圈广告(小程序)1176:微信小程序客服1178:朋友圈广告(小程序)1180:微信小程序客服1182:朋友圈广告(小程序)1184:微信小程序客服1186:朋友圈广告(小程序)1188:微信小程序客服1190:朋友圈广告(小程序)1192:微信小程序客服1194:朋友圈广告(小程序)1196:微信小程序客服1198:朋友圈广告(小程序)1200:微信小程序客服
(注:场景值会不定期更新,以上仅列出常用部分)
在哪里看场景值分布
- 登录小程序管理后台 → 「统计」→「访问分析」→「访问来源」
- 可以看到最近30天内,各个场景值的UV占比
诊断标准
健康的状态: 场景值分布相对均匀,至少有3-5个不同的入口,且没有一个入口占比超过50%
不健康的状态:
- 只有一个入口占比超过70%(流量过于单一,风险高)
- 没有任何一个入口占比超过10%(说明没有稳定的流量来源)
- "其他"占比超过30%(说明有很多流量来源不明,可能是刷量)
常见问题与优化方案
| 问题 | 可能原因 | 优化方案 |
|---|---|---|
| 只有"聊天顶部置顶"占比高 | 用户基数小,只有老用户在用 | 做搜一搜优化、线下推广,获取新用户 |
| 只有"公众号菜单"占比高 | 过度依赖公众号,没有独立获客能力 | 拓展其他入口(搜一搜、附近的小程序等) |
| "附近的小程序"占比为0 | 没有开通或优化附近的小程序 | 参考本文第一篇的方法1 |
| "搜一搜"占比为0或很低 | 搜一搜优化没做好 | 参考本文第三篇的SEO优化方法 |
| "分享"占比很低 | 分享卡片设计不好或产品缺乏分享动力 | 优化分享卡片(参考本文第一篇的方法5) |
自建统计SQL(可选)
如果你有自建数据统计系统,可以用以下SQL查询场景值分布:
sql复制
SELECT
scene_value,
COUNT(DISTINCT user_id) AS uv,
COUNT(DISTINCT user_id) * 100.0 / SUM(COUNT(DISTINCT user_id)) OVER () AS uv_percent
FROM user_visits
WHERE visit_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)
GROUP BY scene_value
ORDER BY uv DESC;
三、检查2:分享卡片数据 — 分享次数多但打开率低,问题在哪
在哪里看分享数据
- 登录小程序管理后台 → 「统计」→「分享分析」
- 可以看到:分享次数、分享人数、分享回流率(分享后被打开的次数 ÷ 分享次数)
诊断标准
分享回流率基准:
- 优秀:15%以上
- 正常:8-15%
- 偏低:5-8%
- 很差:5%以下
分享次数多但回流率低的原因
原因1:分享卡片设计差
检查点:
- 分享标题是否吸引人?(参考本文第一篇的方法5)
- 分享图片是否清晰、有视觉冲击力?
- 分享摘要是否补充了标题没说的信息?
优化方案: 准备2-3版分享文案和图片,A/B测试哪版回流率高。
原因2:分享动机不对
检查点: 用户为什么分享?是觉得内容有用、想推荐给朋友,还是被你诱导了?
错误示范:
- “分享后截图领优惠券”(诱导分享,违规)
- “不分享不能用”(胁迫分享,违规)
正确示范:
- 用户完成预约后,分享卡片文案是"我刚在XX完成了预约,推荐给你"(真实体验分享)
- 用户学到有用知识后,分享卡片文案是"这篇文章讲清楚了怎么选月嫂"(有价值的内容分享)
原因3:分享路径不带参数
检查点: 分享路径是否带了from=share之类的参数?如果没有,你无法区分分享带来的UV和自然UV,也就无法计算回流率。
优化方案: 在onShareAppMessage的path参数中加上来源标识,比如:
javascript复制
path: '/pages/index/index?from=share&user_id=123'
然后在小程序后台的「统计」→「自定义分析」中,可以新建一个事件,追踪from=share的访问。
自建统计SQL(可选)
如果你有自建数据统计系统,可以用以下SQL计算分享回流率:
sql复制
-- 分享次数
SELECT COUNT(*) AS share_count
FROM user_actions
WHERE action_type = 'share'
AND action_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY);
-- 分享回流次数(分享后被打开)
SELECT COUNT(DISTINCT v.user_id) AS share_back_uv
FROM user_visits v
JOIN user_actions s ON v.user_id = s.user_id
WHERE s.action_type = 'share'
AND v.visit_date >= s.action_date
AND v.visit_date <= DATE_ADD(s.action_date, INTERVAL 7 DAY)
AND v.visit_source = 'share';
四、检查3:首屏加载速度 — 超过3秒用户会流失
为什么加载速度重要
微信官方数据显示:小程序首屏加载时间超过3秒,用户流失率会增加30%以上。加载超过5秒,一半用户会直接关闭。
在哪里看加载速度
方法1:小程序管理后台
- 登录小程序管理后台 → 「统计」→「性能分析」→「加载监控」
- 可以看到:平均下载耗时、平均渲染耗时、首屏加载耗时
方法2:微信开发者工具
- 打开微信开发者工具 → 进入你的小程序项目
- 点击「调试」→「性能」→「加载性能」
- 可以看到详细的加载时间分解
方法3:真机测试
用不同价位的手机(高端机、中端机、低端机)实际打开小程序,记录从点击到完全加载的时间。
诊断标准
| 首屏加载耗时 | 评价 | 用户流失风险 |
|---|---|---|
| < 1秒 | 优秀 | 低 |
| 1-2秒 | 良好 | 中 |
| 2-3秒 | 及格 | 中高 |
| 3-5秒 | 较差 | 高 |
| > 5秒 | 很差 | 很高 |
常见原因与优化方案
原因1:图片过大
检查点: 小程序包内是否有超过200KB的图片?是否有未压缩的高清图?
优化方案:
- 图片压缩:使用TinyPNG等工具压缩图片,在不影响视觉效果的前提下减小文件大小
- 使用WebP格式:比JPEG小30%左右
- 懒加载:首屏只加载可见区域的图片,滚动后再加载其他图片
原因2:请求过多
检查点: 首屏是否需要调用5个以上的接口?是否有可以合并的请求?
优化方案:
- 合并接口:将多个小接口合并为一个大接口
- 缓存数据:已请求过的数据存到本地缓存(wx.setStorage),下次直接从缓存读
- 延迟加载:非关键数据(如推荐商品、评论)可以等首屏渲染完成后再请求
原因3:代码包过大
检查点: 小程序代码包是否超过2MB?(微信限制单个包最大2MB,总包最大20MB)
优化方案:
- 代码压缩:开启开发者工具的代码压缩选项
- 删除无用代码:用微信开发者工具的"代码依赖分析"功能,找出未使用的代码并删除
- 分包加载:将不常用的页面放到分包中,主包只保留核心页面
原因4:服务器响应慢
检查点: 接口响应时间是否超过500ms?是否有数据库慢查询?
优化方案:
- 服务器升级:如果服务器配置低,考虑升级
- 数据库优化:添加索引、优化SQL查询
- 使用CDN:静态资源(图片、视频)放到CDN上,减少服务器压力
自建统计SQL(可选)
如果你有自建数据统计系统,可以用以下SQL统计加载耗时分布:
sql复制
SELECT
CASE
WHEN load_time < 1000 THEN ' < 1秒'
WHEN load_time < 2000 THEN '1-2秒'
WHEN load_time < 3000 THEN '2-3秒'
WHEN load_time < 5000 THEN '3-5秒'
ELSE ' > 5秒'
END AS load_range,
COUNT(*) AS visit_count,
COUNT(*) * 100.0 / SUM(COUNT(*)) OVER () AS percent
FROM user_visits
WHERE visit_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)
GROUP BY load_range
ORDER BY MIN(load_time);
五、检查4:页面跳出率 — 哪个页面用户进来就走
什么是跳出率
跳出率 = 只访问了一个页面就离开的用户数 ÷ 总访问用户数
在哪里看跳出率
- 登录小程序管理后台 → 「统计」→「访问分析」→「页面分析」
- 可以看到每个页面的:进入次数、离开次数、跳出率
诊断标准
整体跳出率基准:
- 优秀:40%以下
- 正常:40-60%
- 偏高:60-80%
- 很高:80%以上
单个页面跳出率基准:
- 首页:应该低于50%(用户进来后应该继续浏览)
- 内容页:可以高于70%(用户看完就走是正常的)
- 支付页:应该低于30%(如果高,说明支付流程有问题)
跳出率高的原因与优化方案
原因1:首页没有清晰的价值主张
检查点: 用户打开小程序后,能否在3秒内看懂你是做什么的、能帮他解决什么问题?
优化方案:
- 首页顶部放一句清晰的话,说明你的核心服务(如"北京家政保洁,30分钟上门预约")
- 配一张高质量的主图,展示服务场景
- 放一个醒目的按钮,引导用户行动(如"立即预约"“立即购买”)
原因2:首页加载慢
参考"检查3"的优化方案。
原因3:页面内容与用户预期不符
检查点: 用户从哪个入口进来的?分享卡片的文案是否与页面内容一致?
示例: 分享卡片写"领取优惠券",用户点进来却发现是商品列表,没有优惠券入口,就会立刻退出。
优化方案:
- 分享卡片的文案要与落地页内容一致
- 如果是从搜一搜进来的,确保落地页与搜索关键词相关
原因4:页面设计不友好
检查点:
- 字体是否太小?
- 按钮是否不明显?
- 是否有弹窗广告打扰用户?
- 页面是否太长,用户不知道往哪滑?
优化方案:
- 字体大小至少28px(微信小程序推荐)
- 按钮用对比色,放在页面底部或顶部固定位置
- 不要一打开就弹窗(广告、活动、订阅请求),至少让用户看3秒再提示
- 页面长度控制在3屏以内,重要内容放在第一屏
自建统计SQL(可选)
如果你有自建数据统计系统,可以用以下SQL计算页面跳出率:
sql复制
-- 计算每个页面的跳出率
SELECT
p.page_path,
COUNT(DISTINCT CASE WHEN p.visit_count = 1 THEN p.user_id END) AS bounce_users,
COUNT(DISTINCT p.user_id) AS total_users,
COUNT(DISTINCT CASE WHEN p.visit_count = 1 THEN p.user_id END) * 100.0 / COUNT(DISTINCT p.user_id) AS bounce_rate
FROM (
SELECT
user_id,
page_path,
COUNT(*) AS visit_count
FROM user_page_visits
WHERE visit_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)
GROUP BY user_id, page_path
) p
GROUP BY p.page_path
ORDER BY bounce_rate DESC;
六、检查5:搜索来源UV — 搜一搜有没有收录你的小程序
为什么要关注搜索来源
搜一搜是微信生态最重要的自然流量入口。如果搜一搜没有收录你的小程序,等于放弃了一个巨大的免费流量池。
在哪里看搜索来源UV
- 登录小程序管理后台 → 「统计」→「访问分析」→「访问来源」
- 找到场景值
1053(搜一搜),查看其UV占比
诊断标准
搜索来源UV占比基准:
- 优秀:30%以上(说明SEO做得好)
- 正常:10-30%
- 偏低:5-10%
- 很差:5%以下或完全没有
搜一搜没有收录或排名低的原因
原因1:小程序新规审核未通过
检查点: 登录小程序管理后台 → 「设置」→「基本设置」→「服务类目」,是否显示了类目?如果类目为空或显示"审核中",说明你的类目申请还没通过,搜一搜不会收录。
优化方案: 重新提交类目申请,确保提供的资质真实有效。
原因2:页面标题、描述未优化
参考本文第三篇的SEO优化方法。
原因3:小程序上线时间太短
微信搜一搜对新上线的小程序有1-2个月的观察期,观察期内排名会偏低。这是正常机制,持续运营即可。
原因4:小程序质量分低
微信搜一搜会对小程序打分,分数低则排名低。影响分数的因素包括:
- 服务可用性(是否有大量用户投诉)
- 页面加载速度
- 内容质量(是否有原创、有价值的内容)
- 更新频率(是否长期不更新)
优化方案:
- 确保服务稳定,及时处理用户投诉
- 优化加载速度(参考"检查3")
- 定期更新内容(如博客文章、产品上新)
- 不要刷量、不要做违规操作
怎么确认搜一搜是否收录了你的小程序
方法1:微信搜一搜测试
打开微信 → 搜一搜 → 搜索你的小程序名称,看是否能找到。
方法2:搜索核心关键词测试
搜索你优化的关键词(如"北京家政保洁"),看你的小程序是否出现在结果中。
如果搜不到,说明要么没收录,要么排名太靠后。
自建统计SQL(可选)
如果你有自建数据统计系统,可以用以下SQL统计搜索来源UV:
sql复制
SELECT
DATE(visit_date) AS date,
COUNT(DISTINCT user_id) AS search_uv
FROM user_visits
WHERE scene_value = 1053 -- 搜一搜的场景值
AND visit_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)
GROUP BY DATE(visit_date)
ORDER BY date;
七、检查6:留存率 — UV涨了但留存差,说明流量质量有问题
什么是留存率
留存率 = 第N天后还回来的用户数 ÷ 初始用户数
常用的留存率指标:
- 次日留存率:用户首次访问后,第二天还回来的比例
- 7日留存率:用户首次访问后,7天后还回来的比例
- 30日留存率:用户首次访问后,30天后还回来的比例
在哪里看留存率
- 登录小程序管理后台 → 「统计」→「用户分析」→「留存分析」
- 可以选择:次日留存、7日留存、30日留存
诊断标准
留存率基准(电商类):
- 次日留存:30-50%
- 7日留存:15-30%
- 30日留存:8-20%
留存率基准(工具类):
- 次日留存:40-60%
- 7日留存:20-40%
- 30日留存:10-30%
留存率基准(内容类):
- 次日留存:20-40%
- 7日留存:10-25%
- 30日留存:5-15%
留存率基准(服务类):
- 次日留存:25-45%
- 7日留存:12-28%
- 30日留存:6-18%
留存率低的原因与优化方案
原因1:流量质量差(刷量、虚假流量)
检查点: 新增用户的留存率是否接近0?(正常用户至少会有10-30%的次日留存,如果只有1-2%,很可能是刷量)
优化方案: 停止任何刷量行为,依靠真实运营手段获取用户。
原因2:产品没有留存价值
检查点: 用户用完一次后,为什么还要回来?你的小程序是否解决了用户的持续需求?
示例:
- 电商小程序:用户买完一次,如果没有复购动力(如会员积分、新品上新),就不会回来
- 工具小程序:如果用户的问题一次就解决了(如"房贷计算器"),天然留存率低,这是正常的
优化方案:
- 电商:做会员体系、积分商城、新品提醒
- 工具:做历史记录、收藏功能、定期提醒(如"每月房贷还款提醒")
- 内容:做更新提醒、系列内容
- 服务:做定期服务(如"每月保洁预约")
原因3:没有引导用户"添加到我的小程序"
参考本文第一篇的方法6。
原因4:没有使用订阅消息提醒用户回来
参考本文第一篇的方法7。
自建统计SQL(可选)
如果你有自建数据统计系统,可以用以下SQL计算次日留存率:
sql复制
-- 计算次日留存率
SELECT
DATE(first_visit_date) AS cohort_date,
COUNT(DISTINCT user_id) AS new_users,
COUNT(DISTINCT CASE WHEN DATEDIFF(second_visit_date, first_visit_date) = 1 THEN user_id END) AS retained_users,
COUNT(DISTINCT CASE WHEN DATEDIFF(second_visit_date, first_visit_date) = 1 THEN user_id END) * 100.0 / COUNT(DISTINCT user_id) AS retention_rate
FROM (
SELECT
user_id,
MIN(visit_date) AS first_visit_date,
MIN(CASE WHEN visit_date > MIN(visit_date) THEN visit_date END) AS second_visit_date
FROM user_visits
GROUP BY user_id
) u
WHERE first_visit_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)
GROUP BY DATE(first_visit_date)
ORDER BY cohort_date;
八、诊断结论:对应问题的优化优先级
根据上述6个检查点的结果,按以下优先级优化:
优先级1(立即处理)
- 首屏加载速度超过3秒 → 用户体验太差,不修复其他优化都没用
- 留存率接近0 → 很可能是刷量,立即停止并排查流量来源
- 场景值分布显示"其他"占比超过30% → 可能是刷量,需要排查
优先级2(1周内处理)
- 搜索来源UV为0或很低 → 搜一搜是自然流量最重要的来源,必须优化
- 分享回流率低于5% → 分享是微信生态最核心的传播方式,必须优化
- 首页跳出率超过50% → 首页是用户的第一印象,必须优化
优先级3(1个月内处理)
- 场景值分布过于单一 → 拓展更多流量入口,降低风险
- 留存率低于行业基准 → 做"添加到我的小程序"、订阅消息等留存手段
总结
UV不涨通常不是单一问题,而是多个问题叠加的结果。按照本文的清单逐项检查,找到问题所在,然后按优先级逐个解决。
快速诊断流程:
- 先看留存率 → 判断流量质量
- 再看场景值分布 → 判断流量来源是否健康
- 然后看首屏加载速度 → 判断产品体验是否合格
- 最后看分享数据和搜索来源 → 判断增长空间
如果你在完成上述检查后仍有疑问,可以登录微信公众平台查看官方文档,或在微信开放社区提问。