Диплинк (Deep link)
Диплинк (Deep link)
Диплинк (deep link, «глубокая ссылка») — это URL, который ведёт не на главную страницу сайта или приложения, а на конкретный экран, объект или действие внутри, и часто несёт с собой полезную нагрузку (slug, параметр, идентификатор кампании). В вебе это привычная ссылка вида
site.com/products/42, в мобильных и мессенджерах — отдельная техника, потому что приложение надо ещё уметь открыть из браузера и передать ему параметр.
История
Сама идея «глубокой ссылки» родилась вместе с вебом. В 1989–1991 годах Тим Бернерс-Ли описал URL как универсальный способ адресовать любой ресурс — не только сайт, но и конкретный документ. Когда в середине 1990-х начался коммерческий веб, выяснилось, что владельцы сайтов хотят, чтобы посетители приходили на главную (увидеть рекламу, баннер, фирменный стиль), а не сразу на внутреннюю страницу. Так появился сам термин deep linking — как противопоставление «нормальным» ссылкам на homepage.
Вехи развития:
- Конец 1990-х — начало 2000-х — судебные споры о «глубоких ссылках». Самые громкие: Ticketmaster v. Tickets.com (2000, США) и Shetland Times v. Shetland News (1996, Шотландия). Истцы пытались запретить ссылаться на их внутренние страницы в обход главной. Суды в основном встали на сторону «можно ссылаться куда хочешь», и эпоха споров про сам факт глубокой ссылки в вебе закрылась.
- 2008–2010 — взлёт мобильных приложений (App Store запущен в 2008, Android Market — раньше, но критическая масса появилась после 2010). Возникает новая проблема: как из браузера или из почты открыть приложение на нужном экране? Apple отвечает кастомными URL-схемами вида
myapp://product/42, Android — Intent-фильтрами. - 2013 — Facebook запускает протокол App Links (тогда —
applinks.org): попытка сделать межплатформенный способ описать «вот эта веб-страница соответствует вот этому экрану в моём приложении». - 2014 — стартует Branch (а до них Adjust, AppsFlyer, Kochava), компании, которые делают целую индустрию на одной задаче: отложенный диплинк (deferred deep link). Это когда пользователь кликает на ссылку, приложения у него ещё нет, он идёт в магазин, ставит, открывает — и попадает не на стартовый экран, а сразу в нужную точку, потому что ссылка «запомнилась».
- WWDC 2015 (iOS 9) — Apple запускает Universal Links. Это
https://...-ссылка, которая работает и как обычный веб-URL, и как способ открыть приложение, если оно установлено. Магия — в файлеapple-app-site-association, который сайт обязан выложить на/.well-known/. - Android M (2015) — Google делает аналог: App Links с файлом
assetlinks.json. Идея та же: связать домен и приложение криптографически (через подпись приложения), чтобы никто чужой не мог перехватить ссылку. - 2017–2020 — диплинки становятся фактическим стандартом мобильного маркетинга. Любая push-кампания, email-рассылка, реклама в Instagram, реферальная программа — всё это диплинки с UTM-хвостами и идентификатором кампании.
- 2023 — Telegram выкатывает Mini Apps, которые открываются по ссылке
t.me/<bot>/<app>?startapp=<param>илиt.me/<bot>?startapp=<param>. Это диплинк внутри мессенджера: одна ссылка открывает встроенное веб-приложение бота с переданным параметром, который видит уже JavaScript внутри мини-аппа. - 2024–2025 — конкуренты Telegram (MAX, WeChat-аналоги, корпоративные мессенджеры) перенимают тот же шаблон. Появляются «диплинк-операторы» типа MAX (
max.ru/<bot>?startapp=<param>), и маркетинг учится собирать ссылки сразу под несколько мессенджеров с общим slug-форматом.
Что это такое
Диплинк — это адресная ссылка с навигационным намерением. В отличие от «зайди на главную и сам найди», диплинк говорит: «открой именно вот этот товар / именно этот чат / именно эту настройку и передай в него вот эти данные».
Технически диплинк может быть трёх типов:
- Веб-диплинк — обычный URL:
shop.com/product/42?ref=email-promo. Открывается в браузере, всё стандартно. - Кастомная URL-схема (custom scheme):
instagram://user?username=durov,tg://resolve?domain=durov. Это «псевдо-протокол», который умеют ловить только установленные приложения. Если приложения нет, браузер просто ругается «не могу открыть». - Универсальный диплинк (Universal Link / App Link / https-deeplink):
https://t.me/durov,https://instagram.com/durov. Выглядит как обычная веб-ссылка, но операционная система при клике распознаёт «о, это домен, привязанный к установленному приложению» и открывает приложение, не браузер. Если приложения нет — открывается веб-страница по тому же URL и работает как fallback.
Отдельная подкатегория — диплинк внутри мессенджера. t.me/<bot>?start=<payload> открывает чат с ботом и передаёт ему payload (бот видит его в первом сообщении /start <payload>). t.me/<bot>?startapp=<payload> открывает Mini App и передаёт ему payload в Telegram.WebApp.initDataUnsafe.start_param. Это маркетинговый интерфейс «дай ботам понять, откуда пришёл пользователь и с какой кампании».
Диплинк vs обычная ссылка. Любой URL — это формально диплинк, если он указывает не на корень. Но в обиходе «диплинк» — это ссылка, которая дополнительно умеет: (а) открывать мобильное приложение или мини-апп, (б) нести в себе бизнес-payload (slug, кампанию, реферала, отложенный action), (в) работать в условиях «приложения нет — открой веб-альтернативу».
Диплинк vs deeplink-короткая-ссылка. Сервисы типа Branch, AppsFlyer, bit.ly выдают «короткие диплинки» — app.link/abc123. Это редирект, который на сервере сначала смотрит user-agent (iOS, Android, desktop), решает куда вести, и только потом отправляет реальный диплинк. Это удобно для аналитики и кросс-платформенной логики, но кликать всё равно надо на короткую ссылку.
Аналогии из жизни
Аналогия 1: адрес квартиры vs адрес подъезда. Обычная ссылка на главную — это «дом 15». Чтобы найти конкретного человека, ты звонишь в домофон и спрашиваешь. Диплинк — это полный адрес «дом 15, подъезд 3, квартира 47, спроси Машу». Доставщик еды сразу едет туда, куда нужно, не теряя время в подъездах.
Где ломается: если у дома 15 нет третьего подъезда (страницы по slug не существует — 404), доставщик упирается в стену и не может «сообразить, что имелось в виду». Поэтому грамотный диплинк-роутер на сервере должен фолбэчить на главную с понятным сообщением, а не падать молча. Ещё: если адрес ввёл недоброжелатель (кто-то прислал ссылку на чужой кабинет), нужны проверки прав доступа на стороне сервера — диплинк сам по себе ничего не авторизует.
Аналогия 2: пригласительный билет на закрытый концерт. На билете напечатано «концерт такого-то, 20 ноября, ряд 5 место 7, держатель — Иван». Это один объект, который и приводит в нужное место, и подтверждает контекст («ты — Иван», «у тебя место 5/7»). Диплинк с payload работает так же: ссылка ведёт на нужный экран и одновременно несёт информацию «ты пришёл по такой-то рекламе, по такому-то приглашению».
Где ломается: билет можно сфотографировать и переслать другу. Если охрана не сверяет паспорт, на концерт пройдёт кто угодно. Точно так же диплинк с реферальным payload — это всего лишь подсказка, не доказательство. Никогда не доверяй параметру из URL для авторизации: пользователь может отредактировать ссылку в один клик. Диплинк указывает «куда идти», но «кто ты» должна сказать сессия и токен, а не сам URL.
Аналогия 3: радиосигнал «найти такси» с координатами. Когда вызываешь такси через приложение, оно отправляет водителю не «приезжай в город», а пакет «адрес посадки X, координаты Y, имя клиента Z, тариф T». Водитель за один взмах оказывается у нужного подъезда. Диплинк — такой же пакет «куда+с-чем», только для приложений и сайтов.
Где ломается: координаты могут устареть (клиент перешёл в другое место), пакет может потеряться (плохая связь), таксист может не уметь читать твой формат (старая версия приложения, не понимающая новый параметр). Поэтому в диплинках важна версионируемость: если ввёл новый параметр в payload — старые версии клиента должны его проигнорировать, а не упасть.
Как это работает
Жизненный цикл диплинка можно разложить на четыре этапа: сборка → распространение → обработка платформой → парсинг приложением.
Этап 1. Сборка.
Маркетолог или система генерирует URL вида:
https://t.me/newbuildmimo_bot?startapp=b_72651e87--s_yandex_tg--m_cpc--c_brandbot-search--y_{yclid}
Здесь:
- t.me/newbuildmimo_bot — адрес мессенджера и идентификатор бота;
- startapp= — параметр, который Telegram передаст внутрь Mini App;
- b_72651e87 — slug проекта (идентификатор «куда вести»);
- --s_yandex_tg, --m_cpc, --c_brandbot-search — UTM-хвост в собственном формате с разделителем -- (вместо классических &utm_source=);
- {yclid} — макрос Яндекс.Директа, который сам подставит ID клика.
Формат -- — это договорённость команды: в Telegram бот-startapp нельзя передать символ &, иначе ссылка обрежется. Поэтому всю атрибуцию упаковывают в один параметр через свой разделитель и парсят на стороне приложения.
Этап 2. Распространение.
Ссылку расклеивают по каналам: рекламные креативы в Яндекс.Директе, посты в каналах, push-уведомления, баннеры на сайтах-партнёрах, QR-коды в офлайн-материалах. У каждого канала — свой источник в UTM-хвосте.
Этап 3. Обработка платформой.
Пользователь кликает. Дальше — самое интересное место, где всё может сломаться.
- Веб-диплинк (
https://site.com/products/42) — браузер просто открывает URL. Сервер видит запрос, отдаёт HTML с нужным товаром. - Universal Link (iOS, Android App Links): операционная система видит
https://..., идёт к файлуapple-app-site-associationилиassetlinks.jsonна этом домене, проверяет «связан ли этот домен с установленным приложением». Если да — открывает приложение и передаёт ему URL. Если нет — открывает в браузере. - Кастомная схема (
tg://resolve?...,myapp://...): браузер проверяет «есть ли приложение, зарегистрировавшее этот scheme». Если есть — открывает его. Если нет — ошибка «не могу открыть», что неприятно для UX. - Telegram t.me/... — это особый зверь. URL открывается либо в нативном Telegram (если установлен и связь работает), либо в веб-версии
web.telegram.org. Параметрstartapp=Telegram передаст в Mini App в момент инициализации.
Этап 4. Парсинг приложением.
Приложение получило URL целиком. Дальше — его задача распарсить и сделать правильное действие. В мини-аппе на JS это выглядит примерно так:
const tg = window.Telegram.WebApp;
const raw = tg.initDataUnsafe.start_param || '';
const segments = raw.split('--');
const slug = segments[0]; // b_72651e87
const attribution = {};
for (const seg of segments.slice(1)) {
const [key, ...rest] = seg.split('_');
attribution[key] = rest.join('_');
}
// дальше — открыть экран проекта slug и записать визит с attribution
Полезные практики:
- Slug всегда первый сегмент. Тогда если кто-то добавит сегмент
--previewили новый макрос, парсер старого приложения всё равно правильно поймёт основной идентификатор. - Игнорировать неизвестные сегменты. Это та самая «версионируемость» из аналогии с такси.
- Никогда не доверять payload для авторизации. Slug проекта — нормально, токен сессии — никогда.
- Логировать отсутствие параметра. Если кто-то открыл мини-апп напрямую (без диплинка), это валидный сценарий, но в маркетинговой воронке такой визит часто помечают «без UTM» и отделяют от рекламного трафика.
Не парси UTM из URL после редиректа
Если твой сервер делает редирект 301 my-deeplink → app://product/42, в финальный URL может не попасть весь хвост. Сохраняй UTM на стороне редиректа в куку или серверный лог, не надейся, что они «доедут» сами.
Где встречается в обычной жизни
- Push-уведомление от банка «вам пришёл перевод» — клик открывает не главную банк-приложения, а сразу экран этой операции. Это диплинк.
- Сброс пароля по email. В письме ссылка
site.com/reset?token=abc123— диплинк, который ведёт на экран ввода нового пароля и одновременно несёт одноразовый токен. - Поделиться местом в Яндекс.Картах. Ссылка вида
yandex.ru/maps/?ll=...&pt=...— это диплинк с координатами. Открывается в приложении, ставит точку. - Реклама конкретного товара в Instagram. «Сви́пни вверх» ведёт не на магазин, а в карточку товара — диплинк.
- Приглашение в чат
t.me/joinchat/...илиt.me/+abc...— диплинк, который и открывает чат, и говорит Telegram'у «пользователь должен в него вступить».
Где встречается в IT и бизнесе
- Performance-маркетинг — реклама в Яндекс.Директе, Google Ads, ВК ведёт на диплинки с UTM-хвостом и макросами
{campaign_id},{banner_id},{yclid}/{gclid}. Без них невозможно понять, какая кампания приносит конверсии. - Реферальные программы. Каждый пользователь получает свой диплинк
app.com/?ref=USER123. Когда новый юзер регистрируется, реферал учитывается. - Onboarding под нишу. Пользователь, пришедший по ссылке
app.com/start?role=designer, видит интро для дизайнеров, а пришедший с?role=dev— для разработчиков. Один и тот же продукт, разные первые экраны. - Magic link авторизация. Письмо с одноразовой ссылкой
site.com/login?token=xyz— диплинк, который и открывает приложение, и логинит. Удобнее паролей, особенно на мобиле. - Чат-боты и Mini Apps. Главный канал распространения Telegram-ботов и мини-аппов — диплинки
t.me/<bot>?start=...(классический бот) иt.me/<bot>?startapp=...(Mini App). Это и точка входа, и канал атрибуции.
Кто пользуется
- Telegram — миллиарды кликов в день по
t.me/...ссылкам. Mini Apps экосистема выросла в 2023–2025 в одну из главных платформ для воронок «реклама → лидген → CRM». - Branch.io — крупнейший провайдер deferred deep links, обслуживает десятки тысяч мобильных приложений (по их же данным — более 100 000 SDK-интеграций к 2024 году).
- AppsFlyer, Adjust, Singular, Kochava — мобильная атрибуция. Каждая обрабатывает сотни миллиардов кликов в год, особенно в gaming-вертикали.
- Instagram, TikTok, YouTube Shorts — все ссылки в био и «свайпы вверх» технически диплинки на конкретный контент.
- Любой банк, маркетплейс, такси-сервис — мобильные приложения без диплинков сегодня невозможны: пуши, реклама, email-рассылки, partnership-программы — всё построено на них.
Альтернативы и конкуренты
- QR-коды. Плюсы: работают в офлайне, не требуют печатать URL. Минусы: всё равно ведут на диплинк под капотом, плюс нужен сканер; на больших расстояниях/в темноте — не считываются.
- NFC-метки. Плюсы: «поднёс телефон — открылось приложение». Минусы: требуют поддержки железа и активного NFC, плохо разворачиваются в массовых каналах.
- Custom schemes без universal links (
myapp://...). Плюсы: проще настроить. Минусы: если приложения нет — ошибка вместо fallback на веб; вытеснены универсальными ссылками после 2015 года. - Голосовые команды («Siri, открой Авито на категории велосипеды»). Плюсы: натуральный UX. Минусы: ассистент должен заранее знать структуру приложения, диплинки часто всё равно нужны под капотом.
- App clips / Instant apps (Apple/Google). Плюсы: запускают мини-версию приложения без установки. Минусы: ограничения по размеру, поддерживают не все экраны; всё равно нужна ссылка-триггер.
Когда НЕ стоит использовать
- Когда payload содержит секрет. Никогда не зашивай в URL пароли, JWT-токены долгого действия, личные данные. URL попадёт в историю браузера, в логи сервера, в Referer-заголовок при переходе. Используй короткоживущие одноразовые токены или сессию.
- Когда сценарий нелинеен. Если для конкретного экрана нужно выполнить три шага по порядку (логин → выбрать организацию → задать пароль), диплинк прямо в третий шаг — баг, а не фича. Сначала надо провести по сценарию.
- Когда у тебя нет аналитики. Запускать рекламу на диплинк без отдельного канала, без UTM, без отчёта о доставленных кликах — слепота. Лучше задержись с запуском и навесь хотя бы простую атрибуцию.
Связанные понятия
- UTM-метки — стандарт
utm_source/medium/campaign/..., который вешают в query-строку диплинка для отчёта в системах аналитики. - Universal Link / Android App Link — механизмы операционной системы, превращающие
https-URL в способ открыть приложение. - Deferred deep link — «отложенный диплинк», работающий через посредника (Branch, AppsFlyer): пользователь кликнул, поставил приложение из магазина, и при первом запуске попал на нужный экран.
- App Clip / Instant App — мини-версия приложения, которую система запускает по диплинку без установки полного приложения.
- Magic link — одноразовый диплинк с токеном, заменяющий пароль при логине.
- Webhook ([[webhook]]) — обратная сторона: не пользователь идёт в приложение, а приложение шлёт уведомление на твой URL. Те же URL, другая инициатива.
Литература и источники
- Apple. Supporting Universal Links — официальная документация Apple на
developer.apple.com. Самый точный источник про iOS-сторону. - Android Developers. App Links —
developer.android.com/training/app-links. Канон по Android-стороне, включая работу сassetlinks.json. - Telegram Bot API. Deep Linking —
core.telegram.org/bots/features#deep-linkingи страница про Mini Apps. Описано, как Telegram передаётstart_paramв Mini App и какие ограничения есть на payload. - Branch.io Blog — много прикладных статей про deferred deep links, attribution, разницу между universal links и custom schemes. Искать по запросу «branch.io deep linking guide».
- Wikipedia, статья «Deep linking» — компактный обзор истории, юридических споров 1990-х и базовой терминологии.
- AppsFlyer State of Mobile — ежегодный отчёт о мобильной атрибуции, диплинках, fraud'е. Полезно, чтобы понимать масштабы индустрии. Искать по запросу «AppsFlyer State of App Marketing».
Где встретилось у меня
Вчера разбирался с диплинками для брендботов: ссылки https://t.me/<bot>?startapp=<slug>--s_yandex_tg--m_cpc--... идут из Яндекс.Директа в Mini App, парсер на JS вытаскивает slug и UTM-хвост, мини-апп шлёт визит с атрибуцией в сервер, оттуда — в колл-центр. Отдельная история — превью-режим: добавили хвост-сегмент --preview, чтобы технические заходы не падали в «без UTM» и не засчитывались как реальный визит.
Краткое резюме
- Диплинк — это URL с навигационным намерением и часто с полезным payload: ведёт сразу в нужный экран и приносит контекст (slug, UTM, реферал).
- Три типа: веб-диплинк, кастомная URL-схема (
myapp://), универсальная ссылка (https://, работающая и в браузере, и как триггер для приложения). - В Telegram диплинки выглядят как
t.me/<bot>?startapp=<payload>; payload — это твой канал атрибуции внутри мессенджера, а не дополнительный query-параметр. - Базовая дисциплина: slug первым сегментом, неизвестные сегменты игнорировать, никогда не доверять payload для авторизации, всегда сохранять UTM до редиректов.
- Без диплинков невозможно ни push-маркетинг, ни performance, ни magic-link авторизация, ни приличный onboarding. Это рабочая лошадь современного роста.