Contact form 7 — почему неправильно передаются utm source метки?
Нужно передавать в письмо 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
Когда я симулирую в строке браузера гет-параметры, то они верно передаются в письмо на почту.
Где ошибаюсь?
Дополнительно:
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
В Contact Form 7 поле
default:getберёт значение из GET-параметра текущей страницы в момент вывода формы. Если пользователь пришёл сutm_source=facebook, потом перешёл на другую страницу или форма открылась в попапе уже без UTM в URL, значение может быть пустым или старым. А если на сайте есть скрипт, который сохраняет UTM в cookie/localStorage, он может подставлять предыдущий источник, напримерgoogle.То, что при ручной симуляции URL всё передаётся правильно, говорит: сама форма работает. Ошибка скорее в логике хранения/подстановки меток, кэше страницы или в том, что пользователь отправляет форму не на той странице, куда пришёл из рекламы.
Нормальная схема такая:
Пример на 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]
Проверьте ещё два момента: не кэшируется ли HTML формы вместе со старыми значениями и нет ли на сайте другого скрипта коллтрекинга/аналитики, который перезаписывает UTM. Если source иногда становится
googleпри URL с facebook, где-то хранится или подмешивается прежняя метка.