> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aftersell.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Как использовать UTM-ссылки, ведущие напрямую на оформление заказа

> Узнайте, как запускать post-purchase-воронки с помощью UTM-параметров, включая настройку ссылок, ведущих напрямую на оформление заказа

Aftersell поддерживает запуск воронок на основе UTM-параметров — это дополнительная функция, предназначенная специально для продвинутых сценариев использования. Вы можете настроить воронку так, чтобы она активировалась, когда покупатель заходит на ваш сайт с определенной UTM-строкой запроса.

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

<div id="how-utm-triggers-work">
  ## Как работают UTM-триггеры
</div>

UTM-триггеры позволяют показывать определенные post-purchase-воронки на основе UTM-параметров в URL. Это полезно для:

* **Предложений под конкретные кампании** — показывайте разные апселлы в зависимости от маркетинговой кампании
* **Ссылок, ведущих напрямую на оформление заказа** — запускайте воронки, когда покупатели пропускают витрину магазина
* **Атрибуции каналов** — персонализируйте предложения в зависимости от источника трафика (email, социальные сети, реклама)
* **A/B-тестирования** — тестируйте разные предложения для разных вариаций кампаний

<div id="quick-start-basic-utm-trigger-setup">
  ## Быстрый старт: базовая настройка UTM-триггера
</div>

Для стандартных посещений витрины (не с прямым переходом на оформление заказа) вы можете настроить UTM-триггеры с помощью app embed Aftersell. Чтобы узнать, как быстро начать работу с UTM-триггерами, посмотрите это видео:

<iframe src="https://go.screenpal.com/player/cOfD38nOD9i" title="Как настроить UTM-триггеры" allowFullScreen style={{ width: '100%', aspectRatio: '16/9', borderRadius: '12px' }} />

<div id="enable-the-utm-app-embed">
  ### Включите UTM app embed
</div>

Чтобы отслеживать UTM-параметры на страницах витрины:

1. В админ-панели Shopify перейдите в **Online Store > Themes**
2. Нажмите **Customize** для активной темы
3. В редакторе темы нажмите значок **App embeds** (пазл) в левой боковой панели
4. Найдите **Aftersell UTM Tracker** и переключите его в положение **on**
5. Нажмите **Save**

После включения Aftersell будет автоматически фиксировать UTM-параметры, когда покупатели заходят на витрину вашего магазина по UTM-ссылкам.

<div id="configure-utm-triggers-in-your-funnel">
  ### Настройте UTM-триггеры в воронке
</div>

После включения app embed:

1. Перейдите в раздел **Post-purchase Funnels** в админ-панели Aftersell
2. Создайте или отредактируйте воронку
3. В разделе **Triggers** добавьте триггер **UTM Parameter**
4. Настройте UTM-параметр и значение, которым должно соответствовать совпадение
5. Сохраните воронку

<div id="supported-utm-parameters">
  ## Поддерживаемые UTM-параметры
</div>

Aftersell поддерживает следующие стандартные UTM-параметры:

* `utm_source` — определяет источник трафика (например, google, newsletter, facebook)
* `utm_medium` — определяет маркетинговый канал (например, email, cpc, social)
* `utm_campaign` — определяет конкретную кампанию (например, spring\_sale, product\_launch)
* `utm_term` — определяет ключевые слова платного поиска (например, running+shoes)
* `utm_content` — различает похожий контент или ссылки (например, banner\_ad, text\_link)
* `utm_id` — определяет идентификатор кампании (например, campaign\_123)

Все шесть параметров отслеживаются и могут использоваться для запуска воронок.

<div id="partial-field-matching">
  ## Частичное совпадение значений
</div>

При настройке UTM-триггеров Aftersell поддерживает **частичное совпадение** для значений UTM-параметров. Это означает:

* ✅ **Значение триггера:** `spring` → **Совпадает с:** `spring_sale`, `spring_2026`, `early_spring`
* ✅ **Значение триггера:** `email` → **Совпадает с:** `email_newsletter`, `promotional_email`
* ✅ **Значение триггера:** `sale` → **Совпадает с:** `spring_sale`, `flash_sale`, `sale_2026`

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

**Пример:** если вы настроите триггер «`utm_campaign` содержит `sale`», он сработает для любой кампании со словом «sale» в названии, например `spring_sale`, `summer_sale` или `flash_sale_2026`.

<div id="direct-to-checkout-utm-links">
  ## UTM-ссылки, ведущие напрямую на оформление заказа
</div>

Базовая настройка, показанная в видео выше, **не** поддерживает ссылки, которые отправляют покупателей **напрямую на оформление заказа**. По умолчанию Aftersell может обнаруживать UTM-параметры только на страницах витрины. Это связано с тем, что он использует app embed темы, который работает только на страницах витрины, но не на странице оформления заказа или странице благодарности.

<div id="enable-utm-tracking-on-checkout-pages">
  ### Включите отслеживание UTM на страницах оформления заказа
</div>

