Добавляем utm_campaign при шаринге на Android — быстрое руководство
Добавляйте utm_campaign динамически перед созданием Intent.ACTION_SEND: соберите URL через Uri.Builder, добавьте utm_source/utm_medium/utm_campaign и положите итоговую строку в Intent.EXTRA_TEXT. Ниже — готовый код на Kotlin, варианты тестирования и распространённые ошибки.
Почему utm_campaign важен при шаринге
utm_campaign позволяет атрибутировать переходы к конкретной маркетинговой кампании (например, black_friday_2026 или new_user_promo). Без меток большинство переходов из мессенджеров попадёт в "direct" или будет неразмечено, что искажает отчёты в GA4 и мешает оценке эффективности.
Как добавить utm_campaign в Android‑приложении
Шаги:
- Сформируйте базовый URL.
- Добавьте параметры через Uri.Builder (он корректно кодирует параметры).
- Положите итоговую строку в Intent ACTION_SEND и вызовите chooser.
Пример на Kotlin:
val baseUrl = "https://example.com/product"
val campaign = "promo_2026" // можно брать из Remote Config, DB или UI
val uri = Uri.parse(baseUrl).buildUpon()
.appendQueryParameter("utm_source", "android_app")
.appendQueryParameter("utm_medium", "share")
.appendQueryParameter("utm_campaign", campaign)
.build()
val shareIntent = Intent(Intent.ACTION_SEND).apply {
type = "text/plain"
putExtra(Intent.EXTRA_TEXT, uri.toString())
}
startActivity(Intent.createChooser(shareIntent, "Поделиться"))
Коротко о вариантах:
- Динамические значения: берите utm_campaign из Firebase Remote Config, сервера или генерируйте на лету (включая id пользователя/типа промо).
- Если нужно включать UTM в тексты сообщений (не только ссылку), вставляйте uri.toString() в тело.
- Uri.Builder сам кодирует параметры; не используйте двойное кодирование.
Пример на Java (микрон):
String baseUrl = "https://example.com/product";
String campaign = "promo_2026";
Uri uri = Uri.parse(baseUrl).buildUpon()
.appendQueryParameter("utm_source", "android_app")
.appendQueryParameter("utm_medium", "share")
.appendQueryParameter("utm_campaign", campaign)
.build();
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("text/plain");
share.putExtra(Intent.EXTRA_TEXT, uri.toString());
startActivity(Intent.createChooser(share, "Поделиться"));
Для A/B-тестов и быстрых изменений удобно хранить значение utm_campaign в Firebase Remote Config — меняете кампанию без релиза.
Тестирование и интеграция с GA4
- Тестируйте в режиме Realtime / DebugView в GA4: откройте мобильный браузер на эмуляторе/устройстве, нажмите ссылку из шаринга и смотрите входящее событие.
- Проверьте, что ссылки не редиректят через промежуточный сервис, который может очищать query-параметры.
- Для продакшна: при сложной маршрутизации используйте серверные редиректы, которые сохраняют query-параметры, или решения типа deep links / branch для сохранения меток после редиректа.
Не ставьте utm-параметры на внутренние ссылки целевого лендинга, по которым сами проводите трафик — это приведёт к self-referral и испортит атрибуцию.
Частые ошибки
- UTM исчезают после редиректа: причина — редирект сбрасывает query. Фикс — настроить сохранение query на уровне сервера или использовать корректный deep link.
- Параметры не кодированы: если вставляете ссылку в текст вручную или формируете deep link для бота, всегда URL-encode значения.
- Дублирование utm_campaign: генерируйте уникальные идентификаторы или контролируйте правила именования, чтобы отличать версии кампаний.
- Использование фрагмента (#) вместо query (?): фрагменты не передаются на сервер и не учитываются аналитикой.
FAQ
-
Как формировать безопасные значения для utm_campaign?
Используйте латиницу, цифры и подчеркивания; избегайте пробелов и специальных символов. Кодировать значения необязательно при использовании Uri.Builder. -
Уйдут ли метки в мессенджерах (Telegram, WhatsApp)?
Большинство мессенджеров сохраняют query-параметры, но некоторые приложения могут обрезать URL или делать собственные редиректы. Тестируйте целевые комбинации приложений. -
Подходит ли сокращатель ссылок?
Можно использовать, но убедитесь, что сокращатель сохраняет исходные query-параметры при переходе; иначе метки потеряются. -
Нужно ли добавлять utm_medium и utm_source?
Да, для корректной атрибуции передавайте минимум utm_source и utm_medium вместе с utm_campaign.
Если нужно, могу прислать готовые утилиты/функции на Kotlin для централизованного формирования UTM‑ссылок в проекте.