UTM метки для MODX Revo / Laravel

UTM метки для MODX Revo / Laravel

Всем привет! Сегодня я хочу рассказать зачем utm метки и как их сохранить

Для чего вообще нужны UTM метки?

UTM метки это как теги на сайте, которые добавляются в конец адресной строки.
Использование UTM меток очень помогает оценить, проанализировать и отследить трафик сайта.
Например, у нас в компании метки отправляются в CRM, соответственно, мы можем понять какая реклама приносит нам больше продаж, а какая в пустую тратит бюджет.

Параметры UTM меток

Метки представляют с собой GET-параметры, которые состоят из параметра и значения:

Из чего состоит UTM метка

utm_source — наименование рекламной площадки.
Этот параметр является обязательным, он позволяет указать источник трафика, например: yandex, google, mail, vk

utm_medium — тип рекламы.
Этот параметр является обязательным, он позволяет указать тип рекламы, обычно туда указывают:

  • display — это баннерная реклама;
  • cpc (cost per click) — это контекстная реклама;
  • social_cpc — это реклама в социальных сетях.

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

Необязательные параметры:

  • utm_term — ключевое слово, с которого перешёл посетитель сайта;
  • utm_content — доп. инфа, если все параметры меток совпадают, её можно отслеживать

Вкратце разобрались, что из себя представляют данные метки, теперь возникает задача получать их в заявках и обрабатывать.

Для MODX Revolution я выпустил компонент под названием utmMark, доступен он в репозитории modstore.pro, вот ссылка https://modstore.pro/packages/utilities/utmmark

Исходники компонента у меня в репозитории https://github.com/igamov/utmMark

В данном компоненте, содержится один плагин, сниппет, и чанк. 
Плагин срабатывает на событие OnHandleRequest, проверяет utm метки, если они есть сохраняет их в cookie
Дальше нам необходимо получить метки в форме, для этого нужно просто запустить сниппет utmMark в форме, появятся поля type="hidden"
Соответственно Вам останется только перечислить поля в Formit

Если у вас своя отправка, то лучше всего получать значение из cookie прям в php и не придется запускать сниппет.

В настройках вы можете перечислить через запятую параметры utm меток, ключ - utmmark_marks

Не так давно обновил компонент, и добавил возможность отображать UTM метки в заказах miniShop2.

Сохранение UTM меток в Laravel

Приведу пример, может кому пригодится. Реализовал сохранение меток в Laravel, для этого создал Middleware utmMark

<?php

namespace App\Http\Middleware;

use Closure;

class utmMark
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if(!session('checked_utm')) {
            $utmMarks = $request->only([
                'utm_source',
                'utm_medium',
                'utm_campaign',
                'utm_term',
                'utm_content'
            ]);
            if (empty($utmMarks['utm_source'])) {
                $original_ref = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
                switch ($original_ref) {
                    case 'https://www.google.ru/':
                    case 'https://www.google.com/':
                      $utm_source = 'google';
                      break;
                    case 'https://yandex.ru/':
                      $utm_source = 'yandex';
                      break;
                    default:
                    $utm_source = '';
                  }
                $utmMarks['utm_source'] = $utm_source;
            }
            if(empty($utmMarks['utm_campaign'])){
                $original_ref = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
                switch ($original_ref) {
                    case 'https://www.google.com/':
                    case 'https://www.google.ru/':
                    case 'https://yandex.ru/':
                        $utmMarks['utm_campaign']  = 'organic';
                        break;
                }
            }
            session(['utm_marks'=>json_encode($utmMarks)]);
            session(['checked_utm' => true]);
        }
        return $next($request);
    }
}

Получение значение из меток:

if(session('checked_utm')) {
 $utm_marks = json_decode(session('utm_marks'), 1);
 $utm_source = Arr::get($utm_marks, 'utm_source', "site.ru");
 $utm_medium = Arr::get($utm_marks, 'utm_medium', "");
 $utm_campaign = Arr::get($utm_marks, 'utm_campaign', "");
 $utm_content = Arr::get($utm_marks, 'utm_content', "");
 $utm_term = Arr::get($utm_marks, 'utm_term', "");
}

02.12.2020 / 6580

No avatar

Комментарии (0)