做公众号运营,最怕的一件事就是不了解自己的读者。很多运营者每天辛苦写推文,阅读量却始终上不去,问题往往不在内容质量,而在于内容与粉丝群体不匹配。一个以男性程序员为主的账号天天发美妆穿搭,再努力也是事倍功半。微信公众号官方提供了用户画像相关的数据接口,包括性别、地域、语言、终端等维度,再加上运营者自定义的用户标签体系,完全可以构建出一份立体的用户画像,进而实现精细化的用户分层运营。本文将围绕这条完整的链路展开,从数据采集到分层落地,一步步讲清楚怎么做。

一、公众号用户画像的数据来源有哪些
微信官方提供的用户画像数据主要分为两大类。第一类是用户管理接口返回的客观属性数据,包括用户的性别、所在省份城市、国家、语言偏好等。这些数据在用户关注公众号时由微信平台自动记录,无需用户额外授权即可通过接口批量拉取。第二类是运营者自行积累的标签数据,比如通过网页授权获取的昵称头像、通过互动行为打上的活跃标签、通过活动参与记录打上的兴趣标签等。
客观属性数据的价值在于稳定和可信。性别和地域这类信息基本不会频繁变动,适合作为分层的基础骨架。而自定义标签的价值在于灵活,可以随运营策略随时增删。一个设计良好的标签体系,通常包含三个层级:基础属性层(性别、地域、年龄区间)、行为层(阅读频次、留言互动、菜单点击)、兴趣层(内容偏好、消费能力)。三层叠加,才能形成真正的用户画像,而不是简单的 demographic 统计报表。
获取这些数据主要通过微信公众平台的高级接口。用户标签管理接口可以创建、查询、批量为用户打标签;用户基本信息接口可以拉取 subscribe、sex、city、province、country、language 等字段。需要注意的是,这些接口需要认证的服务号才有完整权限,个人订阅号的部分接口受限,实际项目中建议通过第三方托管或迁移到服务号体系来补齐能力。
二、数据采集与存储的实操方案
数据采集的核心是接口调用与落库。下面给出一段通过用户标签接口和用户信息接口采集数据的示例代码(以 PHP 为例,其他语言逻辑相同)。整个流程分为三步:先拉取全部关注者的 openid 列表,再逐批获取用户详细信息,最后同步标签关系并写入数据库。
<?php
// 获取access_token(实际项目中请缓存,避免频繁刷新)
function getToken($appid, $secret) {
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}";
$res = json_decode(file_get_contents($url), true);
return $res['access_token'];
}
// 批量拉取关注者openid,每次最多10000个
function getOpenids($token, $nextOpenid = '') {
$url = "https://api.weixin.qq.com/cgi-bin/user/get?access_token={$token}&next_openid={$nextOpenid}";
return json_decode(file_get_contents($url), true);
}
// 获取单个用户画像信息:性别、省份、城市、语言等
function getUserInfo($token, $openid) {
$url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token={$token}&openid={$openid}&lang=zh_CN";
return json_decode(file_get_contents($url), true);
}
$token = getToken('your_appid', 'your_secret');
$result = getOpenids($token);
foreach ($result['data']['openid'] as $openid) {
$info = getUserInfo($token, $openid);
// 写入用户表:openid、性别、省份、城市、标签等
saveToDatabase($info);
}
?>存储层面建议设计三张核心表:用户基础表(openid、sex、province、city、language、subscribe_time)、标签表(tag_id、tag_name)、用户标签关联表(openid、tag_id)。这种多对多的关联设计方便后续灵活调整标签,比如把旧标签废弃、新标签启用,都不需要改动用户主表结构。
性别字段在接口返回中是数字:1 表示男性,2 表示女性,0 表示未知(用户未设置时)。地域字段则是中文文本,如 province 返回广东,city 返回深圳。入库时建议对 province 做一次标准化映射,比如统一简繁体、处理直辖市的情况,否则后续做地域聚合统计时会出现同省异名的脏数据。
三、性别与地域维度的交叉分析
单看性别分布或单看地域分布,得到的信息都比较平面。真正有价值的洞察往往来自交叉分析。举个例子:某知识类账号整体性别比例是男性 65%、女性 35%,看起来男性占主导。但按地域拆分后发现,北上广深四个一线城市中女性占比接近 55%,与二三线城市形成鲜明反差。这个交叉结果直接指导了运营策略:面向一线城市的本地化活动偏向女性向选题,而面向全国的常规内容继续以男性兴趣为主。
交叉分析的实现并不复杂,用一条 SQL 就能完成基础统计:
SELECT
province,
SUM(CASE WHEN sex = 1 THEN 1 ELSE 0 END) AS male_count,
SUM(CASE WHEN sex = 2 THEN 1 ELSE 0 END) AS female_count,
COUNT(*) AS total,
ROUND(SUM(CASE WHEN sex = 2 THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 1) AS female_ratio
FROM wx_user
WHERE subscribe = 1
GROUP BY province
ORDER BY total DESC
LIMIT 20;除了性别与地域,还可以把标签维度加进来做三维分析。比如统计每个标签下用户的平均阅读频次、地域集中度,判断某个兴趣标签是否具有地域特征。美食标签的用户如果高度集中在川渝地区,那做线下活动时选址就有了明确方向。分析结果建议以数据报表形式定期输出,周报看趋势变化,月报看结构迁移,比如某个月女性用户占比突然上升 5 个百分点,就要追溯是哪篇推文带来了这批新粉丝,从中提炼可复制的内容方法论。
四、从画像到用户分层:落地运营策略
画像分析的最终目的是分层运营。基于前面的数据,可以设计一个四层模型。第一层是核心层:高活跃、高互动、有明确兴趣标签的用户,规模通常在 5% 到 10%,是社群运营和种子用户测试的重点对象。第二层是常规层:有一定阅读行为但互动少,占大头,靠内容质量维持。第三层是沉默层:30 天以上无任何打开行为的用户,需要通过针对性的唤醒活动激活。第四层是流失层:已取关用户,用于复盘分析取关前的内容特征。
分层的落地手段主要是微信的分组群发能力。通过标签接口给用户打好分层标签后,群发时可以按标签筛选目标人群,实现不同层级收到不同内容。比如新关注的用户在 7 天内收到一条新手引导推文,核心层用户优先获得活动内测邀请,沉默层用户收到带有福利钩子的召回内容。这种差异化的触达方式,比全网无差别群发的打开率通常高出不少。
最后要强调的是,用户画像不是一次性工程而是持续迭代的过程。建议建立固定的数据更新机制,比如用户属性数据每周同步一次,行为标签每天更新,分层结果每月重新计算。同时注意合规边界:涉及用户数据的采集和使用要遵循相关法律法规,获取用户信息时应走网页授权流程并明示用途,敏感数据加密存储。把数据用对地方,画像才能真正反哺内容与增长,让每一次推送都有的放矢。