Добавляем 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‑приложении

Шаги:

  1. Сформируйте базовый URL.
  2. Добавьте параметры через Uri.Builder (он корректно кодирует параметры).
  3. Положите итоговую строку в 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‑ссылок в проекте.