Nghiên cứu gốc
Điều gì xảy ra với link ứng dụng được mở bên trong Instagram và TikTok: 74,000 lượt chuyển hướng được đo
Những lượt tải trước không ai nhìn thấy, một webview của TikTok từ chối mở cửa hàng, và một App Store mở đè lên trang: những gì nhật ký chuyển hướng của chúng tôi cho thấy.
Xuất bản · Adrien De Coster
Trả lời ngắn
Trong 74,713 lượt truy cập Android từ trình duyệt trong ứng dụng suốt 30 ngày, 9.1% là những trang mà Instagram hoặc Facebook tải ngầm rồi bỏ đi khoảng 30 giây sau mà không ai nhìn thấy. Bên trong TikTok trên Android, việc Play Store có mở được hay không phụ thuộc vào webview mà TikTok dùng: một định dạng user-agent đến được cửa hàng trong 85% phiên, hai định dạng còn lại chỉ 12–14%, trên cùng các link và cùng các ngày. Trên iOS, Instagram và Facebook mở App Store đè lên trình duyệt trong ứng dụng, nên trang không bao giờ chuyển xuống nền, và tỷ lệ mở cửa hàng đo từ trang chỉ đọc được 13–56% ngay cả khi việc chuyển sang cửa hàng đã thành công.
Những con số này đến từ nhật ký chuyển hướng của một dịch vụ liên kết thông minh: một URL đưa điện thoại đến App Store hoặc Google Play. Mỗi lần một link được mở bên trong một ứng dụng mạng xã hội, chúng tôi trả về một trang nhỏ chuyển khách sang cửa hàng, và trang đó báo lại điều gì xảy ra tiếp theo. Dưới đây là những gì các báo cáo đó cho thấy, cách chúng tôi đo, và nơi phép đo dừng lại.
Dữ liệu
| Khoảng thời gian | Nội dung | Khối lượng |
|---|---|---|
| 30 ngày đến 2026-10-12 | Lượt truy cập Android từ trình duyệt trong ứng dụng, tái dựng theo phiên | 74,713 |
| 2026-09-27 → 2026-10-26 | Lượt tải trang trong ứng dụng, mọi nền tảng | 109,253 |
| 2026-10-20 → 2026-10-26 | Như trên, tái dựng thành phiên cho các bảng phễu | 30,535 |
| 2026-10-16 → 2026-10-26 | Lượt tải trước do chính trang phân loại | 1,679 |
| 90 ngày đến 2026-10-15, rồi 30 ngày đến 2026-10-26 | TikTok trên Android, phiên theo định dạng webview | 73 + 1,247 |
| Trình duyệt trong ứng dụng | Android | iOS |
|---|---|---|
| 50,161 | 16,675 | |
| 27,911 | 9,441 | |
| TikTok | 3,755 | 1,219 |
| Trình duyệt thường (302 đơn thuần, để so sánh) | 24,185 | 24,627 |
Có hai điều nổi bật trước cả khi phân tích. Các ứng dụng của Meta gửi nhiều lưu lượng hơn TikTok rất nhiều. Và trên Android, hơn ba phần tư số lượt truy cập đến qua trình duyệt trong ứng dụng, không phải Chrome.
Cách trang báo lại điều đã xảy ra
Khi một link được mở bên trong trình duyệt trong ứng dụng, trang làm ba việc và gửi một beacon cho mỗi việc:
auto: trang bắt đầu chuyển sang cửa hàng ngay khi tải (iOS:location.replaceđến URL App Store; Android: một URLintent://mở ứng dụng Play Store gốc).exit: trang bị ẩn đi (Page Visibility API). Đó là tín hiệu tốt nhất mà một trang web có được cho biết có thứ gì đó, nhiều khả năng là cửa hàng, đã chiếm màn hình.stuck: trang vẫn hiển thị 2.2 giây sau khi chuyển sang cửa hàng, nên nó hiện một thẻ dự phòng với nút cửa hàng, gợi ý "mở trong trình duyệt" và nút sao chép link.
Một trang web không thể nhìn thấy App Store hay Play Store. Mọi thứ dưới đây đều được suy ra từ ba tín hiệu này, và phần giới hạn nói rõ suy luận đó sai ở đâu.
Phát hiện 1: khoảng 1 trên 11 lượt truy cập Android từ Meta là trang tải trước không ai thấy
Trong 30 ngày đến ngày 12 tháng Mười, một nhóm phiên Android rõ ràng hành xử theo cách không lượt truy cập nào của con người làm được: trang tải xong, bộ hẹn giờ chuyển sang cửa hàng không bao giờ chạy, và trang bị hủy 29 đến 31 giây sau. Không auto, không stuck, không chạm. iOS không có gì tương tự.
Đó là dấu hiệu của trình duyệt trong ứng dụng Instagram và Facebook tải trước một link nằm trong bảng tin, giữ nó ở trạng thái ẩn, rồi vứt đi khi người dùng cuộn tiếp. Trang đã chạy JavaScript của chúng tôi, nên lượt truy cập được ghi lại. Nhưng chưa ai từng nhìn vào nó.
| Nhóm | Lượt truy cập | Tải trước | Tỷ lệ |
|---|---|---|---|
| Mọi lượt truy cập, mọi nền tảng | 139,199 | 6,790 | 4.9% |
| Android | 95,648 | 6,790 | 7.1% |
| Android trong ứng dụng | 74,713 | 6,790 | 9.1% |
| Android trong ứng dụng, trừ link lớn nhất | — | — | 4.9% |
| Link bị ảnh hưởng nhiều nhất | 35,337 | 4,864 | 13.8% |
Chúng tôi đối chiếu tiêu chí với những phiên rõ ràng là người thật: 0 trên 17,606 phiên mà cửa hàng mở 2–3 s sau khi chuyển khớp với nó, và 0 trên 244 phiên có người chạm nút cửa hàng khớp với nó.
Tỷ lệ này thay đổi theo tuần: 6.8% ở tuần cuối của khoảng đó, rồi 8.8%, 10.6% và 10.0% ở các tuần trước. Nó cũng tập trung ở nơi có chiến dịch Instagram trả phí: 72% số lượt tải trước trong khoảng này đến từ một link đứng sau một chiến dịch Instagram lớn.
Từ ngày 16 tháng Mười, trang tự phân loại việc này khi chạy: nó báo một lượt tải trước thay vì một lượt thoát khi bị hủy sau ít nhất 20 s mà chưa từng được hiển thị. Đây là những gì nó bắt được từ đó:
| Trình duyệt trong ứng dụng | Lượt tải trang | Tải trước | Tỷ lệ |
|---|---|---|---|
| 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% |
Con số đo khi chạy này là mức sàn. Một lượt tải trước bị hủy mà không chạy script nào thì không để lại beacon, và quy tắc khi chạy chặt hơn phép tái dựng lịch sử.
Vì sao điều này quan trọng. Nếu bạn đếm lượt nhấp tại điểm chuyển hướng, cứ khoảng 13 "lượt nhấp" Instagram Android thì có một lượt chưa từng được người nào nhìn thấy. Tỷ lệ nhấp ra cài đặt của kênh đó trông tệ hơn thực tế, và một dashboard chiến dịch dựa trên lượt chuyển hướng thô thổi phồng độ phủ khoảng chừng đó.
Phát hiện 2: TikTok từ chối mở Play Store tùy theo webview nó dùng
Bên trong TikTok trên Android, một phần khách truy cập không bao giờ rời khỏi trang: lệnh chuyển sang cửa hàng được kích hoạt và TikTok hiện hộp thoại riêng ("The action cannot be completed" — "Không thể hoàn tất thao tác"). Không phải link nào cũng bị, và suốt nhiều tuần trông như nó phụ thuộc vào link. Không phải vậy. Nó phụ thuộc vào trình duyệt trong ứng dụng mà TikTok dùng cho khách đó, và user-agent để lộ điều này:
| Định dạng | Dạng 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/… |
Một phiên được tính là thành công khi lệnh chuyển được kích hoạt và trang bị ẩn, và là thất bại khi thẻ dự phòng hiện ra. Tỷ lệ là thành công / (thành công + thất bại), theo thiết bị và ngày:
| Định dạng | 90 ngày đến 2026-10-15 | 30 ngày, 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%) |
Phép so sánh quyết định giữ nguyên link và ngày, vì tỷ lệ các định dạng thay đổi theo từng tuần:
| Link | Định dạng A | Định dạng B |
|---|---|---|
| Link 1 | 560 / 674 (83%) | 32 / 192 (17%) |
| Link 2 | 257 / 285 (90%) | 2 / 47 (4%) |
Cùng link, cùng mã chuyển hướng, cùng ngày: một webview cho cửa hàng mở, webview kia hầu như không. Tên miền riêng không tạo khác biệt nào trong dữ liệu 90 ngày. TikTok không công bố tài liệu về hộp thoại, điều gì kích hoạt nó, hay người dùng nào nhận webview nào, nên cách chia theo user-agent là tất cả những gì có được.
Vì sao điều này quan trọng. Không dạng URL nào sửa được việc này: cách thoát intent:// và một URL https://play.google.com thông thường đều bị từ chối như nhau. Điều bạn làm được là đừng giấu lối thoát: bên trong TikTok, hiện ngay hướng dẫn "mở trong trình duyệt" và nút sao chép, thay vì đợi hết thời gian chờ.
Phát hiện 3: trên iOS, App Store mở đè lên trình duyệt trong ứng dụng
Trên Android, sau khi chuyển sang cửa hàng, trang bị ẩn trong phần lớn các phiên, thường là 1 đến 3 giây sau. Trên iOS bên trong Instagram và Facebook thì thường không, dù lệnh chuyển đã được kích hoạt trong gần như mọi phiên:
| Trình duyệt trong ứng dụng | Lượt tải trang | Đã chuyển | Bị ẩn | …trong vòng 4 s | Còn hiển thị ở 2.2 s |
|---|---|---|---|---|---|
| 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% |
Nếu hai phần ba khách iOS thật sự bị kẹt trước một thẻ dự phòng đang hiển thị với nút "Mở App Store", thì sẽ có khá nhiều người chạm vào nó. Họ không chạm: chỉ 0.9% lượt tải trang Instagram trên iOS và 0.4% lượt tải Facebook trên iOS chạm nút. Cũng không có phiên bản iOS nào mà nó "hoạt động":
| Phiên bản iOS chính | Phiên có chuyển | Trang bị ẩn |
|---|---|---|
| 16 | 127 | 24.4% |
| 17 | 106 | 33.0% |
| 18 | 958 | 33.3% |
| 26 | 3,711 | 39.3% |
| 27 | 1,249 | 34.3% |
Lời giải thích khớp với dữ liệu là bên trong Instagram và Facebook trên iOS, App Store hiện lên đè trên trình duyệt trong ứng dụng mà không đẩy nó xuống nền. Trang vẫn "hiển thị" suốt thời gian đó, nên visibilitychange và pagehide không bao giờ kích hoạt, dù khách đang nhìn App Store.
Vì sao điều này quan trọng. Mọi chỉ số suy ra việc mở cửa hàng từ việc trang rời màn hình đều sai trên iOS. Chúng tôi từng cho khách hàng xem một tỷ lệ "độ phủ cửa hàng" được tính đúng theo cách đó, và nó báo với 10 trên 12 khách hàng trả phí rằng những link vẫn hoạt động là bị hỏng. Chúng tôi đã gỡ nó. Trên iOS, tín hiệu cài đặt đáng tin nằm ở phía cửa hàng: báo cáo chiến dịch của App Store Connect, với provider token (pt) và campaign token (ct) trên URL App Store.
Những điều nhỏ hơn chúng tôi đo được trên đường đi
- Play Store hiện lên chậm trên Android. Trong các phiên Instagram Android đã kích hoạt lệnh chuyển, trang bị ẩn 0–1 s sau lượt truy cập ở 1,061 phiên, 2–3 s sau ở 2,596 phiên, và 4–8 s sau ở 1,273 phiên (7 ngày). Một bộ hẹn giờ "có thành công không?" 2 giây sẽ kích hoạt trước khi cửa hàng xuất hiện ở một phần lớn các lần thành công thật. Phễu của chính chúng tôi đã tính những lần đó là thất bại, cho đến khi chúng tôi cho phép một lượt thoát muộn tới 8 s sau lệnh chuyển vẫn được tính.
- Tỷ lệ thất bại thật là nhỏ. Trong 7,357 phiên Instagram Android tái dựng qua 3 ngày đầu tháng Mười, kiểu "đã chuyển, rồi không có gì" chiếm 1.9% số phiên, và 24.3% số khách đó chạm lại link trong vòng 3 phút. Những khách có phiên hiện thẻ dự phòng chạm lại với tỷ lệ 5.4%, gần như khách có cửa hàng đã mở (4.6%): phần lớn những "thất bại" đó không phải thất bại.
- Bắt người dùng phải chạm làm mất phần lớn lưu lượng. Trước khi trang bắt đầu chuyển ngay khi tải, nó hiện một thẻ với nút cửa hàng. Trong 30 ngày, 10,523 lượt truy cập trong ứng dụng tạo ra 2,119 lượt chạm: khoảng 80% khách không bao giờ đến được cửa hàng.
Phương pháp
- Nguồn. Mỗi lượt truy cập vào một liên kết thông minh và mỗi beacon từ trang chuyển tiếp được ghi vào Cloudflare Workers Analytics Engine cùng nền tảng, trình duyệt trong ứng dụng (từ user-agent), loại sự kiện và dấu thời gian đến từng giây. Khách có user-agent tự khai là bot, crawler hay trình lấy xem trước link được tách riêng và loại khỏi mọi con số ở đây.
- Phiên. Analytics Engine không có id lượt tải trang, nên phiên được tái dựng bằng cách ghép một lượt truy cập với các beacon có cùng link, quốc gia, thành phố, user-agent và trình duyệt trong ứng dụng trong vòng một giờ tiếp theo, cho đến lượt truy cập kế tiếp có cùng khóa. Khoảng 98% beacon được gắn vào một lượt truy cập.
- Tải trước (Phát hiện 1). Tiêu chí lịch sử: không chuyển, không thẻ dự phòng, không chạm, và một lượt thoát 20 s đến 15 phút sau lượt truy cập. Tiêu chí khi chạy từ 2026-10-16: trang báo một lượt tải trước khi bị hủy sau ít nhất 20 s mà chưa từng được hiển thị và bộ hẹn giờ chuyển chưa từng chạy (hoặc trang được tải ở trạng thái ẩn). Beacon mang một token có chữ ký dùng một lần, nên không thể phát lại để xóa một lượt truy cập thật.
- TikTok (Phát hiện 2). Phiên được xác định theo link, mẫu thiết bị, phiên bản ứng dụng TikTok và ngày. Quy tắc định dạng: phiên bản
musical_ly_có dấu chấm → A; nếu không, cóJsSdk→ B; còn lại là C. Khách từ mạng hosting được đếm riêng và không đưa vào bảng. Lần đo lại 30 ngày dùng cùng script với phân tích 90 ngày ban đầu. - Tổng số dùng khoảng lấy mẫu của Analytics Engine (2–4% số dòng đại diện cho hơn một sự kiện). Các bảng theo phiên đếm số dòng.
Giới hạn
- Chúng tôi không bao giờ nhìn thấy cửa hàng. "Bị ẩn" là chỉ báo thay thế cho "cửa hàng đã mở". Nó cũng kích hoạt khi khách chuyển ứng dụng hoặc khóa điện thoại.
- Dấu thời gian chỉ chính xác đến giây, và phiên là kết quả tái dựng. Hai lượt tải nhanh từ cùng một thiết bị có thể bị gộp.
- Mức độ tập trung. Một vài link lớn chi phối một số khoảng thời gian: một chiến dịch Instagram chiếm 72% số lượt tải trước trong 30 ngày, và hai link mang phần lớn các phiên TikTok. Các bảng cùng link tồn tại vì lý do đó.
- Không có gì ở đây được kiểm tra trên điện thoại thật. Các hành vi được suy ra từ những gì trang báo về. Lời giải thích iOS trong Phát hiện 3 là lời giải thích khớp với dữ liệu, không phải điều chúng tôi tận mắt thấy.
- Lưu lượng là của chúng tôi. Đây là khách của những ứng dụng dùng link của chúng tôi, nghiêng mạnh về các chiến dịch Instagram và Facebook ở một số ít quốc gia. Một tổ hợp khác sẽ cho tỷ lệ khác, dù cơ chế hẳn là giống nhau.
- Lượt tải trước không bao giờ chạy JavaScript thì vô hình. 12% lượt tải trang Instagram Android không gửi beacon nào, và một phần trong số đó có lẽ cũng là tải trước.
Nên làm gì
- Bắt đầu chuyển sang cửa hàng ngay khi tải. Một trang chờ người dùng chạm sẽ mất phần lớn khách trong ứng dụng. Giữ nút thủ công làm phương án dự phòng, chỉ hiện ra nếu việc chuyển thất bại rõ ràng.
- Trên Android, dùng `intent://` với `S.browser_fallback_url`. Một URL
https://play.google.combên trong webview mở trang web Play Store, nơi không cài được gì nếu chưa đăng nhập. - Cho cửa hàng chậm thêm thời gian. Chờ ít nhất 3 s trước khi kết luận việc chuyển thất bại, và vẫn tính một lượt thoát muộn.
- Bên trong TikTok, hiện lối thoát ngay lập tức: "··· → Mở trong trình duyệt" và một nút sao chép link. Không thay đổi URL nào làm lời từ chối của TikTok biến mất.
- Đừng tính lượt tải trước của Meta là lượt nhấp. Nếu bạn báo cáo lượt nhấp từ điểm chuyển hướng, hãy dự tính 2–9% lượt truy cập Instagram và Facebook trên Android là những trang không ai thấy.
- Đo lượt cài đặt tại cửa hàng, bằng link chiến dịch App Store Connect (
pt+ct) trên iOS và Play Install Referrer trên Android, chứ không phải bằng sự kiện của trang.
Chúng tôi xây dựng onestore.link, dịch vụ mặc định làm cả sáu điều trên cho mọi link, và dữ liệu ở trên đến từ nhật ký chuyển hướng của nó.
Hỏi và đáp
Bao nhiêu phần trăm lượt nhấp link Instagram trên Android là tải trước?
Trong 30 ngày đến 2026-10-12, 9.1% lượt truy cập Android từ trình duyệt trong ứng dụng (Instagram và Facebook) là những trang ứng dụng tải ngầm rồi bỏ đi khoảng 30 giây sau, không ai thấy. Từ 2026-10-16, kiểm tra khi chạy của chính trang bắt được 7.6% trên Instagram Android và 2.4% trên Facebook Android, ở mức sàn. Trên iOS con số dưới 1%.
Vì sao Play Store không mở được từ trình duyệt trong ứng dụng của TikTok?
Ứng dụng TikTok trên Android dùng nhiều trình duyệt trong ứng dụng. Với một loại (phiên bản musical_ly_ có dấu chấm và không có Version/4.0 trong user-agent), 85% phiên đến được Play Store trong 30 ngày. Với hai loại khác (Version/4.0 kèm JsSdk/BytedanceWebview, hoặc kèm AppName/musical_ly), chỉ 12–14%, trên cùng các link và cùng các ngày. Chính TikTok từ chối việc chuyển, bất kể dạng URL nào.
Một trang web có biết được App Store đã mở trên iOS không?
Không, khi ở bên trong Instagram hay Facebook. App Store mở đè lên trình duyệt trong ứng dụng, nên trang không bao giờ bị ẩn và visibilitychange không kích hoạt. Trong 7 ngày, chỉ 13% (Facebook) đến 56% (Instagram) lượt chuyển trên iOS có trang bị ẩn theo sau, và chưa đến 1% khách chạm nút dự phòng. Báo cáo chiến dịch của App Store Connect mới là tín hiệu đáng tin.
Play Store mất bao lâu để mở từ trình duyệt trong ứng dụng?
Trên Android, trang bị ẩn 2–3 giây sau lệnh chuyển ở phần lớn các phiên thành công, và tới 8 giây trên điện thoại chậm hơn. Một phương án dự phòng hiện sau 2 giây sẽ xuất hiện trước cửa hàng ở nhiều phiên vốn sắp thành công.
Chuyển hướng đến cửa hàng ứng dụng thật sự thất bại thường xuyên đến đâu bên trong Instagram?
Trong 7,357 phiên Instagram Android được tái dựng, kiểu thất bại thật (đã chuyển, rồi không có gì, và khách chạm lại link) chiếm 1.9%. Phần lớn các thất bại thấy được trong dữ liệu phễu thô là sai lệch đo lường: beacon bị mất, cửa hàng chậm, hoặc tải trước.
Tên miền riêng có thay đổi cách TikTok xử lý một link không?
Không. Trong 90 ngày, link có và không có tên miền riêng đều bị từ chối như nhau. Điều quyết định là trình duyệt trong ứng dụng mà TikTok dùng cho khách đó.