Власне дослідження
Що відбувається з посиланням на застосунок, відкритим усередині Instagram і TikTok: 74,000 виміряних редиректів
Попередні завантаження, яких ніхто не бачить, webview TikTok, що не пускає в магазин, і App Store, який відкривається поверх сторінки: що показують наші логи редиректів.
Опубліковано · Adrien De Coster
Коротко
Із 74,713 заходів на Android із вбудованих браузерів за 30 днів 9.1% становили сторінки, які Instagram або Facebook завантажили у фоні й викинули приблизно через 30 секунд, так нікому й не показавши. Усередині TikTok на Android те, чи відкриється Play Store, залежить від того, який webview використовує TikTok: з одним форматом user-agent магазин відкрився в 85% сесій, з двома іншими — у 12–14%, на тих самих посиланнях у ті самі дні. На iOS Instagram і Facebook відкривають App Store поверх вбудованого браузера, тож сторінка не переходить у фон, і частка відкриттів магазину, виміряна зі сторінки, становить 13–56% навіть тоді, коли передача спрацювала.
Ці цифри взято з логів редиректів сервісу розумних посилань: одна URL-адреса, яка відправляє телефон в App Store або Google Play. Щоразу, коли посилання відкривають усередині соцмережі, ми віддаємо невелику сторінку, яка передає відвідувача в магазин, і ця сторінка повідомляє, що сталося далі. Нижче — що кажуть ці повідомлення, як ми їх вимірювали і де вимірювання закінчується.
Дані
| Період | Що | Обсяг |
|---|---|---|
| 30 днів до 2026-10-12 | Заходи на 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 |
| 90 днів до 2026-10-15, потім 30 днів до 2026-10-26 | TikTok на Android, сесії за форматом webview | 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на URL App Store; Android: URLintent://, який відкриває нативний застосунок Play Store).exit: сторінка стає прихованою (Page Visibility API). Це найкращий сигнал, який має вебсторінка, що екран зайняло щось інше — найімовірніше, магазин.stuck: через 2.2 секунди після передачі сторінка все ще видима, тож вона показує запасну картку з кнопкою магазину, підказкою «відкрийте в браузері» та кнопкою копіювання посилання.
Вебсторінка не бачить ні App Store, ні Play Store. Усе, що нижче, виведено з цих трьох сигналів, а в розділі про обмеження сказано, де цей висновок перестає працювати.
Висновок 1: приблизно 1 захід із Meta на Android з 11 — попереднє завантаження, якого ніхто не бачив
За 30 днів до 12 жовтня чітка група сесій на 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% |
Ми перевірили критерій на сесіях, які точно були людськими: йому відповідали 0 з 17,606 сесій, де магазин відкрився через 2–3 с після передачі, і 0 з 244 сесій, де людина натиснула кнопку магазину.
Частка змінюється від тижня до тижня: 6.8% в останній тиждень періоду, потім 8.8%, 10.6% і 10.0% у попередні тижні. Крім того, вона зосереджується там, де йдуть платні кампанії в Instagram: 72% попередніх завантажень за період припали на одне посилання за великою кампанією в Instagram.
Від 16 жовтня сторінка сама розпізнає це під час роботи: вона повідомляє про попереднє завантаження замість виходу, якщо гине не раніше ніж через 20 с, так жодного разу й не показавшись. Ось що вона впіймала відтоді:
| Вбудований браузер | Завантаження сторінки | Попередні завантаження | Частка |
|---|---|---|---|
| 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 залежно від того, який webview використовує
Усередині TikTok на Android частина відвідувачів так і не залишає сторінку: передача спрацьовує, а 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/… |
Сесія вважається успішною, якщо передача спрацювала і сторінка стала прихованою, і невдалою, якщо з'явилася запасна картка. Частка — успіх / (успіх + невдача), за пристроєм і днем:
| Формат | 90 днів до 2026-10-15 | 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%) |
Те саме посилання, той самий код редиректу, той самий день: один webview дає магазину відкритися, інший здебільшого ні. Власні домени в даних за 90 днів нічого не змінювали. TikTok ніде не документує ні цей діалог, ні що його викликає, ні які користувачі отримують який webview, тож поділ за user-agent — це все, що є.
Чому це важливо. Жодна форма URL цього не виправить: і вихід через intent://, і простий URL 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», помітна частина натиснула б її. Цього не відбувається: кнопку натискають при 0.9% завантажень сторінки в Instagram на iOS і при 0.4% завантажень у Facebook на iOS. І немає такої версії iOS, де це «працює»:
| Основна версія iOS | Сесії з передачею | Сторінка стала прихованою |
|---|---|---|
| 16 | 127 | 24.4% |
| 17 | 106 | 33.0% |
| 18 | 958 | 33.3% |
| 26 | 3,711 | 39.3% |
| 27 | 1,249 | 34.3% |
Пояснення, яке підходить: усередині Instagram і Facebook на iOS App Store з'являється поверх вбудованого браузера, не відправляючи його у фон. Сторінка весь час залишається «видимою», тому visibilitychange і pagehide не спрацьовують, хоча відвідувач дивиться на App Store.
Чому це важливо. Будь-яка метрика, яка виводить відкриття магазину з того, що сторінка зникла з екрана, на iOS помиляється. Раніше ми показували клієнтам відсоток «досяжності магазину», побудований саме так, і він повідомляв 10 з 12 клієнтів, що платять, що їхні робочі посилання зламані. Ми його прибрали. На iOS надійний сигнал встановлення є на боці магазину: звіти про кампанії App Store Connect з токеном провайдера (pt) і токеном кампанії (ct) в URL App Store.
Дрібниці, які ми виміряли дорогою
- Play Store на Android відмальовується повільно. У сесіях Instagram на Android, де передача спрацювала, сторінка ставала прихованою через 0–1 с після заходу в 1,061 сесії, через 2–3 с — у 2,596 і через 4–8 с — у 1,273 (7 днів). 2-секундний таймер «чи спрацювало?» спрацьовує раніше, ніж з'являється магазин, для великої частки справжніх успіхів. Наша власна воронка рахувала їх невдачами, доки ми не дозволили зараховувати вихід аж до 8 с після передачі.
- Справжня частка невдач невелика. У 7,357 сесіях Instagram на Android, відновлених за 3 дні на початку жовтня, патерн «передача, а потім нічого» становив 1.9% сесій, і 24.3% цих відвідувачів знову натиснули на посилання протягом 3 хвилин. Відвідувачі, яким з'явилася запасна картка, натискали повторно в 5.4% випадків — приблизно як ті, в кого магазин відкрився (4.6%): більшість цих «невдач» невдачами не були.
- Обов'язкове натискання коштує більшої частини трафіку. До того як сторінка почала запускати передачу під час завантаження, вона показувала картку з кнопкою магазину. За 30 днів 10,523 заходи з вбудованих браузерів дали 2,119 натискань: приблизно 80% відвідувачів так і не потрапили до магазину.
Методика
- Джерело. Кожен захід на розумне посилання і кожен маячок зі сторінки передачі записується в Cloudflare Workers Analytics Engine разом із платформою, вбудованим браузером (за user-agent), типом події та часом із точністю до секунди. Відвідувачі, чий user-agent оголошує себе ботом, краулером або завантажувачем прев'ю посилань, враховуються окремо й виключені з усіх наведених тут цифр.
- Сесії. В Analytics Engine немає ідентифікатора завантаження сторінки, тому сесії відновлюються: захід пов'язується з маячками з тим самим посиланням, країною, містом, user-agent і вбудованим браузером протягом наступної години — до наступного заходу з тим самим ключем. Близько 98% маячків прив'язуються до заходу.
- Попередні завантаження (висновок 1). Історичний критерій: немає передачі, немає запасної картки, немає натискання, а вихід відбувається через 20 с – 15 хв після заходу. Критерій під час роботи з 2026-10-16: сторінка повідомляє про попереднє завантаження, якщо гине не раніше ніж через 20 с, жодного разу не показавшись, і її таймер передачі так і не запустився (або вона завантажилася прихованою). Маячок несе одноразовий підписаний токен, тож його не можна повторити, щоб стерти справжній візит.
- TikTok (висновок 2). Сесії з ключем за посиланням, моделлю пристрою, версією застосунку TikTok і днем. Правило формату: версія
musical_ly_з крапками → A; інакшеJsSdk→ B; інакше C. Відвідувачі з хостингових мереж рахуються окремо й до таблиці не входять. Повторний замір за 30 днів використовує той самий скрипт, що й початковий аналіз за 90 днів. - Підсумки враховують інтервал вибірки Analytics Engine (2–4% рядків відповідають більш ніж одній події). Таблиці сесій рахують рядки.
Обмеження
- Ми ніколи не бачимо магазин. «Стала прихованою» — непряма ознака того, що «магазин відкрився». Вона спрацьовує й тоді, коли відвідувач перемикається на інший застосунок або блокує телефон.
- Час записано з точністю до секунди, а сесії — це реконструкції. Два швидкі завантаження з одного пристрою можуть злитися.
- Концентрація. У деяких періодах домінують кілька великих посилань: на одну кампанію в Instagram припадає 72% попередніх завантажень за 30 днів, а два посилання несуть більшість сесій TikTok. Саме тому є таблиці з тим самим посиланням.
- Нічого з цього не перевірялося на фізичному телефоні. Поведінку виведено з того, що повідомляють сторінки. Пояснення для iOS у висновку 3 — те, що пасує до даних, а не те, що ми бачили на власні очі.
- Трафік — наш. Це відвідувачі застосунків, які використовують наші посилання, із сильним перекосом у бік кампаній в Instagram і Facebook у кількох країнах. Інший склад дасть інші відсотки, хоча механізми мають бути ті самі.
- Попередні завантаження, які не виконують JavaScript, невидимі. 12% завантажень сторінки в Instagram на Android не надсилають жодного маячка, і частина з них, імовірно, теж попередні завантаження.
Що з цим робити
- Запускайте передачу під час завантаження. Сторінка, яка чекає на натискання, втрачає більшість відвідувачів із вбудованих браузерів. Залиште ручну кнопку як запасний варіант і показуйте її, лише якщо передача явно не вдалася.
- На Android використовуйте `intent://` з `S.browser_fallback_url`. URL
https://play.google.comусередині webview відкриває сайт Play Store, який без входу в акаунт нічого встановити не може. - Дайте повільному магазину час. Чекайте щонайменше 3 с, перш ніж вирішити, що передача не вдалася, і все одно зараховуйте пізній вихід.
- Усередині TikTok одразу показуйте вихід: «··· → Відкрити в браузері» та кнопку копіювання посилання. Жодна зміна URL не прибирає відмову TikTok.
- Не рахуйте попередні завантаження Meta кліками. Якщо ви рахуєте кліки з редиректу, очікуйте, що 2–9% заходів з Instagram і Facebook на Android — сторінки, яких ніхто не бачив.
- Вимірюйте встановлення в магазині, а не подіями сторінки: посиланнями кампаній App Store Connect (
pt+ct) на iOS і Play Install Referrer на Android.
Ми створюємо onestore.link, який за замовчуванням виконує всі шість пунктів для кожного посилання, і дані вище взято з його логів редиректів.
Запитання та відповіді
Який відсоток кліків за посиланнями в Instagram на Android — попередні завантаження?
За 30 днів до 2026-10-12 9.1% заходів на Android із вбудованих браузерів (Instagram і Facebook) були сторінками, які застосунок завантажив у фоні й викинув приблизно через 30 секунд, так їх і не показавши. Від 2026-10-16 власна перевірка сторінки під час роботи ловить 7.6% в Instagram на Android і 2.4% у Facebook на Android — як нижню межу. На iOS це менше 1%.
Чому Play Store не відкривається з вбудованого браузера TikTok?
Застосунок TikTok на Android використовує кілька вбудованих браузерів. В одному (версія musical_ly_ з крапками і без Version/4.0 в user-agent) 85% сесій за 30 днів дійшли до Play Store. У двох інших (Version/4.0 з JsSdk/BytedanceWebview або з AppName/musical_ly) — лише 12–14%, на тих самих посиланнях у ті самі дні. TikTok сам відхиляє передачу, хоч би якою була форма URL.
Чи можна з вебсторінки зрозуміти, що на iOS відкрився App Store?
Не всередині Instagram чи Facebook. App Store відкривається поверх вбудованого браузера, тому сторінка ніколи не стає прихованою і visibilitychange не спрацьовує. За 7 днів лише за 13% (Facebook) – 56% (Instagram) передач на iOS сторінка ставала прихованою, а запасну кнопку натиснули менше ніж 1% відвідувачів. Надійний сигнал — звіти про кампанії App Store Connect.
Скільки часу потрібно Play Store, щоб відкритися з вбудованого браузера?
На Android у більшості успішних сесій сторінка стає прихованою через 2–3 секунди після передачі, а на повільних телефонах — аж до 8 секунд. Запасний варіант, показаний через 2 секунди, у багатьох сесіях, які от-от завершилися б успіхом, з'являється раніше за магазин.
Як часто редирект у магазин застосунків справді не спрацьовує всередині Instagram?
У 7,357 відновлених сесіях Instagram на Android патерн справжньої невдачі (передача спрацювала, потім нічого, і відвідувач знову натискає на посилання) становив 1.9%. Більшість видимих невдач у сирих даних воронки — артефакти вимірювання: загублені маячки, повільний магазин або попередні завантаження.
Чи змінює власний домен те, як TikTok поводиться з посиланням?
Ні. За 90 днів посилання з власним доменом і без нього відхилялися однаково. Вирішує вбудований браузер, який TikTok використовує для цього відвідувача.