Чтобы отслеживать UTM-параметры на странице оформления заказа (для ссылок, ведущих напрямую на оформление заказа), необходимо **добавить пиксель Shopify** в ваш магазин.

⚠️ **Важные ограничения:**

* Для этой настройки требуется, чтобы у посетителя был **токен корзины**, когда он попадает на оформление заказа по UTM-ссылке. Без токена корзины UTM-данные не будут зафиксированы.
* **Методы экспресс-оформления заказа (Shop Pay, Apple Pay, Google Pay) не поддерживаются**, поскольку они обходят корзину и не создают токен корзины. Покупатели, использующие экспресс-оформление, не активируют воронки на основе UTM.

<div id="setting-up-the-shopify-pixel">
  ### Настройка пикселя Shopify
</div>

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

1. В админ-панели Shopify перейдите в **Settings > Customer Events**.
2. Нажмите **Add Custom Pixel** и задайте любое название.
3. В выпадающем списке **Permission** выберите **Analytics**. Это единственное необходимое разрешение.
4. В выпадающем списке **Data Sale** вы можете выбрать **Data collected does not qualify as data sale**. Aftersell хранит все собранные данные в конфиденциальности и никогда не передает их никому, кроме вас.
5. В открывшемся редакторе кода вставьте код, приведенный ниже.
6. Нажмите **Save**, затем **Connect**.

```text theme={"theme":{"light":"snazzy-light","dark":"github-dark"}}
/**  
 * IMPORTANT: This pixel can only fire on sessions where the  
 * customer has a cart object, otherwise it will be skipped.  
 * For example, clicking "Buy Now" on a product page skips the cart,  
 * going directly to checkout.  
**/  
function processData({event, cartToken}) {  
  // TODO: Edit MYSHOPIFY_DOMAIN to your domain. E.g.  
  // const MYSHOPIFY_DOMAIN = 'example-store.myshopify.com';  
  const MYSHOPIFY_DOMAIN = '';  
  
  const enableDebug = false;  
  
  // DO NOT EDIT PAST HERE  
  const SESSION_STORAGE_KEY = 'as-customer-trigger-data';  
  const HOST = 'https://start.aftersell.app';  
  
  if (!MYSHOPIFY_DOMAIN) {  
    if (enableDebug) {  
      console.log("UTM pixel didn't fire because of missing Shopify domain");  
    }  
    return;  
  }  
  if (!cartToken) {  
    if (enableDebug) {  
      console.log("UTM pixel didn't fire because of missing cart token");  
    }  
  }  
    
  let existingCustomerData = null;  
  try {  
      existingCustomerData = JSON.parse(  
          sessionStorage.getItem(SESSION_STORAGE_KEY) || 'null'  
      );  
  } catch (ignore) {  
    if (enableDebug) {  
      console.log("UTM pixel didn't fire because malformed user data json");  
    }  
  }  
    
  const allowedUrlParams = [  
        'utm_source',  
        'utm_medium',  
        'utm_campaign',  
        'utm_term',  
        'utm_id',  
        'utm_content',  
    ];  
    
  const searchParams = new URLSearchParams(event.context.window.location.search);  
  let hasCustomerData = false;  
  const customerData = {};  
  for (const param of allowedUrlParams) {  
    const paramValue = searchParams.get(param) || existingCustomerData?.[param];  
    if (paramValue) {  
        hasCustomerData = true;  
        customerData[param] = paramValue;  
    }  
  }  
  
  if (hasCustomerData) {  
    sessionStorage.setItem(SESSION_STORAGE_KEY, JSON.stringify(customerData));  
  
    const postBody = {  
      shop: MYSHOPIFY_DOMAIN,  
      cartToken,  
      checkoutToken: event.data.checkout.token ?? undefined,  
      customerTriggerData: customerData,  
    };  
  
    if (enableDebug) {  
      console.log("UTM pixel fired with the following data:", postBody);  
    }  
      
    fetch(`\${HOST}/api/v1/storefrontSessions`, {  
        method: 'POST',  
        headers: {  
            'Content-Type': 'application/json',  
        },  
        body: JSON.stringify(postBody),  
    });  
  } else {  
    if (enableDebug) {  
      console.log("UTM pixel didn't fire because there was no data to send");  
    }  
  }  
}  
  
analytics.subscribe('checkout_started', (event) => {  
   // minimum realistic time between adding item to cart and clicking checkout  
    const COOKIE_POLLING_INTERVAL_MS = 500;  
  
    let currentCookieValue = getCookieValue({ cookie: document.cookie, cookieName: 'cart' });  
    processData({event, cartToken: currentCookieValue});  
  
    setInterval(() => {  
        const newCookieValue = getCookieValue({ cookie: document.cookie, cookieName: 'cart' });  
        if (newCookieValue !== currentCookieValue) {  
            currentCookieValue = newCookieValue;  
            processData({event, cartToken: newCookieValue});  
        }  
    }, COOKIE_POLLING_INTERVAL_MS);  
});  
  
function getCookieValue({ cookie, cookieName }) {  
    const cartCookieRegex = new RegExp(`^\${cookieName}=`);  
    const cartCookie = cookie  
        .split(';')  
        .map((val) => val.trim())  
        .find((val) => cartCookieRegex.test(val));  
    if (!cartCookie) return null;  
    const cartCookieValue = cartCookie.replace(`\${cookieName}=`, '');  
    return cartCookieValue;  
}
```

