上线前验收
从陌生用户视角检查访问、移动端、核心流程、支付和可恢复性。六轮清单,每轮解决一类会让用户立刻掉头的问题。
"部署成功"只说明服务器启动了,不说明产品可以交给用户。
上线验收要回答的是:一个陌生人在你不在线的时候,能不能完成核心流程;中途失败了,他能不能看懂发生了什么、有没有办法继续。
第一次上线最容易翻车的不是"功能还不够多",而是那些你觉得很小、用户会立刻撞上的问题:手机上排版挤坏、表单提交没反馈、结果页空的、找不到联系方式。
快速版
最短版本,只看这十条:
- 首页能说清"这是给谁的、解决什么问题、我现在能做什么"
- 手机上能正常用(不是能打开,是能用)
- 只有一个主按钮,用户知道下一步点哪
- 表单提交有反馈,成功失败都有
- HTTPS 正常,域名跳转正常
- 有一个能收到反馈的入口
- 报错时你知道去哪看日志
- 基础数据能看到(来了多少人、多少人点了)
- 有回滚方案
- 发布文案已经写好
下面是完整六轮。
先准备四种视角
不要只用开发电脑和管理员账号检查。至少准备:
- 一个从未登录过的隐私窗口
- 一个普通用户账号(不是管理员)
- 一台手机,用移动网络(不是家里 Wi-Fi)
- 一个生产构建,不是开发服务器
最后一条是硬要求。我们自己遇到过开发环境完全正常、生产部署出现重定向死循环的情况,根因不在页面代码,而在反向代理、协议头和生产运行方式组合后的行为差异。dev 通过不等于上线通过。
第一轮:能不能打开
- 裸域名和
www的跳转符合预期 - HTTPS 证书正常,没有混合内容警告
- 首页、文档、价格页、登录页在手机上能打开
- 404 页面提供返回路径,不是框架默认错误页
- 500 页面不是白屏
- 页面刷新不会丢失当前路由
- 首屏没有依赖开发机才能访问的资源
倒数第二条常被漏:直接访问深层地址、或者在深层页面刷新,如果路由配置有问题,这时候才会暴露。
第二轮:手机端
很多产品第一次被看到不是在电脑上,而是在微信、社群、聊天窗口里被点开。
- 第一屏没有挤坏,没有横向滚动
- 按钮够大,能用手指点到
- 输入框聚焦时页面不会乱跳
- 字体不会小到看不清
- 图片和结果展示不会溢出
- 从微信里打开正常(不只是在浏览器里)
最后一条要单独测。微信内置浏览器的行为和系统浏览器不完全一样。
第三轮:核心流程走十次
按真实用户顺序走,不是逐个页面点。
- 从公开入口理解产品
- 完成登录,或跳过登录
- 使用一次核心能力
- 看见结果和下一步
- 需要时完成购买或留下联系方式
完整走十次。 有些问题只在第四次、第七次才暴露——状态残留、缓存、重复提交、会话过期。
每走一步问一句:用户现在知道发生了什么吗?还要等多久?下一步点哪里?
第四轮:故意把它弄坏
- 提交空内容和超长内容
- 快速连续点击两次提交
- 请求进行中刷新页面
- 断网后重新连接
- 未登录直接打开受保护地址
- 登录后用另一个标签页继续旧流程
- 第三方接口超时或返回非预期字段
产品质量很少由成功状态拉开差距,更多由失败之后能不能恢复决定。
第五轮:支付与权益
接了支付的话,用真实小额订单跑完整链路。
- 金额由服务端确定,前端改不了
- 支付成功后能收到回调
- 回调验签,核对商户号、订单号、金额
- 重复回调不会重复发放权益
- 回调缺席时,前端主动查单可以补偿
- 未支付、支付中、成功、失败都有明确页面
- 权益绑定账号,不是只写在当前浏览器
- 生产环境的价格和页面显示一致
我们接入支付时遇到的问题是:真实回调字段名和接口文档写的不一样。代码看起来完全正确,实际上永远收不到订单号。只有跑一笔真实小额订单才能发现这类问题。
最后一条是我们自己翻过的车。价格配在环境变量里,本地测试时设成了两毛钱方便走通链路,这个测试值留在了生产环境——页面显示 699 元,实际下单只扣两毛,程序完全正常运行,没有任何报错。 上线前一定要核对生产环境里价格、额度这类业务数字的实际值。
第六轮:被找到和被信任
- 页面标题和描述不是默认模板文案
- favicon 和分享图能正常加载
-
robots.txt和sitemap.xml可访问 - 联系方式、反馈入口、退款说明容易找到
- 隐私政策说明收集哪些数据、为什么收集
- 日志不会输出密码、令牌、完整支付信息
- 有真实截图或示例,不是纯文字承诺
关于信任:不需要做成企业官网,但至少别让人一眼觉得是临时拼出来的空页面。最小信任感通常来自清楚的标题、说明这是给谁的、真实的截图、能找到的联系方式。
上线记录
每次上线保留四项:
版本:____________
时间:____________
变更范围:____________
回滚方式:____________出问题时先恢复服务,再查原因。没有回滚方案的上线本质上是在赌。 具体做法见发布与回滚。
常见卡点
| 卡在哪 | 可能原因 | 试试这样 |
|---|---|---|
| 开发正常,上线白屏或死循环 | 只在 dev 下测过 | 用生产构建 + 真实代理演练 |
| 手机上按钮点不到 | 只在电脑上看过 | 用真机 + 移动网络测 |
| 微信里打开异常 | 内置浏览器行为不同 | 单独从微信测一遍 |
| 支付成功但没发货 | 回调字段名和文档不符 | 跑真实小额订单 |
| 生产价格不对 | 测试值留在了生产 | 核对业务数字变量的实际值 |
| 用户说"打不开"但你打得开 | 缓存、地区、网络差异 | 用隐私窗口 + 不同网络复现 |
| 刷新后 404 | 深层路由配置问题 | 在深层页面刷新测试 |
| 上线第一天完全不知道有没有人来 | 没接基础统计 | 上线前把统计接上 |
验收标准
- 四种视角都准备了,包含生产构建和真机移动网络
- 六轮清单全部走完,不是抽查
- 核心流程完整走过十次
- 接了支付的话,跑过真实小额订单并验证重复回调
- 核对过生产环境里价格、额度这类业务数字
- 上线记录四项都填了,回滚方式是具体命令不是"再看看"
- 找了一个没参与开发的人用手机走过主流程
本章动作
把生产地址发给一个没参与开发的人,让他用手机完成主流程。
你只记录,不解释、不提示、不帮忙操作。他卡住的第一个地方,就是上线前的最高优先级。
不要问"你觉得怎么样"——所有人都会说"挺好的"。看他的手停在哪里。
下一步
- 发布与回滚——回滚方案怎么准备
- 正式发布计划——把上线变成一次可判断的实验
- 监控、日志与故障处理——上线后怎么知道出了问题
- 隐私、安全与最小合规——对外前的合规底线