# Свяжите поиск, сайт и приложение через deep links

- **Канонический URL:** https://playbook.affpartners.io/ru/practices/discoverability-links/index.html
- **Markdown-версия:** https://playbook.affpartners.io/ru/practices/discoverability-links/index.md
- **Раздел:** ASO и SEO
- **Время:** 2 часа на первый маршрут

Deep link — это точный адрес внутри приложения. Он должен сохранить исходную задачу после клика, входа и даже новой установки, а при ошибке дать понятный запасной маршрут.

## Результат

Карта одного непрерывного пути и матрица тестов для iOS/Android: приложение установлено, пользователь не вошёл, приложения нет и версия устарела.

## Ссылка должна вести в нужную комнату, а не просто в здание

Если человек читает инструкцию о статусе, после клика он ожидает открыть свой статус. Главный экран заставляет снова искать путь. Хороший маршрут помнит назначение после входа и предлагает безопасную альтернативу, если экран недоступен.

## Что понадобится

- **Один маршрут:** Конкретная веб-страница или сообщение, конечный экран приложения и одно ожидаемое действие.
- **Разработка:** iOS- и Android-разработчик или владелец ссылок, который знает поддерживаемые пути и поведение авторизации.
- **Проверка:** Устройства обеих платформ, установленная и удалённая версия приложения, тестовые аккаунты и события аналитики.

## Термины простыми словами

- **Deep link — Ссылка сразу на нужный экран приложения:** Определение: После нажатия пользователь попадает не на главную, а в конкретный сценарий, который был обещан в сообщении или на сайте. Пример: Push о сохранённом уроке открывает этот урок, а не домашний экран.
- **SEO — Улучшение страниц сайта для поиска:** Определение: Полезные страницы отвечают на реальные вопросы пользователей и помогают находить продукт через поисковые системы. Пример: Страница отвечает на один вопрос, объясняет условия и ведёт к релевантному сценарию приложения.
- **Событие аналитики — Запись о конкретном действии пользователя:** Определение: Приложение отправляет событие в аналитику, когда пользователь открыл экран, нажал кнопку или завершил действие. Пример: registration_started и registration_completed позволяют увидеть, сколько людей бросили регистрацию.
- **Конверсия — Доля людей, которые перешли к следующему шагу:** Определение: Показывает, сколько пользователей из начавших шаг завершили его или дошли до следующего. Пример: 80 завершили регистрацию из 100 начавших: конверсия равна 80 ÷ 100 × 100% = 80%.

## Когда применять

Переходы из поиска, сайта, email или push открывают главную страницу, теряются после входа или новой установки и не позволяют измерить целевое действие.

## Что описать до разработки

Сначала нарисуйте поведение для каждого состояния пользователя. Одна и та же ссылка не может молча вести в тупик, если приложения или экрана нет.

- **Карта маршрутов**
  - **Источник:** Сопоставьте источник, обещанный экран, необходимую авторизацию и целевое действие после открытия.
  - **Если доступа нет:** Начните с одной самой важной ссылки и вручную запишите ожидаемое поведение для пяти состояний.
- **Технические ошибки**
  - **Источник:** Собирайте успешное открытие, запасной маршрут, неизвестный путь и версию приложения по каждой ссылке.
  - **Если доступа нет:** Без событий ведите журнал ручных тестов с устройством, версией, шагами и видео ошибки.
- **Переходы и действия**
  - **Источник:** Свяжите клик, открытие нужного экрана и завершение действия одним идентификатором маршрута.
  - **Если доступа нет:** Добавьте технический параметр route_id («идентификатор маршрута») к ссылке и событию экрана до следующего запуска.

## Настройте непрерывный маршрут

1. **Выберите одну задачу и экран.** Начните с конкретного обещания и конечного результата. Не создавайте универсальную ссылку «открыть приложение».
   - **Где сделать:** В первой строке карты маршрутов.
   - **Пример:** Статья «Как проверить статус» → экран конкретного статуса → пользователь видит следующий шаг.
