Ricerca originale
Cosa succede a un link di un’app aperto dentro Instagram e TikTok: 74,000 reindirizzamenti misurati
Precaricamenti che nessuno vede, una webview di TikTok che rifiuta lo store e un App Store che si apre sopra la pagina: cosa mostrano i nostri log di reindirizzamento.
Pubblicato il · Adrien De Coster
Risposta breve
Su 74,713 arrivi Android da browser in-app in 30 giorni, il 9.1% erano pagine che Instagram o Facebook avevano caricato in background e scartato circa 30 secondi dopo senza che nessuno le vedesse. Dentro TikTok su Android, l’apertura del Play Store dipende dalla webview usata da TikTok: un formato di user-agent ha raggiunto lo store nell’85% delle sessioni, altri due nel 12–14%, sugli stessi link negli stessi giorni. Su iOS, Instagram e Facebook aprono l’App Store sopra il browser in-app, quindi la pagina non va mai in background, e un tasso di apertura dello store misurato dalla pagina segna 13–56% anche quando il passaggio allo store ha funzionato.
Questi numeri vengono dai log di reindirizzamento di un servizio di smart link: un unico URL che manda un telefono sull’App Store o su Google Play. Ogni volta che un link viene aperto dentro un’app social, serviamo una piccola pagina che passa il visitatore allo store, e quella pagina riporta cosa è successo dopo. Ecco cosa dicono quei resoconti, come li abbiamo misurati e dove si ferma la misura.
I dati
| Periodo | Cosa | Volume |
|---|---|---|
| 30 giorni fino al 2026-10-12 | Arrivi Android da browser in-app, ricostruzione a livello di sessione | 74,713 |
| 2026-09-27 → 2026-10-26 | Caricamenti di pagina in-app, tutte le piattaforme | 109,253 |
| 2026-10-20 → 2026-10-26 | Gli stessi, ricostruiti in sessioni per le tabelle del funnel | 30,535 |
| 2026-10-16 → 2026-10-26 | Precaricamenti classificati dalla pagina stessa | 1,679 |
| 90 giorni fino al 2026-10-15, poi 30 giorni fino al 2026-10-26 | TikTok su Android, sessioni per formato di webview | 73 + 1,247 |
| Browser in-app | Android | iOS |
|---|---|---|
| 50,161 | 16,675 | |
| 27,911 | 9,441 | |
| TikTok | 3,755 | 1,219 |
| Browser normale (semplice 302, per confronto) | 24,185 | 24,627 |
Due cose saltano all’occhio prima di qualsiasi analisi. Le app di Meta mandano molto più traffico di TikTok. E su Android oltre tre quarti di tutti gli arrivi passano da un browser in-app, non da Chrome.
Come la pagina riporta cosa è successo
Quando un link viene aperto in un browser in-app, la pagina fa tre cose e invia un beacon per ciascuna:
auto: avvia il passaggio allo store al caricamento (iOS:location.replaceverso l’URL dell’App Store; Android: un URLintent://che apre l’app nativa del Play Store).exit: la pagina diventa nascosta (Page Visibility API). È il segnale migliore che una pagina web abbia del fatto che qualcosa, molto probabilmente lo store, ha preso lo schermo.stuck: la pagina è ancora visibile 2.2 secondi dopo il passaggio allo store, quindi mostra una scheda di riserva con un pulsante per lo store, l’indicazione «apri nel tuo browser» e un pulsante per copiare il link.
Una pagina web non può vedere l’App Store né il Play Store. Tutto quello che segue è dedotto da questi tre segnali, e la sezione sui limiti dice dove questa deduzione non regge più.
Risultato 1: circa 1 arrivo Meta su Android su 11 è un precaricamento che nessuno ha visto
Nei 30 giorni fino al 12 ottobre, un gruppo netto di sessioni Android si è comportato come nessuna visita umana potrebbe: la pagina si è caricata, il timer del passaggio allo store non è mai partito e la pagina è stata distrutta da 29 a 31 secondi dopo. Nessun auto, nessuno stuck, nessun tocco. Su iOS niente di simile.
È la firma del browser in-app di Instagram e Facebook che precarica un link presente in un feed, lo tiene nascosto e lo butta via quando l’utente continua a scorrere. La pagina ha eseguito il nostro JavaScript, quindi l’arrivo è stato registrato. Nessuno l’ha mai guardata.
| Popolazione | Arrivi | Precaricamenti | Quota |
|---|---|---|---|
| Tutti gli arrivi, tutte le piattaforme | 139,199 | 6,790 | 4.9% |
| Android | 95,648 | 6,790 | 7.1% |
| Android in-app | 74,713 | 6,790 | 9.1% |
| Android in-app, escluso il link più grande | — | — | 4.9% |
| Il link più colpito | 35,337 | 4,864 | 13.8% |
Abbiamo verificato il criterio su sessioni chiaramente umane: 0 su 17,606 sessioni in cui lo store si è aperto 2–3 s dopo il passaggio vi corrispondevano, e 0 su 244 sessioni in cui qualcuno ha toccato il pulsante dello store.
La quota cambia di settimana in settimana: 6.8% nell’ultima settimana di quel periodo, poi 8.8%, 10.6% e 10.0% nelle settimane precedenti. Si concentra inoltre dove girano campagne Instagram a pagamento: il 72% dei precaricamenti del periodo veniva da un solo link dietro una grande campagna Instagram.
Dal 16 ottobre la pagina lo classifica da sola a runtime: segnala un precaricamento invece di un’uscita quando muore dopo almeno 20 s senza essere mai stata mostrata. Ecco cosa ha rilevato da allora:
| Browser in-app | Caricamenti di pagina | Precaricamenti | Quota |
|---|---|---|---|
| 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% |
Quel conteggio a runtime è un minimo. Un precaricamento che muore senza eseguire alcuno script non lascia beacon, e la regola a runtime è più severa della ricostruzione storica.
Perché conta. Se conti i clic al tuo reindirizzamento, circa un «clic» Instagram Android su 13 non è mai stato visto da una persona. Il tuo rapporto clic/installazioni per quel canale sembra peggiore di quanto sia, e una dashboard di campagna costruita sugli hit grezzi del reindirizzamento sovrastima la copertura più o meno di altrettanto.
Risultato 2: TikTok rifiuta il Play Store a seconda della webview che usa
Dentro TikTok su Android, una parte dei visitatori non lascia mai la pagina: il passaggio allo store parte e TikTok mostra una propria finestra di dialogo («The action cannot be completed»). Non succede su tutti i link, e per settimane è sembrato che dipendesse dal link. Non è così. Dipende dal browser in-app che TikTok usa per quel visitatore, e il suo user-agent lo rivela:
| Formato | Forma dello 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/… |
Una sessione conta come riuscita quando il passaggio è partito e la pagina è diventata nascosta, e come fallita quando è comparsa la scheda di riserva. Il tasso è riuscite / (riuscite + fallite), per dispositivo e giorno:
| Formato | 90 giorni fino al 2026-10-15 | 30 giorni, 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%) |
Il confronto decisivo tiene costanti link e giorno, perché il mix dei formati cambia di settimana in settimana:
| Link | Formato A | Formato B |
|---|---|---|
| Link 1 | 560 / 674 (83%) | 32 / 192 (17%) |
| Link 2 | 257 / 285 (90%) | 2 / 47 (4%) |
Stesso link, stesso codice di reindirizzamento, stesso giorno: una webview lascia aprire lo store, l’altra quasi mai. I domini personalizzati non hanno fatto alcuna differenza nei dati a 90 giorni. TikTok non documenta né la finestra di dialogo, né cosa la provoca, né quali utenti ricevono quale webview: la suddivisione per user-agent è tutto ciò che c’è.
Perché conta. Nessuna forma di URL risolve il problema: l’uscita con intent:// e un semplice URL https://play.google.com ricevono lo stesso rifiuto. Quello che puoi fare è non nascondere la via d’uscita: dentro TikTok mostra subito le istruzioni «apri nel browser» e un pulsante per copiare, invece che dopo un timeout.
Risultato 3: su iOS l’App Store si apre sopra il browser in-app
Su Android, dopo il passaggio allo store, la pagina diventa nascosta nella maggior parte delle sessioni, di solito da 1 a 3 secondi dopo. Su iOS dentro Instagram e Facebook spesso no, anche se il passaggio è partito in quasi tutte le sessioni:
| Browser in-app | Caricamenti di pagina | Passaggio avviato | Diventata nascosta | …entro 4 s | Visibile a 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% |
Se due terzi dei visitatori iOS fossero davvero bloccati davanti a una scheda di riserva visibile con un pulsante «Apri l’App Store», molti lo toccherebbero. Non lo fanno: solo lo 0.9% dei caricamenti di pagina Instagram su iOS e lo 0.4% di quelli Facebook su iOS tocca il pulsante. E non esiste una versione di iOS in cui «funzioni»:
| Versione principale di iOS | Sessioni con passaggio | Pagina diventata nascosta |
|---|---|---|
| 16 | 127 | 24.4% |
| 17 | 106 | 33.0% |
| 18 | 958 | 33.3% |
| 26 | 3,711 | 39.3% |
| 27 | 1,249 | 34.3% |
La spiegazione che torna è che dentro Instagram e Facebook su iOS l’App Store compare sopra il browser in-app senza mandarlo in background. La pagina resta «visibile» per tutto il tempo, quindi visibilitychange e pagehide non scattano mai, anche se il visitatore sta guardando l’App Store.
Perché conta. Qualsiasi metrica che deduce l’apertura dello store dal fatto che la pagina esce dallo schermo è sbagliata su iOS. Mostravamo ai clienti una percentuale di «copertura store» costruita esattamente così, e diceva a 10 clienti paganti su 12 che link funzionanti erano rotti. L’abbiamo tolta. Su iOS il segnale di installazione affidabile sta dal lato dello store: i report delle campagne di App Store Connect, con un provider token (pt) e un campaign token (ct) sull’URL dell’App Store.
Cose più piccole che abbiamo misurato lungo la strada
- Su Android il Play Store è lento a comparire. Nelle sessioni Instagram Android in cui il passaggio è partito, la pagina è diventata nascosta 0–1 s dopo l’arrivo in 1,061 sessioni, 2–3 s dopo in 2,596 e 4–8 s dopo in 1,273 (7 giorni). Un timer «ha funzionato?» da 2 secondi scatta prima che lo store compaia per una buona parte dei veri successi. Il nostro stesso funnel li contava come fallimenti finché non abbiamo lasciato contare comunque un’uscita fino a 8 s dopo il passaggio.
- Il vero tasso di fallimento è basso. Su 7,357 sessioni Instagram Android ricostruite in 3 giorni a inizio ottobre, lo schema «passaggio, poi niente» era l’1.9% delle sessioni, e il 24.3% di quei visitatori ha toccato di nuovo il link entro 3 minuti. I visitatori la cui sessione ha mostrato la scheda di riserva l’hanno ritoccato nel 5.4% dei casi, più o meno come quelli a cui si è aperto lo store (4.6%): la maggior parte di quei «fallimenti» non lo era.
- Chiedere un tocco costa la maggior parte del traffico. Prima che la pagina avviasse il passaggio al caricamento, mostrava una scheda con un pulsante per lo store. In 30 giorni, 10,523 arrivi in-app hanno prodotto 2,119 tocchi: circa l’80% dei visitatori non è mai arrivato allo store.
Metodo
- Fonte. Ogni arrivo su uno smart link e ogni beacon della pagina di passaggio vengono scritti in Cloudflare Workers Analytics Engine con la piattaforma, il browser in-app (dallo user-agent), il tipo di evento e un timestamp al secondo. I visitatori il cui user-agent si dichiara bot, crawler o servizio di anteprima dei link sono tenuti a parte ed esclusi da tutti i numeri qui.
- Sessioni. Analytics Engine non ha un id per caricamento di pagina, quindi le sessioni sono ricostruite unendo un arrivo ai beacon che condividono link, paese, città, user-agent e browser in-app nell’ora successiva, fino al successivo arrivo con la stessa chiave. Circa il 98% dei beacon si aggancia a un arrivo.
- Precaricamenti (risultato 1). Criterio storico: nessun passaggio, nessuna scheda di riserva, nessun tocco e un’uscita da 20 s a 15 min dopo l’arrivo. Criterio a runtime dal 2026-10-16: la pagina segnala un precaricamento quando muore dopo almeno 20 s senza essere mai stata mostrata e il suo timer di passaggio non è mai partito (oppure si è caricata nascosta). Il beacon porta un token firmato monouso, quindi non può essere riprodotto per cancellare una visita reale.
- TikTok (risultato 2). Sessioni raggruppate per link, modello di dispositivo, versione dell’app TikTok e giorno. Regola dei formati: versione
musical_ly_con punti → A; altrimentiJsSdk→ B; altrimenti C. I visitatori da reti di hosting sono contati a parte e lasciati fuori dalla tabella. La nuova misura a 30 giorni usa lo stesso script dell’analisi originale a 90 giorni. - I totali usano l’intervallo di campionamento di Analytics Engine (il 2–4% delle righe rappresenta più di un evento). Le tabelle delle sessioni contano righe.
Limiti
- Non vediamo mai lo store. «Diventata nascosta» è un indicatore indiretto di «lo store si è aperto». Scatta anche quando il visitatore cambia app o blocca il telefono.
- I timestamp sono al secondo, e le sessioni sono ricostruzioni. Due caricamenti ravvicinati dallo stesso dispositivo possono fondersi.
- Concentrazione. Pochi link grandi dominano alcuni periodi: una campagna Instagram vale il 72% dei precaricamenti a 30 giorni, e due link portano la maggior parte delle sessioni TikTok. Le tabelle a link costante esistono per questo.
- Niente qui è stato verificato su un telefono fisico. I comportamenti sono dedotti da ciò che riportano le pagine. La spiegazione iOS del risultato 3 è quella che torna con i dati, non qualcosa che abbiamo visto accadere.
- Il traffico è il nostro. Sono i visitatori delle app che usano i nostri link, fortemente sbilanciati verso campagne Instagram e Facebook in una manciata di paesi. Un altro mix darà altre percentuali, anche se i meccanismi dovrebbero essere gli stessi.
- I precaricamenti che non eseguono mai JavaScript sono invisibili. Il 12% dei caricamenti di pagina Instagram su Android non invia alcun beacon, e probabilmente anche alcuni di questi sono precaricamenti.
Cosa fare
- Avvia il passaggio allo store al caricamento. Una pagina che aspetta un tocco perde la maggior parte dei visitatori in-app. Tieni il pulsante manuale come riserva, mostrato solo se il passaggio è fallito in modo visibile.
- Su Android usa `intent://` con `S.browser_fallback_url`. Un URL
https://play.google.comdentro una webview apre il sito web del Play Store, che non può installare niente senza accesso. - Dai tempo a uno store lento. Aspetta almeno 3 s prima di decidere che il passaggio è fallito, e conta comunque un’uscita tardiva.
- Dentro TikTok, mostra subito la via d’uscita: «··· → Apri nel browser» e un pulsante per copiare il link. Nessuna modifica all’URL fa sparire il rifiuto di TikTok.
- Non contare i precaricamenti Meta come clic. Se conti i clic da un reindirizzamento, aspettati che il 2–9% degli arrivi Instagram e Facebook su Android siano pagine che nessuno ha visto.
- Misura le installazioni sullo store, con i link di campagna di App Store Connect (
pt+ct) su iOS e il Play Install Referrer su Android, non con gli eventi di pagina.
Sviluppiamo onestore.link, che fa tutte e sei le cose di default per ogni link, e i dati qui sopra vengono dai suoi log di reindirizzamento.
Domande e risposte
Che percentuale dei clic sui link di Instagram su Android sono precaricamenti?
Nei 30 giorni fino al 2026-10-12, il 9.1% degli arrivi Android da browser in-app (Instagram e Facebook) erano pagine che l’app aveva caricato in background e scartato circa 30 secondi dopo, senza che fossero viste. Dal 2026-10-16 il controllo a runtime della pagina stessa ne rileva il 7.6% su Instagram Android e il 2.4% su Facebook Android, come minimo. Su iOS è meno dell’1%.
Perché il Play Store non si apre dal browser in-app di TikTok?
L’app Android di TikTok usa diversi browser in-app. In uno (una versione musical_ly_ con punti e nessun Version/4.0 nello user-agent), l’85% delle sessioni ha raggiunto il Play Store in 30 giorni. In altri due (Version/4.0 con JsSdk/BytedanceWebview, oppure con AppName/musical_ly), solo il 12–14%, sugli stessi link e negli stessi giorni. È TikTok stesso a rifiutare il passaggio, qualunque sia la forma dell’URL.
Una pagina web può capire che su iOS si è aperto l’App Store?
Non dentro Instagram o Facebook. L’App Store si apre sopra il browser in-app, quindi la pagina non diventa mai nascosta e visibilitychange non scatta. In 7 giorni, solo dal 13% (Facebook) al 56% (Instagram) dei passaggi su iOS sono stati seguiti dalla pagina che diventa nascosta, e meno dell’1% dei visitatori ha toccato il pulsante di riserva. I report delle campagne di App Store Connect sono il segnale affidabile.
Quanto ci mette il Play Store ad aprirsi da un browser in-app?
Su Android la pagina diventa nascosta 2–3 secondi dopo il passaggio nella maggior parte delle sessioni riuscite, e fino a 8 secondi dopo sui telefoni più lenti. Una soluzione di riserva mostrata dopo 2 secondi compare prima dello store in molte sessioni che stavano per riuscire.
Quanto spesso fallisce davvero un reindirizzamento allo store dentro Instagram?
Su 7,357 sessioni Instagram Android ricostruite, lo schema di un vero fallimento (passaggio avviato, poi niente, e il visitatore tocca di nuovo il link) era l’1.9%. La maggior parte dei fallimenti apparenti nei dati grezzi del funnel sono artefatti di misura: beacon persi, uno store lento o precaricamenti.
Un dominio personalizzato cambia il modo in cui TikTok tratta un link?
No. In 90 giorni, i link con e senza dominio personalizzato sono stati rifiutati nello stesso modo. A decidere è il browser in-app che TikTok usa per quel visitatore.