자체 연구
Instagram과 TikTok 안에서 연 앱 링크는 어떻게 될까: 리디렉션 74,000건 측정
아무도 보지 않는 프리로드, 스토어를 거부하는 TikTok 웹뷰, 페이지 위로 열리는 App Store: 리디렉션 로그가 보여 주는 것.
게시 · Adrien De Coster
짧은 답변
30일 동안 인앱 브라우저에서 들어온 Android 유입 74,713건 중 9.1%는 Instagram이나 Facebook이 백그라운드에서 불러왔다가 약 30초 뒤 아무도 보지 않은 채 버린 페이지였습니다. Android의 TikTok 안에서 Play Store가 열리는지는 TikTok이 어떤 웹뷰를 쓰느냐에 달려 있습니다. 같은 링크, 같은 날에 한 User-Agent 형식은 세션의 85%에서 스토어에 도달했고, 다른 두 형식은 12–14%에 그쳤습니다. iOS에서는 Instagram과 Facebook이 App Store를 인앱 브라우저 위로 열기 때문에 페이지가 백그라운드로 가지 않으며, 페이지에서 측정한 스토어 열림 비율은 핸드오프가 성공했을 때도 13–56%로 나옵니다.
이 수치는 스마트 링크 서비스의 리디렉션 로그에서 나왔습니다. URL 하나로 휴대폰을 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: App Store URL로location.replace, Android: 네이티브 Play Store 앱을 여는intent://URL).exit: 페이지가 숨겨집니다(Page Visibility API). 무언가가, 대개는 스토어가 화면을 차지했다는 것을 웹 페이지가 알 수 있는 가장 좋은 신호입니다.stuck: 핸드오프 후 2.2초가 지나도 페이지가 보이는 상태라서, 스토어 버튼, “브라우저에서 열기” 안내, 링크 복사 버튼이 있는 대체 카드를 보여 줍니다.
웹 페이지는 App Store도 Play Store도 볼 수 없습니다. 아래 내용은 모두 이 세 신호로부터 추론한 것이며, 그 추론이 어디서 무너지는지는 한계 섹션에서 다룹니다.
발견 1: Android Meta 유입 11건 중 약 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 구분뿐입니다.
왜 중요한가. 어떤 URL 형태로도 해결되지 않습니다. intent:// 탈출과 일반 https://play.google.com URL 모두 같은 거부를 당합니다. 할 수 있는 일은 출구를 숨기지 않는 것입니다. 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 URL에 제공자 토큰(pt)과 캠페인 토큰(ct)을 붙인 App Store Connect 캠페인 보고서입니다.
측정 과정에서 확인한 작은 사실들
- Android에서는 Play Store가 늦게 그려집니다. 핸드오프가 실행된 Instagram Android 세션에서 페이지가 숨겨진 시점은 유입 후 0–1초가 1,061세션, 2–3초가 2,596세션, 4–8초가 1,273세션이었습니다(7일). 2초짜리 “성공했나?” 타이머는 실제 성공 중 상당수에서 스토어가 나타나기 전에 발동합니다. 저희 퍼널도 핸드오프 후 최대 8초까지의 exit를 성공으로 인정하기 전까지는 이를 실패로 셌습니다.
- 실제 실패율은 낮습니다. October 초에 3일 동안 재구성한 Instagram Android 세션 7,357건에서 “핸드오프 후 아무 일도 없음” 패턴은 세션의 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.comURL은 Play Store 웹사이트를 여는데, 로그인 없이는 아무것도 설치할 수 없습니다. - 느린 스토어에 시간을 주세요. 핸드오프가 실패했다고 판단하기 전에 최소 3초를 기다리고, 늦은 exit도 성공으로 세세요.
- TikTok 안에서는 출구를 바로 보여 주세요: “··· → 브라우저에서 열기”와 링크 복사 버튼. 어떤 URL 변경으로도 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%만 도달했습니다. URL 형태와 상관없이 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 안에서 앱 스토어 리디렉션이 실제로 실패하는 경우는 얼마나 되나요?
재구성한 Instagram Android 세션 7,357건에서 실제 실패 패턴(핸드오프 실행 후 아무 일도 없고 방문자가 링크를 다시 탭함)은 1.9%였습니다. 원본 퍼널 데이터에서 보이는 실패 대부분은 측정상의 착시입니다. 유실된 비콘, 느린 스토어, 또는 프리로드입니다.
맞춤 도메인을 쓰면 TikTok이 링크를 다르게 취급하나요?
아니요. 90일 동안 맞춤 도메인이 있는 링크와 없는 링크 모두 똑같이 거부되었습니다. 이를 결정하는 것은 TikTok이 그 방문자에게 쓰는 인앱 브라우저입니다.