Deep linking dla deweloperów: routing i attribution w jednym kontrakcie
Zepsute deep linki rzadko wyglądają jak bugi, bo ujawniają się jako słabe kampanie, generyczny onboarding i in-app events bez źródła, dlatego deweloperzy i zespół UA powinni uzgodnić routing, parametry i testy, zanim jakikolwiek link trafi do kampanii.

W tym artykule
- Obsługa deep linków to kontrakt między inżynierią a UA
- Deferred deep linking zależy od tego, co przetrwa instalację
- Universal Links i App Links psują się po cichu, gdy konfiguracja się rozjeżdża
- Każdy link potrzebuje schematu parametrów, zanim trafi do kampanii
- Testy muszą pokrywać ścieżki, którymi faktycznie przychodzą użytkownicy
- Pomiar nie naprawi tego, czego deep link nie jest w stanie przenieść
- Warstwa linków należy do stacku pomiarowego
Użytkownik klika reklamę konkretnego produktu, instaluje aplikację i ląduje na ogólnym ekranie głównym. Kampania raportuje install. Analityka produktowa pokazuje sesję bez kontekstu. Nikt nie wie, czy zawiódł link, czy aplikacja go zignorowała, czy dopasowanie po instalacji w ogóle nie nastąpiło. Problemy z deep linkami rzadko wyglądają jak bugi. Wyglądają jak kampanie, które działają słabiej z powodów, których nikt nie potrafi wskazać. Przyczyna zwykle leży gdzieś między domeną linku, cyklem życia aplikacji a SDK pomiarowym.
Obsługa deep linków to kontrakt między inżynierią a UA
Deweloperzy zwykle traktują deep linking jak nawigację. Otwórz URL, sparsuj ścieżkę, pokaż właściwy ekran. To połowa pracy. Zespół UA i analityka potrzebują, żeby aplikacja zapisała też, który link przyprowadził użytkownika, i dołączyła ten kontekst do sesji oraz do kolejnych in-app events.
Gdy link otwiera aplikację, powinny zajść trzy rzeczy. Aplikacja rozwiązuje trasę. Aplikacja przechwytuje kontekst linku. Event z tym kontekstem trafia do warstwy pomiaru. Jeśli któryś krok nie ma właściciela, dane degradują się po cichu. Routing działa na QA, więc luka pozostaje niezauważona, dopóki ktoś nie zapyta, dlaczego kampania retargetingowa ma kliknięcia, ale nie ma przypisanych zakupów.
Zanim powstanie kod handlera, inżynieria, UA i analityka powinny ustalić:
- Kto jest właścicielem domen linków i hostowanych na nich plików asocjacji.
- W którym miejscu cyklu życia aplikacja obsługuje linki: cold start, warm start i powrót z tła.
- Który in-app event odpala się po rozwiązaniu deep linku i jakie parametry niesie.
- Co aplikacja robi z nieznaną lub błędną trasą.
- Czy ekran logowania albo onboarding przerywa routing i jak aplikacja potem odsyła użytkownika do docelowego miejsca.
Deferred deep linking zależy od tego, co przetrwa instalację
Bezpośredni deep link to prosty przypadek. Aplikacja jest zainstalowana, system przekazuje URL, aplikacja routuje. Deferred deep link jest trudniejszy. Aplikacji nie ma, użytkownik przechodzi przez sklep, a kontekst linku trzeba odzyskać przy pierwszym uruchomieniu.
Sklep nie przekazuje oryginalnego URL-a do aplikacji. Na Androidzie Play Install Referrer daje aplikacji string referrera ustawiony na linku do sklepu. To deterministyczny kanał dla kontekstu, o ile konfiguracja linku go wypełnia. Na iOS nie ma odpowiednika. Odzyskanie kontekstu zależy od tego, czy dostawca pomiaru dopasuje pierwsze uruchomienie do kliknięcia. To dopasowanie ograniczają reguły prywatności platformy i status zgody użytkownika. Część pierwszych uruchomień nie dostanie dopasowania. Traktuj to jako założenie projektowe, a nie edge case.
Ma to bezpośrednie skutki dla ścieżki pierwszego uruchomienia. Aplikacja powinna wcześnie zapytać o dane deferred linku, poczekać na nie z timeoutem i iść dalej niezależnie od wyniku. Blokowanie onboardingu do czasu odpowiedzi szkodzi wszystkim użytkownikom. Ignorowanie spóźnionej odpowiedzi marnuje dopasowanie. Częsty wzorzec: od razu startuj onboarding, a deferred route zastosuj w naturalnym punkcie przejścia, na przykład po założeniu konta.
Przykład hipotetyczny: aplikacja z e-bookami promuje w kampanii konkretną serię kryminałów. Użytkownicy, którzy już mają aplikację, trafiają prosto na serię. Nowi użytkownicy iOS, u których nie udało się odzyskać dopasowania, widzą domyślny onboarding. Jeśli ekran fallbacku jest generyczny, nic nie łączy dla nich reklamy z aplikacją. Jeśli fallback to dobrany zestaw popularnych kryminałów, luka boli mniej. Fallback to decyzja produktowa i trzeba ją podjąć świadomie.
Universal Links i App Links psują się po cichu, gdy konfiguracja się rozjeżdża
Obie platformy weryfikują, czy aplikacja może otwierać linki z danej domeny. Na iOS oznacza to plik apple-app-site-association na domenie i entitlement Associated Domains w aplikacji. Na Androidzie to plik assetlinks.json z nazwą pakietu i fingerprintem certyfikatu podpisu oraz intent filtry z włączoną autoweryfikacją.
Taka konfiguracja działa na starcie, a potem się rozjeżdża. Przyczyny są zwykle prozaiczne:
- Klucz podpisu wersji produkcyjnej różni się od klucza uploadu, a assetlinks.json zawiera niewłaściwy fingerprint.
- Zmiana CDN lub hostingu dodaje przekierowanie albo zmienia nagłówki odpowiedzi dla pliku asocjacji.
- Marketing przenosi kampanie na nową domenę linków, z którą aplikacja nigdy nie była powiązana.
- System cache'uje dane asocjacji, więc poprawka nie działa od razu na istniejących instalacjach.
- Nowy wariant aplikacji lub nowy bundle identifier trafia do sklepu bez dopisania do plików asocjacji.
Gdy weryfikacja zawodzi, nic się nie crashuje. Link otwiera stronę www zamiast aplikacji. Strona może nadal zarejestrować kliknięcie, więc liczba kliknięć wygląda normalnie, a otwarć aplikacji ubywa. Przeglądarki wbudowane w aplikacje społecznościowe i komunikatory dokładają kolejną warstwę, bo nie zawsze przekazują link do systemu tak jak przeglądarka domyślna. Jedyny pewny sposób, żeby to wyłapać, to sprawdzać konfigurację asocjacji po każdym releasie i po każdej zmianie infrastruktury na domenie linków.
Każdy link potrzebuje schematu parametrów, zanim trafi do kampanii
Deep link niesie dwa rodzaje informacji: dokąd wysłać użytkownika i skąd przyszedł. Mieszanie ich w doraźnym query stringu kończy się tym, że routing psuje się po zmianie nazwy kampanii albo pola attribution wyciekają do logiki ekranów.
Spisz schemat i udostępnij go wszystkim zespołom. Niech będzie krótki:
- Pola routingu: docelowa trasa i identyfikator treści. Należą do inżynierii, a aplikacja je waliduje.
- Pola kampanii: identyfikatory kampanii, kanału, grupy reklam i kreacji. Należą do UA, a aplikacja przekazuje je dalej bez interpretacji.
- Wersja schematu, żeby aplikacja obsłużyła stare linki, które wciąż żyją w mailach, kodach QR i placementach partnerów.
- Udokumentowana trasa fallbackowa dla każdego celu, który może zniknąć, na przykład wygasłej promocji lub usuniętej treści.
Przykład hipotetyczny: aplikacja do nauki języków uruchamia kampanię kierującą do konkretnego kursu. Literówka w identyfikatorze treści wysyła wszystkich na pusty ekran. Z walidacją aplikacja wykrywa nieznany identyfikator, kieruje do katalogu kursów i loguje błąd rozwiązania linku. Bez walidacji kampania wygląda na taką, która ma słabą retencję, a zespół UA tnie budżet na kreację, która nigdy nie była problemem.
Przed wysyłką linków
Trzymaj schemat parametrów w repozytorium, obok handlera linków, z jednym imiennym właścicielem, i każ aplikacji logować każdy parametr, którego nie rozpoznaje. Zmieniona nazwa pola kampanii pojawi się wtedy w logu tego samego dnia, a nie w raporcie miesiąc później.
Testy muszą pokrywać ścieżki, którymi faktycznie przychodzą użytkownicy
Większość testów deep linków odbywa się na urządzeniu dewelopera, z zainstalowaną aplikacją, z notatnika albo z terminala. Prawdziwi użytkownicy przychodzą z przeglądarek wbudowanych w aplikacje, klientów poczty, komunikatorów i ze sklepu. Każda ścieżka zachowuje się inaczej.
Użyteczna macierz testów krzyżuje kilka wymiarów: aplikacja zainstalowana lub nie, cold lub warm start, iOS lub Android, przeglądarka domyślna lub wbudowana, użytkownik zalogowany lub nie, zgoda na tracking udzielona lub odrzucona. Nie każdą kombinację trzeba testować ręcznie przy każdym releasie. Te, przez które idzie płatny ruch, trzeba.
Deferred deep linking testuj na buildach zainstalowanych ze sklepu lub z oficjalnej ścieżki testowej, a nie tylko na lokalnych buildach debug. Zachowanie przy instalacji, dane referrera i czas pierwszego uruchomienia mogą się różnić między buildem wgranym ręcznie a prawdziwą instalacją ze sklepu. Właśnie tam deferred flow najczęściej się psuje.
Pomiar nie naprawi tego, czego deep link nie jest w stanie przenieść
Czysta konfiguracja deep linków poprawia routing i zwiększa użyteczność post-install events. Ma jednak wyraźne granice. Warto je nazwać, zanim przegląd kampanii zamieni się w spór o warstwę linków.
- Nie odzyskuje attribution, którą zatrzymują reguły prywatności platformy. Na iOS dla wielu instalacji nadal obowiązują zagregowane i opóźnione sygnały. Jak z tym pracować, opisujemy w [poradniku pomiaru SKAN](/blog/skan-2026-measurement-playbook).
- Nie gwarantuje dopasowania deferred. Część nowych użytkowników zawsze przyjdzie bez kontekstu linku, więc doświadczenie fallbacku ma realną wagę.
- Nie naprawia słabego celu. Skierowanie użytkownika na właściwy ekran nie sprawi, że ten ekran zacznie konwertować.
- Nie mierzy inkrementalności. Kampania retargetingowa z deep linkiem może pokazywać wysoki przypisany przychód od użytkowników, którzy i tak by wrócili.
- Nie naprawia zepsutych flow w innych częściach aplikacji. Jeśli logowanie albo onboarding gubi docelową trasę, link zadziałał, a doświadczenie i tak zawiodło.
Świadomość tych granic utrzymuje diagnozę w ryzach. Gdy kampania działa słabo, najpierw sprawdź warstwę linków, bo da się ją przetestować. Potem przejdź do kreacji, grup odbiorców i produktu, zamiast zakładać, że link tłumaczy wszystko.
Warstwa linków należy do stacku pomiarowego
Deep linki dostarczają kontekst, który pozwala interpretować dane po instalacji: jaka kampania, jaka kreacja, jaki cel. Ten kontekst ma wartość tylko wtedy, gdy trafia w to samo miejsce co attribution, in-app events, przychody i dane kohortowe. Deep linking to jeden element szerszego obrazu, który opisujemy w tekście [o tym, czego zespoły mobile naprawdę potrzebują od pomiaru poza samym installem](/blog/nie-tylko-instalacja-pomiar-mobile).
Ten sam kontekst linku decyduje, ile warte są liczby dalej w stacku. Co ustalić, zanim ruszy budżet re-engagementu, opisaliśmy w tekście o pomiarze przed pierwszą kampanią retargetingową, a szerszy argument za patrzeniem dalej niż instalacja jest w artykule nie tylko instalacja.
AdShift łączy attribution z in-app events, raportowaniem ROAS i LTV, ad revenue oraz eksportem do własnej hurtowni danych. Gdy kontekst deep linku podróżuje razem z tymi eventami, analitycy mogą oddzielić błędy routingu od wyników kampanii bez ręcznego sklejania danych. Dla inżynierii praktyczny cel pozostaje prosty: każdy link rozwiązuje się do zdefiniowanej trasy, każde rozwiązanie emituje event z uzgodnionymi parametrami, a każdy błąd zostawia ślad, który ktoś może odpytać.
Najczęstsze pytania
Czy aplikacja powinna czekać na dane deferred deep linku przed pokazaniem onboardingu?+
Nie w nieskończoność. Poproś o dane wcześnie, poczekaj z krótkim timeoutem i kontynuuj onboarding, jeśli nic nie przyjdzie. Deferred route zastosuj w naturalnym punkcie przejścia, na przykład po rejestracji, żeby wykorzystać spóźnione dopasowanie bez blokowania użytkowników, którzy nigdy go nie dostaną.
Dlaczego Universal Links działają w testach, a nie działają z niektórych aplikacji społecznościowych?+
Przeglądarki wbudowane w aplikacje nie zawsze przekazują link do systemu tak jak przeglądarka domyślna. Link otwiera się wtedy jako strona www zamiast aplikacji. Dodaj do macierzy testów te przeglądarki wbudowane, przez które idzie Twój płatny ruch, i zaprojektuj fallback www z wyraźnym przejściem do aplikacji.
Kto powinien być właścicielem schematu parametrów deep linków?+
Własność warto podzielić według typu pól. Inżynieria odpowiada za pola routingu i walidację, UA za pola kampanii, a analityka za event rejestrujący rozwiązanie linku. Sam schemat powinien być wspólnym, wersjonowanym dokumentem, który wszystkie trzy zespoły przeglądają przed uruchomieniem nowego typu linku.
Czy deep linking może zwiększyć pokrycie attribution na iOS?+
Nie. Deep linking poprawia routing i jakość in-app events, gdy użytkownik jest już w aplikacji. Nie zmienia tego, co reguły prywatności platformy pozwalają dopasować dostawcy pomiaru, więc ograniczenia attribution na iOS pozostają takie same niezależnie od jakości konfiguracji linków.
O autorze
Co-founder of AdShift, building a mobile measurement platform for app teams that need attribution, ROAS/LTV and ad revenue data they can defend.
Zobacz na swoich danych
Chcesz mierzyć kampanie po wartości użytkownika, nie tylko po instalacjach?
Przejdziemy przez obecny pomiar, wskażemy miejsca utraty sygnału i pokażemy, co AdShift raportowałby inaczej.
Czytaj dalej
Marketing mobilnyPierwsza kampania retargetingowa aplikacji: jak ustawić pomiar, zanim ruszy budżet
Trzy okna atrybucji, plan eventów i sprawdzenie zgód decydują o tym, czy pierwsza kampania retargetingowa da liczby, które da się obronić. Ustaw je przed pierwszą impresją, nie po niej.
Czytaj więcej
Marketing mobilnyJak przypisać przychód z reklam do źródła pozyskania użytkownika w aplikacji mobilnej
Dashboard MMP pokazuje zero przychodu przy każdej kampanii, bo ad revenue spływa impression po impression przez SDK mediacji, a ten poradnik wyjaśnia, jak połączyć ten przychód ze źródłem, które pozyskało danego użytkownika, osobno dla każdego formatu reklamowego.
Czytaj więcej
Marketing mobilnyNie tylko instalacja: czego zespoły mobile naprawdę potrzebują od pomiaru
Największy problem pomiaru aplikacji zaczyna się po instalacji: przychód jest w kilku systemach, dashboardy nie zawsze mówią to samo, eksport danych ma znaczenie, a migracja z obecnego MMP musi być niskiego ryzyka.
Czytaj więcej