原创研究
在 Instagram 和 TikTok 里打开的应用链接会怎样:实测 74,000 次跳转
没人看到的预加载、拒绝打开商店的 TikTok 网页视图、在页面上方弹出的 App Store:我们的跳转日志揭示了什么。
发布于 · Adrien De Coster
简短回答
在 30 天内来自应用内浏览器的 74,713 次 Android 访问中,有 9.1% 是 Instagram 或 Facebook 在后台加载、约 30 秒后在无人查看的情况下丢弃的页面。在 Android 版 TikTok 里,Play Store 能否打开取决于 TikTok 使用哪种网页视图:在相同的链接、相同的日期,一种 User-Agent 格式有 85% 的会话到达了商店,另外两种只有 12–14%。在 iOS 上,Instagram 和 Facebook 会在应用内浏览器之上打开 App Store,页面从不进入后台,因此即使跳转成功,从页面测得的商店打开率也只有 13–56%。
这些数字来自一个智能链接服务的跳转日志:一个网址,把手机送往 App Store 或 Google Play。每当链接在社交应用里被打开,我们会展示一个小页面,把访客交接给商店,而这个页面会回报接下来发生了什么。下面是这些回报的内容、我们的测量方法,以及测量的边界在哪里。
数据
| 时间窗口 | 内容 | 数量 |
|---|---|---|
| 截至 2026-10-12 的 30 天 | 来自应用内浏览器的 Android 访问,按会话重建 | 74,713 |
| 2026-09-27 → 2026-10-26 | 应用内页面加载,全部平台 | 109,253 |
| 2026-10-20 → 2026-10-26 | 同上,重建为会话用于漏斗表 | 30,535 |
| 2026-10-16 → 2026-10-26 | 由页面自身判定的预加载 | 1,679 |
| 截至 2026-10-15 的 90 天,以及截至 2026-10-26 的 30 天 | Android 上的 TikTok,按网页视图格式统计的会话 | 73 + 1,247 |
| 应用内浏览器 | Android | iOS |
|---|---|---|
| 50,161 | 16,675 | |
| 27,911 | 9,441 | |
| TikTok | 3,755 | 1,219 |
| 普通浏览器(直接 302,作对照) | 24,185 | 24,627 |
还没开始分析,就有两点很明显。Meta 旗下应用带来的流量远多于 TikTok。而在 Android 上,四分之三以上的访问来自应用内浏览器,而不是 Chrome。
页面如何回报发生了什么
当链接在应用内浏览器中打开时,页面会做三件事,并为每件事发送一个信标:
auto:加载时立即开始交接到商店(iOS:用location.replace跳到 App Store 网址;Android:用一个intent://网址打开原生 Play Store 应用)。exit:页面变为隐藏(Page Visibility API)。这是网页能获得的最好信号,说明有别的东西(多半是商店)接管了屏幕。stuck:交接后 2.2 秒页面仍然可见,于是显示一张备用卡片,上面有商店按钮、“在浏览器中打开”提示和复制链接按钮。
网页看不到 App Store,也看不到 Play Store。下面的一切都是从这三个信号推断出来的,推断在哪里失效,见“局限”一节。
发现 1:Android 上约每 11 次 Meta 访问中就有 1 次是没人看到的预加载
在截至 October 12 的 30 天里,有一类 Android 会话的表现是任何真人访问都不可能有的:页面加载了,交接计时器从未运行,页面在 29 到 31 秒后被销毁。没有 auto,没有 stuck,没有点击。iOS 上没有类似现象。
这正是 Instagram 和 Facebook 应用内浏览器的特征:预加载信息流里的链接,把它隐藏着,用户滑过去后就丢掉。页面运行了我们的 JavaScript,所以这次访问被记录了下来。但从来没有人看过它。
| 人群 | 访问 | 预加载 | 占比 |
|---|---|---|---|
| 全部访问,全部平台 | 139,199 | 6,790 | 4.9% |
| Android | 95,648 | 6,790 | 7.1% |
| Android 应用内 | 74,713 | 6,790 | 9.1% |
| Android 应用内,排除最大的链接 | — | — | 4.9% |
| 受影响最大的单个链接 | 35,337 | 4,864 | 13.8% |
我们把这个判定标准拿去和明显是真人的会话对照:交接后 2–3 秒商店打开的会话中 17,606 个里有 0 个符合,有人点击了商店按钮的会话中 244 个里有 0 个符合。
这个占比每周都在变:该窗口最后一周是 6.8%,之前几周分别是 8.8%、10.6% 和 10.0%。它还集中在投放付费 Instagram 广告的地方:窗口内 72% 的预加载来自一个大型 Instagram 广告活动背后的同一个链接。
从 October 16 起,页面在运行时自行判定:如果页面从未显示、存活至少 20 秒后被销毁,就上报为预加载而不是 exit。此后捕获到的情况如下:
| 应用内浏览器 | 页面加载 | 预加载 | 占比 |
|---|---|---|---|
| Instagram,Android | 15,100 | 1,152 | 7.6% |
| Facebook,Android | 19,830 | 477 | 2.4% |
| TikTok,Android | 3,648 | 1 | 0.03% |
| Instagram,iOS | 5,965 | 45 | 0.8% |
| Facebook,iOS | 6,134 | 4 | 0.07% |
这个运行时计数只是下限。没有运行任何脚本就被丢弃的预加载不会留下信标,而且运行时规则比历史重建更严格。
为什么重要。 如果你在跳转处统计点击,那么 Instagram Android 上大约每 13 次“点击”就有一次从来没有被人看到。这个渠道的点击到安装转化率会显得比实际更差,基于原始跳转次数搭建的广告看板也会把触达高估差不多这么多。
发现 2:TikTok 是否拒绝打开 Play Store,取决于它使用哪种网页视图
在 Android 版 TikTok 里,有一部分访客始终离不开页面:交接触发后,TikTok 弹出它自己的对话框(“The action cannot be completed”,即“无法完成该操作”)。并不是每个链接都会这样,好几周里它看起来像是取决于链接。其实不是。它取决于 TikTok 为该访客使用的应用内浏览器,而 User-Agent 暴露了这一点:
| 格式 | User-Agent 形态 |
|---|---|
| A | … Chrome/151 Mobile Safari/537.36 musical_ly_46.8.3 |
| B | Version/4.0 … musical_ly_2024509000 JsSdk/1.0 … BytedanceWebview |
| C | Version/4.0 … musical_ly_2024701040 AppName/musical_ly ByteLocale/… |
交接已触发且页面变为隐藏,计为通过;显示了备用卡片,计为失败。比率 = 通过 / (通过 + 失败),按设备和日期统计:
| 格式 | 截至 2026-10-15 的 90 天 | 30 天,2026-09-27 → 10-26 |
|---|---|---|
| A | 23 / 26 (88%) | 827 / 969 (85%) |
| B | 0 / 17 (0%) | 34 / 245 (14%) |
| C | 5 / 30 (17%) | 4 / 33 (12%) |
真正能下结论的对比,是固定链接和日期,因为各格式的占比每周都在变化:
| 链接 | 格式 A | 格式 B |
|---|---|---|
| 链接 1 | 560 / 674 (83%) | 32 / 192 (17%) |
| 链接 2 | 257 / 285 (90%) | 2 / 47 (4%) |
相同的链接、相同的跳转代码、同一天:一种网页视图允许商店打开,另一种大多不允许。在 90 天的数据里,自定义域名没有带来任何差别。TikTok 没有公开说明这个对话框、它的触发条件,以及哪些用户会用到哪种网页视图,所以我们能依靠的只有 User-Agent 的区分。
为什么重要。 任何网址形式都解决不了:intent:// 跳出和普通的 https://play.google.com 网址都会遭到同样的拒绝。你能做的是不要把出口藏起来:在 TikTok 里,立刻显示“在浏览器中打开”的说明和复制按钮,而不是等超时之后。
发现 3:在 iOS 上,App Store 会覆盖在应用内浏览器之上打开
在 Android 上,交接之后大多数会话的页面都会变为隐藏,通常在 1 到 3 秒后。而在 iOS 的 Instagram 和 Facebook 里,尽管几乎每个会话都触发了交接,页面却常常不会隐藏:
| 应用内浏览器 | 页面加载 | 已触发交接 | 已隐藏 | …4 秒内 | 2.2 秒时仍可见 |
|---|---|---|---|---|---|
| Instagram,Android | 7,190 | 77.5% | 90.0% | 75.9% | 47.6% |
| Facebook,Android | 13,600 | 72.4% | 73.8% | 39.6% | 77.8% |
| TikTok,Android | 2,920 | 47.1% | 85.2% | 79.5% | 7.6% |
| Instagram,iOS | 2,881 | 94.6% | 55.9% | 41.7% | 64.2% |
| Facebook,iOS | 3,078 | 87.0% | 13.1% | 7.9% | 65.6% |
| TikTok,iOS | 866 | 93.8% | 50.5% | 23.8% | 75.2% |
如果三分之二的 iOS 访客真的卡在一张带“打开 App Store”按钮的备用卡片前,应该会有不少人去点它。事实并非如此:iOS Instagram 页面加载中只有 0.9%、iOS Facebook 加载中只有 0.4% 点击了按钮。也不存在某个“正常工作”的 iOS 版本:
| iOS 主版本 | 有交接的会话 | 页面已隐藏 |
|---|---|---|
| 16 | 127 | 24.4% |
| 17 | 106 | 33.0% |
| 18 | 958 | 33.3% |
| 26 | 3,711 | 39.3% |
| 27 | 1,249 | 34.3% |
与数据吻合的解释是:在 iOS 的 Instagram 和 Facebook 里,App Store 会在应用内浏览器之上弹出,而不会把它送到后台。页面始终处于“可见”状态,因此即使访客正在看 App Store,visibilitychange 和 pagehide 也从不触发。
为什么重要。 任何靠“页面离开屏幕”来推断商店已打开的指标,在 iOS 上都是错的。我们曾经给客户展示一个正是这样算出来的“商店到达率”,结果它告诉 12 位付费客户中的 10 位:他们正常工作的链接坏了。我们把它删掉了。在 iOS 上,可信的安装信号在商店那一侧:App Store Connect 的广告活动报告,前提是在 App Store 网址上带上提供商令牌(pt)和广告活动令牌(ct)。
顺带测到的一些小发现
- Android 上 Play Store 绘制得很慢。 在已触发交接的 Instagram Android 会话中,页面在访问后 0–1 秒隐藏的有 1,061 个会话,2–3 秒的有 2,596 个,4–8 秒的有 1,273 个(7 天)。一个 2 秒的“成功了吗?”计时器,会在相当多真实成功的会话里抢在商店出现之前触发。我们自己的漏斗也一直把这些算作失败,直到我们允许交接后最长 8 秒内的 exit 仍计为成功。
- 真实失败率很低。 在 October 初 3 天内重建的 7,357 个 Instagram Android 会话里,“交接后什么也没发生”的模式只占会话的 1.9%,其中 24.3% 的访客在 3 分钟内再次点击了链接。看到备用卡片的访客再次点击的比例是 5.4%,和商店已打开的访客(4.6%)差不多:这些“失败”大多并不是失败。
- 要求点击会损失大部分流量。 在页面改为加载即开始交接之前,它展示的是一张带商店按钮的卡片。30 天里,10,523 次应用内访问只带来 2,119 次点击:约 80% 的访客根本没有到达商店。
方法
- 来源。 智能链接上的每次访问、交接页面发出的每个信标,都会连同平台、应用内浏览器(根据 User-Agent)、事件类型和精确到秒的时间戳写入 Cloudflare Workers Analytics Engine。User-Agent 声明自己是机器人、爬虫或链接预览抓取器的访客会被单独归类,并从这里的所有数字中排除。
- 会话。 Analytics Engine 没有页面加载 ID,所以我们把一次访问与之后一小时内共享相同链接、国家、城市、User-Agent 和应用内浏览器的信标拼接起来重建会话,直到出现相同键的下一次访问为止。约 98% 的信标能挂接到某次访问上。
- 预加载(发现 1)。 历史标准:没有交接、没有备用卡片、没有点击,并且在访问后 20 秒到 15 分钟之间出现 exit。自 2026-10-16 起的运行时标准:页面从未显示、存活至少 20 秒后被销毁,且交接计时器从未运行(或页面是在隐藏状态下加载的)时,页面上报预加载。信标携带一次性的签名令牌,因此无法被重放来抹掉真实访问。
- TikTok(发现 2)。 按链接、设备型号、TikTok 应用版本和日期划分会话。格式规则:带点号的
musical_ly_版本 → A;否则含JsSdk→ B;其余 → C。来自托管网络的访客单独计数,不纳入表格。30 天的复测使用与最初 90 天分析相同的脚本。 - 总数采用 Analytics Engine 的采样间隔(2–4% 的行代表不止一个事件)。会话表按行计数。
局限
- 我们从来看不到商店。 “已隐藏”只是“商店已打开”的替代指标。访客切换应用或锁屏时它也会触发。
- 时间戳精确到秒,会话是重建出来的。同一设备上快速连续的两次加载可能被合并。
- 集中度。 少数几个大链接主导了部分时间窗口:一个 Instagram 广告活动占了 30 天预加载的 72%,两个链接承载了 TikTok 的大部分会话。正因如此,才有了“相同链接”对照表。
- 这里没有任何内容在真机上验证过。 这些行为是从页面的回报中推断出来的。发现 3 中对 iOS 的解释是与数据吻合的解释,而不是我们亲眼看到的。
- 流量来自我们自己。 这些是使用我们链接的应用的访客,明显偏向少数几个国家的 Instagram 和 Facebook 广告活动。换一种流量构成会得到不同的百分比,但机制应该是一样的。
- 从不运行 JavaScript 的预加载是看不见的。 Android Instagram 页面加载中有 12% 完全不发送信标,其中一部分很可能也是预加载。
该怎么做
- 加载时就开始交接。 等待点击的页面会失去大部分应用内访客。保留手动按钮作为后备,只在交接明显失败时才显示。
- 在 Android 上,使用带 `S.browser_fallback_url` 的 `intent://`。 网页视图里的
https://play.google.com网址打开的是 Play Store 网站,不登录就什么也装不了。 - 给慢吞吞的商店留出时间。 至少等 3 秒再判定交接失败,并且仍要把迟到的 exit 计为成功。
- 在 TikTok 里,立刻给出出口:“··· → 在浏览器中打开”和复制链接按钮。改什么网址都无法让 TikTok 的拒绝消失。
- 不要把 Meta 的预加载算作点击。 如果你从跳转处统计点击,预计 Android 上 Instagram 和 Facebook 访问中有 2–9% 是没人看过的页面。
- 在商店端衡量安装, iOS 用 App Store Connect 广告活动链接(
pt+ct),Android 用 Play Install Referrer,而不是靠页面事件。
我们开发了 onestore.link,它默认为每个链接做到以上六点,上面的数据就来自它的跳转日志。
问与答
Android 上 Instagram 链接点击中有多少百分比是预加载?
在截至 2026-10-12 的 30 天里,来自应用内浏览器(Instagram 和 Facebook)的 Android 访问中有 9.1% 是应用在后台加载、约 30 秒后无人查看就丢弃的页面。自 2026-10-16 起,页面自身的运行时检测在 Instagram Android 上捕获到 7.6%,在 Facebook Android 上捕获到 2.4%,这是下限。在 iOS 上不到 1%。
为什么在 TikTok 应用内浏览器里打不开 Play Store?
TikTok 的 Android 应用使用好几种应用内浏览器。其中一种(User-Agent 里是带点号的 musical_ly_ 版本,并且没有 Version/4.0)在 30 天内有 85% 的会话到达了 Play Store。另外两种(带 JsSdk/BytedanceWebview 的 Version/4.0,或带 AppName/musical_ly 的)在相同链接、相同日期只有 12–14% 到达。拒绝交接的是 TikTok 本身,与网址形式无关。
在 iOS 上,网页能判断 App Store 是否已经打开吗?
在 Instagram 或 Facebook 里不能。App Store 会覆盖在应用内浏览器之上打开,所以页面从不隐藏,visibilitychange 也不会触发。7 天内,iOS 交接之后页面隐藏的比例只有 13%(Facebook)到 56%(Instagram),点击备用按钮的访客不到 1%。可靠的信号是 App Store Connect 的广告活动报告。
从应用内浏览器打开 Play Store 需要多长时间?
在 Android 上,大多数成功的会话中页面在交接后 2–3 秒隐藏,较慢的手机上最长要 8 秒。2 秒后显示的备用界面,在许多本来即将成功的会话里会比商店先出现。
在 Instagram 里,应用商店跳转真正失败的频率有多高?
在重建的 7,357 个 Instagram Android 会话中,真正失败的模式(交接已触发,然后什么也没发生,访客再次点击链接)占 1.9%。原始漏斗数据里看到的大多数失败都是测量假象:丢失的信标、缓慢的商店,或者预加载。
自定义域名会改变 TikTok 对链接的处理方式吗?
不会。在 90 天里,带自定义域名和不带自定义域名的链接被拒绝的方式完全相同。决定因素是 TikTok 为该访客使用的应用内浏览器。