**Важные примечания по настройке:**

* **Отредактируйте `MYSHOPIFY_DOMAIN`:** необходимо заменить пустую строку на домен myshopify.com вашего магазина (например, `'example-store.myshopify.com'`)
* **Включите режим отладки (необязательно):** установите `enableDebug = true`, чтобы видеть логи в консоли для устранения неполадок
* **Поддерживаемые параметры:** пиксель отслеживает все шесть стандартных UTM-параметров, перечисленных в массиве `allowedUrlParams`

<div id="testing-your-utm-trigger-setup">
  ## Тестирование настройки UTM-триггеров
</div>

После настройки UTM-триггеров используйте этот чек-лист, чтобы убедиться, что все работает правильно:

<div id="for-storefront-utm-tracking-app-embed">
  ### Для отслеживания UTM на витрине (app embed)
</div>

* ✅ **App embed включен:** убедитесь, что app embed Aftersell UTM Tracker включен в настройках темы
* ✅ **Тестовый URL:** зайдите в магазин с UTM-параметром (например, `yourstore.com?utm_campaign=test`)
* ✅ **Завершите покупку:** добавьте товар в корзину и завершите оформление заказа
* ✅ **Проверьте воронку:** убедитесь, что на странице благодарности отображается правильная воронка
* ✅ **Order Browser:** проверьте Aftersell Order Browser, чтобы подтвердить, что UTM-триггер был обнаружен

<div id="for-direct-to-checkout-utm-tracking-shopify-pixel">
  ### Для отслеживания UTM с прямым переходом на оформление заказа (пиксель Shopify)
</div>

* ✅ **Пиксель установлен:** убедитесь, что пользовательский пиксель сохранен и подключен в Settings > Customer Events
* ✅ **Домен настроен:** подтвердите, что `MYSHOPIFY_DOMAIN` задан правильно в коде пикселя
* ✅ **Токен корзины присутствует:** убедитесь, что у покупателя есть товары в корзине перед переходом к оформлению заказа (необходимо для отслеживания)
* ✅ **Тестовый URL:** используйте ссылку, ведущую напрямую на оформление заказа, с UTM-параметрами (например, `yourstore.com/checkout?utm_campaign=test`)
* ✅ **Завершите покупку:** завершите процесс оформления заказа
* ✅ **Проверьте воронку:** убедитесь, что на странице благодарности отображается правильная воронка
* ✅ **Order Browser:** проверьте Aftersell Order Browser, чтобы подтвердить, что UTM-триггер был обнаружен
* ⚠️ **Экспресс-оформление заказа:** помните, что Shop Pay, Apple Pay и Google Pay НЕ работают с UTM-триггерами

<div id="troubleshooting-tips">
  ### Советы по устранению неполадок
</div>

Если UTM-триггеры не работают:

1. **Включите режим отладки:** установите `enableDebug = true` в коде пикселя и проверьте консоль браузера на наличие сообщений об ошибках
2. **Проверьте токен корзины:** убедитесь, что у покупателей есть товары в корзине перед переходом к оформлению заказа (пикселю требуется токен корзины)
3. **Проверьте настройку триггера:** убедитесь, что UTM-параметр и значение в триггере воронки соответствуют параметрам URL
4. **Протестируйте частичное совпадение:** помните, что триггеры используют частичное совпадение — `sale` совпадет со `spring_sale`, `flash_sale` и т.д.
5. **Проверьте приоритет воронок:** если совпадает несколько воронок, будет показана только воронка с наивысшим приоритетом
6. **Просмотрите Order Browser:** используйте Aftersell Order Browser, чтобы увидеть, какие триггеры сработали для каждого заказа

<div id="best-practices-for-utm-triggers">
  ## Лучшие практики для UTM-триггеров
</div>

* **Используйте единообразные названия:** установите соглашение об именовании для ваших UTM-параметров (например, `utm_campaign=email_spring_2026`)
* **Используйте частичное совпадение:** применяйте более широкие значения триггеров, чтобы охватить несколько вариаций кампаний
* **Тестируйте перед запуском:** всегда проверяйте UTM-ссылки и триггеры перед отправкой покупателям
* **Документируйте кампании:** ведите учет того, какие UTM-параметры вы используете для каждой кампании
* **Комбинируйте с другими триггерами:** используйте UTM-триггеры вместе с триггерами по товарам или стоимости заказа для более точного таргетинга
* **Отслеживайте эффективность:** регулярно проверяйте Order Browser, чтобы видеть, какие UTM-кампании приносят больше всего апселлов
