三个关键问题驱动产品分析:
功能使用频率、用户路径、行为模式
注册漏斗、付费转化、功能采用
日/周/月留存、流失预警、粘性指标
没有分析的 SaaS 就像蒙着眼开车——你可能侥幸到达目的地,但更可能撞墙。
事件是分析的原子单位。用户做的每件有意义的事都应该是一个事件。
page_view — 页面访问signup_started — 开始注册signup_completed — 注册完成invite_sent — 发出邀请onboarding_step_completed — 引导步骤first_project_created — 创建首个项目first_data_imported — 首次导入数据integration_connected — 连接集成pricing_page_viewed — 查看定价checkout_started — 开始结账subscription_created — 订阅成功subscription_cancelled — 取消订阅feature_used — 功能使用export_created — 导出数据report_shared — 分享报告collaborator_added — 添加协作者事件和用户都可以有属性,让分析更精细。
// 事件属性
{
event: 'feature_used',
properties: {
feature_name: 'export_csv',
plan: 'pro',
export_size_mb: 12.5,
platform: 'web'
}
}
// 用户属性
{
user_id: 'usr_123',
properties: {
plan: 'pro',
signup_date: '2026-01-15',
company_size: '11-50',
industry: 'SaaS',
mrr: 4900
}
}
| 指标 | 公式 | 意义 | 健康范围 |
|---|---|---|---|
| DAU/MAU | 日活 / 月活 | 用户粘性 | 20%+ 优秀 |
| 注册→激活率 | 完成核心动作 / 注册数 | 产品体验 | 40%+ 良好 |
| 付费转化率 | 付费用户 / 活跃用户 | 价值感知 | 3-8% |
| 月流失率 | 当月取消 / 月初订阅数 | 产品留存 | <5%(B2C)<2%(B2B) |
| NRR | 留存收入 + 扩展 - 流失 - 降级 | 增长健康度 | >100% 优秀 |
| 维度 | PostHog | Mixpanel | Umami | Amplitude | Google Analytics |
|---|---|---|---|---|---|
| 类型 | 产品分析全平台 | 产品分析 | 网站分析 | 产品分析 | 网站分析 |
| 开源 | ✅ 是 | ❌ 否 | ✅ 是 | ❌ 否 | ❌ 否 |
| 自托管 | ✅ 是 | ❌ 否 | ✅ 是 | ❌ 否 | ❌ 否 |
| 免费额度 | 1M 事件/月 | 1M 事件/月 | 100K 页面浏览/月 | 50K MTUs/月 | 无限(采样) |
| 付费起步 | $0.00031/事件 | $0.28/1K 事件 | $9/月(50K) | 联系销售 | GA4 免费 |
| Session Replay | ✅ 内置 | ✅ 内置 | ❌ 无 | ✅ 内置 | ❌ 无 |
| Feature Flags | ✅ 内置 | ❌ 无 | ❌ 无 | ✅ 有 | ❌ 无 |
| A/B 测试 | ✅ 内置 | ❌ 无 | ❌ 无 | ✅ 有 | ✅ Optimize |
| GDPR 合规 | ✅ 自托管最优 | ✅ | ✅ 隐私优先 | ✅ | ⚠️ 有争议 |
| 数据归属 | 你自己的数据库 | Mixpanel 云 | 你自己的数据库 | Amplitude 云 | Google 云 |
| 适合 | SaaS 首选 | 成熟团队 | 隐私优先网站 | 企业级 | 流量分析 |
数据来源:PostHog Pricing (2026-05)、Mixpanel Pricing (2026-05)、Amplitude Pricing (2026-05)、Umami 官网 (2026-05)。
PostHog 是一个开源的产品分析平台,提供了从事件追踪到 Session Replay、Feature Flags、A/B 测试的全套工具。由 Y Combinator 孵化,截至写作时有 25,000+ GitHub Stars。
事件分析、漏斗、留存、路径分析、生命周期
免费 1M 事件/月
用户操作录像,看真实用户怎么用你的产品
免费 5K 录制/月
功能开关、渐进式发布、用户分群
免费 1M 请求/月
A/B 测试、统计显著性计算
与 Feature Flags 一起计费
错误监控、堆栈追踪、异常告警
免费 100K 异常/月
整合多数据源、SQL 查询
免费 1M 行/月
数据来源:PostHog Pricing 页面 (2026-05)。免费额度每月重置。
// 安装
npm install posthog-js
// Next.js 初始化 (app/layout.tsx 或 pages/_app.tsx)
import posthog from 'posthog-js'
import { PostHogProvider } from 'posthog-js/react'
if (typeof window !== 'undefined') {
posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY!, {
api_host: process.env.NEXT_PUBLIC_POSTHOG_HOST || 'https://us.i.posthog.com',
person_profiles: 'identified_only', // GDPR 友好
})
}
// 追踪页面浏览(自动)
posthog.capture('$pageview')
// 追踪自定义事件
posthog.capture('project_created', {
project_type: 'saas',
template_used: true,
team_size: 5
})
// 识别用户
posthog.identify('user_123', {
email: 'user@example.com',
plan: 'pro',
signup_date: '2026-01-15'
})
// Feature Flag 检查
const isNewDashboard = posthog.isFeatureEnabled('new-dashboard')
if (isNewDashboard) {
// 展示新版本
}
// A/B 测试
const variant = posthog.getFeatureFlag('pricing-redesign')
// variant = 'control' | 'variant-a' | 'variant-b'
# Docker Compose 部署
# https://github.com/PostHog/self-host
git clone https://github.com/PostHog/self-host.git
cd self-host
docker compose up -d
# 自托管的好处:
# 1. 数据完全自主——不存在第三方服务器
# 2. 无 GDPR 数据处理协议需求
# 3. 无事件量限制(只受你的服务器资源)
# 4. 可与内部数据仓库集成
# 最低要求:
# - 4 CPU / 8GB RAM / 50GB SSD
# - 推荐:8 CPU / 16GB RAM / 200GB SSD
Umami 是一个轻量、开源、隐私友好的网站分析工具。如果你只需要"有多少人来、从哪来、看了什么",Umami 就够了。
| 维度 | Umami | Google Analytics 4 |
|---|---|---|
| 隐私 | ✅ 不设 Cookie、不追踪个人 | ❌ 追踪跨站、设 Cookie |
| Cookie Banner | ✅ 不需要(符合 GDPR) | ❌ 需要用户同意 |
| 脚本大小 | ~2KB | ~45KB+ |
| 数据归属 | 你的数据库 | |
| 界面 | 简洁、核心指标 | 复杂、功能多但学习曲线陡 |
| 成本 | 自托管免费 / 云版 $9/月起 | 免费 |
// Umami 集成(极简)
// 在 HTML head 中添加:
<script async src="https://analytics.yourapp.com/script.js"
data-website-id="your-website-id"></script>
// 追踪自定义事件
umami.track('signup_completed', { plan: 'pro' })
// 追踪页面浏览(SPA)
umami.track('/dashboard')
// 自托管 Docker
docker run -d --name umami \
-p 3000:3000 \
-e DATABASE_URL=postgresql://user:pass@db:5432/umami \
ghcr.io/umami-software/umami:postgresql-latest
// lib/analytics.ts — 统一分析接口
interface AnalyticsEvent {
name: string;
properties?: Record<string, any>;
userId?: string;
}
class Analytics {
private posthog: typeof import('posthog-js');
private umami: any;
init() {
// PostHog for product analytics
if (typeof window !== 'undefined') {
posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY!, {
api_host: process.env.NEXT_PUBLIC_POSTHOG_HOST,
person_profiles: 'identified_only',
capture_pageview: false, // 手动控制
});
}
}
track(event: AnalyticsEvent) {
// PostHog
posthog?.capture(event.name, event.properties);
// Umami(仅关键事件)
if (['signup_completed', 'subscription_created', 'page_view'].includes(event.name)) {
umami?.track(event.name, event.properties);
}
// 也可以发送到自己的后端
if (process.env.NODE_ENV === 'development') {
console.log('[Analytics]', event);
}
}
identify(userId: string, traits: Record<string, any>) {
posthog?.identify(userId, traits);
}
page(path: string) {
posthog?.capture('$pageview', { $current_url: path });
umami?.track(path);
}
group(groupId: string, traits: Record<string, any>) {
posthog?.group('company', groupId, traits);
}
}
export const analytics = new Analytics();
// 使用
analytics.track({
name: 'project_created',
properties: {
project_type: 'saas',
template: 'nextjs',
team_size: 3
}
});
// 后端事件追踪(API 路由中)
import PostHog from 'posthog-node'
const posthog = new PostHog(process.env.POSTHOG_API_KEY!, {
host: process.env.POSTHOG_HOST || 'https://us.i.posthog.com',
})
// 在 API 路由中追踪
app.post('/api/projects', async (req, res) => {
const project = await db.projects.create(req.body)
// 追踪事件
posthog.capture({
distinctId: req.user.id,
event: 'project_created',
properties: {
project_id: project.id,
project_type: project.type,
$set: {
last_project_created_at: new Date().toISOString(),
}
}
})
res.json(project)
})
// 优雅关闭
process.on('SIGTERM', () => {
posthog.shutdown()
})
漏斗是 SaaS 最重要的分析工具——它告诉你用户在哪一步流失。
| 漏斗步骤 | 常见流失原因 | 优化方法 |
|---|---|---|
| 访问→注册 | 价值不清晰、表单太长 | 精简注册流程(SSO/邮箱一步注册)、强化价值主张 |
| 注册→激活 | 不会用、没引导 | Onboarding 引导、模板/示例数据、快速到达 Aha Moment |
| 激活→付费 | 看不到价值、定价不匹配 | 展示 ROI、免费试用、限时优惠 |
| 付费→续费 | 使用频率低、有替代品 | 使用追踪、功能深度引导、成功经理 |
// PostHog 漏斗 API 查询
// 查找注册→首次使用的转化时间
const funnel = await posthog.funnels.calculate({
funnelSteps: [
{ event: 'signup_completed' },
{ event: 'first_project_created' },
],
dateRange: '30d',
breakdownBy: '$browser', // 按浏览器分组找问题
})
留存是 SaaS 的生命线。高留存 = 可持续增长。
// 计算同期群留存(Cohort Retention)
// SQL 查询示例
WITH cohorts AS (
SELECT
user_id,
DATE_TRUNC('month', created_at) AS cohort_month
FROM users
),
activity AS (
SELECT DISTINCT
user_id,
DATE_TRUNC('month', active_date) AS active_month
FROM user_activity
)
SELECT
c.cohort_month,
COUNT(DISTINCT c.user_id) AS cohort_size,
a.active_month,
COUNT(DISTINCT a.user_id) AS retained,
ROUND(COUNT(DISTINCT a.user_id)::numeric /
NULLIF(COUNT(DISTINCT c.user_id), 0) * 100, 1) AS retention_pct
FROM cohorts c
LEFT JOIN activity a ON c.user_id = a.user_id
AND a.active_month >= c.cohort_month
GROUP BY c.cohort_month, a.active_month
ORDER BY c.cohort_month, a.active_month;
产品分析涉及用户行为数据,必须遵守隐私法规。
| 要求 | 做法 | 工具支持 |
|---|---|---|
| 合法基础 | 用户同意 or 合法利益 | Umami 不需同意;PostHog 自托管可选 |
| 数据最小化 | 只收集必要数据 | PostHog person_profiles: 'identified_only' |
| 数据可删除 | 用户可要求删除其数据 | PostHog API: posthog.deletePerson() |
| 数据处理协议 | 与第三方签署 DPA | PostHog 云版有 DPA;自托管不需要 |
| Cookie 同意 | 追踪 Cookie 需用户同意 | Umami 不用 Cookie;PostHog 可配置 |
// GDPR 友好的分析配置
// 1. PostHog:仅识别用户时建立个人档案
posthog.init(API_KEY, {
person_profiles: 'identified_only', // 匿名用户不创建个人档案
capture_pageview: true,
persistence: 'localStorage', // 不用 Cookie
})
// 2. 用户请求删除数据
app.post('/api/privacy/delete-my-data', requireAuth, async (req, res) => {
const userId = req.user.id;
// PostHog 删除
await posthogServer.deletePerson(userId);
// Umami 删除(如使用)
await db.analyticsEvents.deleteByUser(userId);
// 你的数据库
await db.users.anonymize(userId);
res.json({ message: 'Data deletion request processed' });
});
// 3. Cookie Banner 集成
// 如果需要 Cookie 同意才启用分析
if (cookieConsent === 'granted') {
analytics.init();
} else {
// 只用不需要 Cookie 的工具(如 Umami)
umamiInit();
}
Aha Moment 是用户"顿悟"产品价值的那一瞬间。找到它是 PLG 的关键。
// PostHog:分析哪些行为与留存最相关
// 使用 Correlation Analysis
// 对比 D7 留存用户 vs 流失用户的行为差异
// 常见 Aha Moment 示例
const ahaMoments = {
slack: '发送 2000 条消息的团队',
dropbox: '在 2 个设备上安装',
zoom: '举办第一次视频会议',
notion: '创建 5 个页面',
figma: '邀请第一个协作者',
}
// 你的 Aha Moment 需要通过数据发现
// 方法:
// 1. 找到 D30 留存用户
// 2. 回溯他们在 D1-D7 做了什么
// 3. 找出留存用户比流失用户更常做的行为
// 4. 那个行为很可能就是 Aha Moment
// 构建实时关键指标仪表盘
// 后端 API
app.get('/api/analytics/dashboard', async (req, res) => {
const today = new Date();
const metrics = {
// 实时指标
activeUsersNow: await getActiveUsers(today, '1h'),
pageViewsToday: await getPageViews(today),
// 趋势指标
signupsThisWeek: await getSignups('7d'),
mrr: await getMRR(),
churnRate: await getChurnRate('30d'),
// 漏斗
signupToActivation: await getFunnelRate(
['signup_completed', 'first_project_created'], '7d'
),
activationToPaid: await getFunnelRate(
['first_project_created', 'subscription_created'], '30d'
),
};
res.json(metrics);
});
object_verb 格式,如 project_created、invoice_paidevent_version 属性,方便追踪变更