2. **Опишите состояния пользователя.** Запишите поведение, если приложение установлено, вход не выполнен, версия устарела или приложения нет.
   - **Где сделать:** В строках матрицы тестирования.
   - **Пример:** После входа исходный идентификатор маршрута сохраняется и открывает статус, а не домашний экран.
3. **Добавьте безопасный запасной путь.** Если конечный экран недоступен, покажите релевантную веб-страницу, стор или помощь. Не оставляйте белый экран и неизвестную ошибку.
   - **Где сделать:** В настройках маршрутизатора ссылок.
   - **Пример:** Нет приложения → веб-инструкция остаётся доступной + понятная кнопка в стор.
4. **Протестируйте на реальных устройствах.** Проверьте iOS и Android, холодный запуск, вход, старую версию и переход из разных источников. Запишите факт по каждой строке.
   - **Где сделать:** На устройствах и версиях, которыми реально пользуется аудитория.
   - **Пример:** Android 13 из браузера, iOS 17 из email, обе платформы после выхода из аккаунта.
5. **Свяжите клик с результатом.** Передавайте route_id — идентификатор маршрута — и фиксируйте открытие нужного экрана, запасной путь, ошибку и целевое действие.
   - **Где сделать:** В параметрах ссылки и событиях аналитики.
   - **Пример:** Клик на сайте → открытие приложения → просмотр статуса → следующий шаг с route_id=status_help.

## Примеры из практики

- **Вход не стирает назначение:** Ссылка на статус просит авторизоваться, сохраняет route_id и после входа открывает обещанный экран вместо домашней страницы.
- **Нет приложения — нет тупика:** Пользователь остаётся на полезной веб-инструкции и получает понятную ссылку в стор. После установки маршрут можно продолжить или безопасно открыть веб-альтернативу.

## Готовый артефакт: Матрица проверки маршрута «Открыть статус»

Пройдите каждую строку на iOS и Android. Результат «приложение открылось» недостаточен — нужен обещанный экран.

| Состояние | Ожидаемый путь | Запасной маршрут | Результат |
| --- | --- | --- | --- |
| Установлено, пользователь вошёл | Сразу экран статуса | Не нужен | Проверить iOS/Android |
| Установлено, вход не выполнен | Вход → экран статуса | Сохранить назначение | Не терять идентификатор маршрута |
| Приложения нет | Страница стора | Веб-ответ доступен | Не показывать ошибку |
| Версия устарела | Поддерживаемый экран или обновление | Веб-версия | Не вести в тупик |
| Экран удалён | Актуальная альтернатива | Раздел помощи | Событие «маршрут не найден» |

Сценарий готов, когда после клика пользователь видит обещанный экран во всех поддерживаемых состояниях, а ошибки маршрута попадают в отчёт с версией и платформой.

## Чек-лист deep link

Ссылка готова только после проверки полного пути, а не одного успешного открытия на устройстве разработчика.

- [ ] Есть конкретный обещанный экран и целевое действие.
- [ ] После входа или холодного запуска исходное назначение сохраняется.
- [ ] Для отсутствующего приложения, старой версии и удалённого экрана есть запасной путь.
- [ ] В ссылке нет чувствительных пользовательских данных.
- [ ] Клик, экран, ошибка и действие связаны идентификатором маршрута и проверены на iOS/Android.

## Как понять, что маршрут работает

- **Технический успех:** Доля кликов, которые открыли обещанный экран или корректный запасной путь без ошибки.
- **Сохранение контекста:** После входа и новой установки пользователь продолжает исходную задачу, а не попадает на главную.
- **Полезное действие:** Пользователи завершают действие после перехода, а ошибки «маршрут не найден» и возвраты назад снижаются.

## Главное правило

Deep link считается рабочим только тогда, когда пользователь дошёл до обещанного экрана во всех поддерживаемых состояниях, а не только в тесте разработчика.

---

- [HTML-версия](https://playbook.affpartners.io/ru/practices/discoverability-links/index.html)
- [Все практики](https://playbook.affpartners.io/ru/)
