Contact form 7 — почему неправильно передаются utm source метки?

Ссылка скопирована
1 ответ

Нужно передавать в письмо utm-метки, чтобы было понятно, по какой рекламе перешли и оставили заявку.

Сама форма

<div class="popup__input-container d-flex flex-column"><div class="d-flex flex-column"><h3 class="popup__title">Оставить заявку</h3>[text* form-name-1 class:phone__input-popup placeholder "Имя"][tel* form-number-1 class:phone__input-popup placeholder "Номер телефона"]  <div hidden> [text utm_source default:get] [text utm_medium default:get] [text utm_campaign default:get] [text utm_term default:get] [text utm_content default:get] </div>  [submit class:phone__button "Отправить"]<span class="popup__close" id="popUpClose">Закрыть</span></div></div>

<div class="popup__input-container d-flex flex-column"><div class="d-flex flex-column"><h3 class="popup__title">Оставить заявку</h3>[text* form-name-1 class:phone__input-popup placeholder "Имя"][tel* form-number-1 class:phone__input-popup placeholder "Номер телефона"] <div hidden> [text utm_source default:get] [text utm_medium default:get] [text utm_campaign default:get] [text utm_term default:get] [text utm_content default:get] </div> [submit class:phone__button "Отправить"]<span class="popup__close" id="popUpClose">Закрыть</span></div></div>

А это формула для письма на email:

Имя: [form-name-1] Номер телефона: [form-number-1]  Отправлено со страницы: [_url] UTM source: [utm_source] UTM medium: [utm_medium] UTM campaign: [utm_campaign] UTM term: [utm_term] UTM term:[utm_content]

Имя: [form-name-1] Номер телефона: [form-number-1] Отправлено со страницы: [_url] UTM source: [utm_source] UTM medium: [utm_medium] UTM campaign: [utm_campaign] UTM term: [utm_term] UTM term:[utm_content]

когда кто-то приходит по рекламе, то не совпадает source. В url написано facebook, а передавется как google.
Не единичный случай и не случайный глюк, уже несколько, не пойму закономерность.

Например

Отправлено со страницы: https://example.com/?utm_source=facebook&utm_medium=cpc&utm_campaign=conversion&fbclid=IwAR1lHKi82HKpBMM74YxOJjxQfHXWZ3mzLqm93H2YD9JeLTaRzpf-87XNDxE  UTM source: google

Отправлено со страницы: https://example.com/?utm_source=facebook&utm_medium=cpc&utm_campaign=conversion&fbclid=IwAR1lHKi82HKpBMM74YxOJjxQfHXWZ3mzLqm93H2YD9JeLTaRzpf-87XNDxE UTM source: google

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

Где ошибаюсь?

Дополнительно:

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Mobile-редакция Ответ

В Contact Form 7 поле default:get берёт значение из GET-параметра текущей страницы в момент вывода формы. Если пользователь пришёл с utm_source=facebook, потом перешёл на другую страницу или форма открылась в попапе уже без UTM в URL, значение может быть пустым или старым. А если на сайте есть скрипт, который сохраняет UTM в cookie/localStorage, он может подставлять предыдущий источник, например google.

То, что при ручной симуляции URL всё передаётся правильно, говорит: сама форма работает. Ошибка скорее в логике хранения/подстановки меток, кэше страницы или в том, что пользователь отправляет форму не на той странице, куда пришёл из рекламы.

Нормальная схема такая:

  1. При первом заходе сохранить UTM-метки в cookie или localStorage.
  2. Перед отправкой формы подставить сохранённые значения в скрытые поля.
  3. Не перезаписывать first-touch источник пустыми значениями.
  4. Отдельно хранить landing page и текущую страницу отправки.

Пример на JavaScript:

(function () {
    const params = new URLSearchParams(window.location.search);
    const keys = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'];
 
    keys.forEach(function (key) {
        const value = params.get(key);
 
        if (value && !localStorage.getItem(key)) {
            localStorage.setItem(key, value);
        }
    });
 
    document.addEventListener('DOMContentLoaded', function () {
        keys.forEach(function (key) {
            document.querySelectorAll('input[name="' + key + '"]').forEach(function (input) {
                input.value = localStorage.getItem(key) || '';
            });
        });
    });
})();

(function () { const params = new URLSearchParams(window.location.search); const keys = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content']; keys.forEach(function (key) { const value = params.get(key); if (value && !localStorage.getItem(key)) { localStorage.setItem(key, value); } }); document.addEventListener('DOMContentLoaded', function () { keys.forEach(function (key) { document.querySelectorAll('input[name="' + key + '"]').forEach(function (input) { input.value = localStorage.getItem(key) || ''; }); }); }); })();

В CF7 скрытые поля лучше делать как hidden:

[hidden utm_source]
[hidden utm_medium]
[hidden utm_campaign]
[hidden utm_term]
[hidden utm_content]

[hidden utm_source] [hidden utm_medium] [hidden utm_campaign] [hidden utm_term] [hidden utm_content]

Проверьте ещё два момента: не кэшируется ли HTML формы вместе со старыми значениями и нет ли на сайте другого скрипта коллтрекинга/аналитики, который перезаписывает UTM. Если source иногда становится google при URL с facebook, где-то хранится или подмешивается прежняя метка.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно