微信小程序做到一定阶段,页面跳转几乎成了绕不开的基础能力。表面上看,它只是从一个页面到另一个页面;真正落到项目里,入口不同、流程状态不同、是否要保留返回路径不同,写法也会完全不一样。有些跳转发生在小程序内部,适合用组件或 API 处理;有些跳转来自外部渠道,比如短信、社群、海报二维码,则通常要先配置好链接,再让用户进入指定页面。把这些场景分开,后面的开发和运营维护都会更省力。
小程序内部的普通入口,比如首页商品卡片、文章列表标题、活动页按钮,最常见的写法是 navigator 组件。它适合目标明确、路径相对固定、点击后直接过去的场景,代码也比较轻:
查看详情
如果入口需要带参数、判断登录状态、做埋点,或者要根据用户行为决定去哪里,用 API 会更灵活。

内部跳转里,wx.navigateTo 用得最多。它的核心动作是“前进”:当前页面会留在页面栈里,用户点返回时还能回到上一页。商品列表进详情、表单页进提交结果页、普通内容页进二级页面,大多适合这种方式。
wx.navigateTo({
url: '/pages/detail/detail?id=123'
})
这里的路径建议使用项目里真实的页面路径,参数通过问号拼接。需要注意,如果目标页面是 tabBar 页面,通常不能直接用 navigateTo 打开,一般要换成 switchTab,或者用中间页处理。这个点开发时很容易忽略。

如果需求不是“让用户还能回退”,而是“完成当前动作后,就不要再回到旧页面”,更适合 wx.redirectTo。它会关闭当前页面,再打开目标页面,所以返回键不会回到刚关闭的页面。这类方式常见于活动承接页、临时入口页、登录成功后的引导页,目的往往是把用户路径收拢到新的流程里。
wx.redirectTo({
url: '/pages/detail/detail'
})
和 navigateTo 相比,区别很直观:一个保留当前页,一个用新页面替换当前页。选择时主要看业务是否允许用户回退。
还有一种更彻底的方式是 wx.reLaunch。它会关闭所有页面,再打开指定页面,相当于清空当前页面栈,从某个入口重新开始。它更适合登录完成、权限校验结束、活动流程收尾,或者产品希望用户回到首页重新选择路径的场景。

wx.reLaunch({
url: '/pages/home/home'
})
正因为 reLaunch 会清空页面栈,所以一般不会用在普通浏览流程里,更多用在流程收尾或状态重置时。如果随意使用,用户可能失去回退路径,体验反而不自然。
除了小程序内部跳转,实际项目里经常还会遇到外部入口。比如海报上的二维码、短信里的短链、社群转发出来的链接,用户点击后需要直接进入小程序的某个页面。这类需求如果只靠小程序代码写死,会比较被动,因为外部渠道往往不是开发一个人能长期维护的。此时,第三方短链平台的小程序跳转能力会更实用。

以快缩短网址为例,它提供了面向小程序的跳转链接配置入口。通常可以从官网进入相应功能页,例如 https://www.suo.run/mini ,登录账号后进入控制台。在左侧菜单中选择“跳转小程序”,再选择“跳转微信小程序”,点击“创建小程序链接”,就可以开始创建一条小程序链接。根据实际填写目标页面、参数、渠道信息等内容后,就能生成一条可配置、可管理的跳转链接。
从运营角度看,短链跳转平台通常会提供一些配套能力,比如批量导入链接、自定义短码、访问数据统计,以及针对不同平台做跳转适配。电商、社群、短信营销等场景里,链接数量多、渠道杂、落地页也经常需要调整,这些能力会让管理成本更低。日常使用时,是否免登录、能否批量处理、能否自定义后缀、有没有基础访问统计,都会影响体验。
这种方式比较实在的好处,是把外部传播入口和小程序页面做了一层解耦。海报印出去、短信发出去、社群转发出去之后,链接会散落在不同渠道。如果后续目标页面调整、活动更换落地页,或者需要区分不同渠道来源,单靠代码里的固定跳转就不够方便。通过跳转链接统一管理,运营配置会更轻,后续排查和替换也更清晰。对外链跳转来说,除了能否进入页面,还要关注跳转是否稳定、目标页是否容易配置、来源是否能区分,以及维护成本是否低。
所以,微信小程序的页面跳转并没有唯一答案,关键看它处在什么业务关系里。普通浏览型页面,可以用 navigator 或 wx.navigateTo 保留回退路径;流程结束型页面,可以用 wx.redirectTo 关闭当前页;需要重置入口或清空状态时,再考虑 wx.reLaunch;如果入口来自外部投放和传播,则更适合借助短链跳转平台做集中配置。实际开发中,还可以把跳转逻辑封装到统一方法里,集中处理路径、参数、登录态和异常提示。场景清楚之后,方法选择基本就不会差太远。
今すぐログイン