Установка целей - сразу для Метрики и Analytics универсальный и простой скрипт целей для Яндекс Метрика и Google Analytics
Заказать услугу: ""
Содержание с переходом
- SEND – любая отправка данных через форму, конверсионная цель.
- TIME – человек активно провел 40 секунд на сайте, цель для ретаргетинга и измерения качества трафика.
Добавляем цели
Цель SEND вешается каждые 5 секунд на формы заявок в которых присутствует тег FORM, такая частота необходима для таких случаев, когда форма генерируется автоматически. Например: всплывающие окна обратных звонков или онлайн-чат. Но не будет работать, если на форме отправки данных отсутствует тег FORM или/и данные формы отправляются методом JavaSctript.Цель TIME срабатывает после 40 секунд (это значение можно поменять) активного посещения, то есть счетчик начнет срабатывать после того, как человек выполнил клик или прокрутку на сайте и отключается, если человек ушел со страницы и продолжает отчет, когда, не закрывая вкладу вернулся к вам и продолжает изучать вашу страницу. Можно сказать, эта цель имитирует «отказ», если она не была достигнута.
Установка скрипта на цели TIME и SEND
Итого, установка скрипта, добавляет следующие цели события в Яндекс.Метрике:SENDall – составная цель в Яндекс.Метрике в виде воронки в один шаг, объединяет все конверсионные формы в цель SEND + внешние цели от сервисов сбора контактных данных, таких как: онлайн-чат, заказ звонка, ловец лидов. В итоге фиксируется как 1 конверсия со всех событий.
SEND – срабатывает, когда клиент отправляет контактную информацию, обычно через встроенные формы на сайте. Может срабатывать на посещение целевых страниц означающих заявку, перехватывает конверсионные цели с внешних сервисов
GOOD – цель отражает полезное действие на сайте, любое срабатывание из целей FORM, SEND, CLICK_TEL, CLICK_EMAIL, CLICK_MES, CLICK_MAP, CONTACT, PAY, COPY_EMAIL, COPY_TEL.
TIME – срабатывает после 40 секунд (опционально) активного просмотра текущей страницы, где учитывая активность браузера, прокрутка страницы, выделение, клики
FORM – человек начал заполнять конверсионную форму перед достижением цели SEND
SPAM – цель срабатывает, когда SEND был оставлен быстрее TIME
NOSPAM – цель срабатывает, когда SEND был оставлен после цели TIME
BOT – вероятно робот
NOBOT – вероятно не робот
VPN – возможно используют VPN или слабую сеть
NOVPN – возможно не использует VPN или быстрая сеть
ERROR – цель срабатывает при посещении битой страницы 404 Not Found / Ресурс не найден
CLICK_TEL – клик по ссылке с номером телефона
CLICK_EMAIL – клик по ссылке с email адресом
CLICK_MES – клик по мессенджерам
CLICK_SOC – клик по социальным ссылкам
CLICK_MAP – клик с переходом на карту
CLICK_FILE – клик на скачивание файла по прямой ссылке
CLICK_PRINT – клик по кнопке на печать
HOVER_MES – наведение курсора по мессенджерам
HOVER_TEL – наведение курсора по номеру телефона
HOVER_EMAIL – наведение курсора на емейл
HOVER_FORM – наведение курсора на форму заявки
COPY – копирование любого текста на сайте
COPY_TEL – при копировании попал номер телефона
COPY_EMAIL – при копировании попал емейл адрес
Воронка SCROLL в виде следующих шагов:
SCROLL25 – прокрутка от 25% страницы сайта
SCROLL50 – прокрутка от 50% страницы сайта
SCROLL75 – прокрутка от 75% страницы сайта
SCROLL100 – прокрутка 100% страницы сайта
Воронка PAGE в виде следующих шагов:
PAGE2 – просмотр 2 страниц
PAGE3 – просмотр 3 страниц
PAGE4 – просмотр 4 страниц
PAGE5 – просмотр 5 страниц
PAGE6 – просмотр 6 страниц
Воронка SEC в виде следующих шагов:
SEC5 – просмотр сайта 5 секунд
SEC15 – просмотр сайта 15 секунд
SEC30 – просмотр сайта 30 секунд
SEC60 – просмотр сайта 60 секунд
SEC120 – просмотр сайта 120 секунд
Количество дней с последнего визита, не подходит для использования в воронке!
Начинает работать с даты установки скрипта, а не счетчика.
DAY_0 – прошло 30 минут и менее 24 часов
DAY_1 – прошел 1 день и менее 2 дней
DAY_2-3 – прошло 2 дня и менее 3 дней
DAY_4-7 – прошло 3 дня и менее 7 дней
DAY_8-15 – прошло 7 дней и менее 15 дней
DAY_16-31 – прошло 15 дней и менее 31 день
DAY_32-63 – прошло 31 день и менее 63 дней
DAY_64-127 – прошло 63 дня и менее 127 дней
DAY_128-255 – прошло 128 дней и менее 255 дня
Итого 48 целей, которые подходят для любого сайта.
Дополнительные цели, актуальны для интернет-магазинов:
SEARCH – цель срабатывает при поиске по сайту
CONTACT – посещение страницы «Контакты»
CART – посещение страницы «Корзина»
PAY – человек возможно оплатил, вернулся на сайт после платежной системы
Следующие цели требуют ручной настройки под каждый проект
ORDER – посещение страницы «Оформление заказа»
CART_ADD – добавление товара в корзину
LOGIN – человек авторизовался
REG – человек прошел регистрацию
Воронка продаж для интернет-магазинов, по шагам, где нулевой шаг это визит сайта:
1. Добавил в корзину (например CART_ADD )
2. Просмотр корзины (например CART )
3. Оформление заказа (например ORDER )
4. Спасибо за заказ (например SEND )
Цели достижение которых нужно настроить при интеграции с CRM системой
CRM_ADD – заявка добавлена в CRM
CRM_WORK – принято в работу (иногда может передавать стоимость сделки)
CRM_OK – оплаченные (передача стоимости сделки)
CRM_CANCEL – хорошие заявки, но закрылись без оплаты
CRM_SPAM – плохое обращение, не по теме или спам
Рекомендудемые названия для целей:
CALC - взаимодействие с формой калькуляции или онлайн расчета
CHAT - посетитель отправил сообщение в чат
CLICK_CHAT - посетитель открыл или кликнул по чату
CLICK_POPUP - посетитель открыл форму заявки
CLICK_BTN - посетитель нажал на кнопку
HOVER_BTN - посетитель навел на кнопку
Цели автоматически работающие в TurboS
При наличии ВидеоВиджета:
WIDGET_VIDEO_SHOW – загрузился видеовиджет
WIDGET_VIDEO_OPEN – открыли видеовиджет
WIDGET_VIDEO_CLICK – нажали на целевую кнопку видеовиджета
WIDGET_VIDEO_CLOSE – закрыли видеовиджет нажав на крестик
При наличии ЛайкВиджета:
WIDGET_LIKE_SHOW – показался лайквиджет
WIDGET_LIKE_CLOSE – сразу закрыли лайквиджет
WIDGET_LIKE_YES – ответили ДА на лайквиджет
WIDGET_LIKE_NO – ответили НЕТ на лайквиджет
При наличии Квиза:
QUIZ_VIEW – навел курсор на квиз
QUIZ_OPEN – открыли квиз, если был спрятан в кнопку
QUIZ_STEP1 – ответ на 1 вопрос квиза, так и другие вопросы
QUIZ_FORM – увидел форму заявки или навел курсор
QUIZ_SEND – отправили заявку с квиза
Быстрый импорт целей в Google Аналитика 3
Для целей в Fаcebооk дублем срабатывают стандартные события:
CART_ADD=AddToCart
REG=CompleteRegistration
CLICK_TEL=Contact
CLICK_EMAIL=Contact
CLICK_MES=Contact
CLICK_MAP=FindLocation
CONTACT=FindLocation
FORM=InitiateCheckout
SEND=Lead
SEARCH=Search
Добавляем скрипт
Устанавливаем код перед закрывающем тегом </BODY> после установки счетчиков или без счетчиков в GTM с созданием внутри скрипта:<!-- Универсально от SeoUp.su цели TIME и SEND --> <script type="text/javascript"> var ts = new Object(); ts.ymNumber = ""; ts.gaNumber = ""; ts.fbNumber = ""; ts.ymCreate = true; ts.gaCreate = false; ts.fbCreate = false; ts.bAddTagForm = false; ts.fForm = "FORM"; ts.bFormSEND = true; ts.fRequired = "INPUT.tel,INPUT#tel,INPUT.phone,INPUT#phone,INPUT[name='tel'],INPUT[name='phone'],INPUT[type='tel']"; ts.bRequired = true; ts.fBut = ""; ts.bMask = true; ts.fMask = ts.fRequired; ts.sMask = "+9(999)999-99-99"; ts.bDebugEnable = true; ts.bDebugDisplay = false; ts.bDebugAlert = false; ts.secMax = 40; ts.priceTIME = 0; ts.priceSEND = 0; ts.nameSEND = "SEND"; ts.mGOOD = "FORM,SEND,CLICK_TEL,CLICK_EMAIL,CLICK_MES,CLICK_MAP,CONTACT,PAY"; ts.mParam = "yclid,gclid,utm_source,utm_medium,utm_campaign,utm_content,utm_term,_openstat,from,ref"; ts.mCoal = { "form": [{ valueForm: "FORM[action*='login'],FORM#login,FORM.login,FORM.login-form,FORM#loginform,FORM.loginform,FORM.auth,FORM.auth-form,FORM#avtorization-form,FORM.avtorization-form,FORM[name='form_auth'],FORM#auth-page-form", valueInput: "INPUT[type='password']", valueRequired: true, valueBut: "", goal: "LOGIN", sum: 0 }, { valueForm: "FORM[action*='register'],FORM[action*='create-account'],FORM#register,FORM.register,FORM.register-form,FORM.reg,FORM.reg-form,FORM#registraion-page-form,FORM#registraion-page-form", valueInput: "INPUT[type='password']", valueRequired: true, valueBut: "", goal: "REG", sum: 0 } ], "click": [{ value: ".b24-widget-button-social-item,[href*='yelp.com'],[href*='vk.me'],[href*='vk.com'],[href*='vkontakte.ru'],[href*='instagram.com'],[href*='ok.ru'],[href*='facebook.com'],[href*='twitter.com'],[href*='youtube.com'],[href*='rutube.ru'],[href*='telegram.org'],[href*='odnoklassniki.ru'],[href*='plus.google.com'],[href*='my.mail.ru'],[href*='linkedin.com'],[href*='zen.yandex.ru'],[href*='tiktok.com'],[href*='x.com']", goal: "CLICK_SOC", sum: 0 }, { value: "[href^='tg:'],[href^='whatsapp:'],[href^='skype:'],[href*='skype.com'],[href^='viber:'],[href*='whatsapp.com'],[href*='wa.me'],[href*='t.me'],[href*='telegram.me'],[href*='teleg.one'],[href*='tele.click'],[href*='wa.link'],[href*='wa.clck.bar']", goal: "CLICK_MES", sum: 0 }, { value: "[href*='yandex.ru/maps/'],[href*='google.ru/maps/'],[href*='google.com/maps/'],[href*='2gis.ru'],[href*='maps.app.goo.gl']", goal: "CLICK_MAP", sum: 0 }, { value: "[href$='.3gp'],[href$='.7z'],[href$='.aac'],[href$='.apk'],[href$='.avi'],[href$='.csv'],[href$='.db'],[href$='.djvu'],[href$='.dmg'],[href$='.doc'],[href$='.docx'],[href$='.exe'],[href$='.flac'],[href$='.flv'],[href$='.gz'],[href$='.iso'],[href$='.key'],[href$='.midi'],[href$='.mka'],[href$='.mkv'],[href$='.mov'],[href$='.mp3'],[href$='.mp4'],[href$='.mpd'],[href$='.mpeg'],[href$='.mpg'],[href$='.msi'],[href$='.odt'],[href$='.ogg'],[href$='.pdf'],[href$='.pkg'],[href$='.pps'],[href$='.ppt'],[href$='.pptm'],[href$='.pptx'],[href$='.rar'],[href$='.rtf'],[href$='.sql'],[href$='.tar'],[href$='.torrent'],[href$='.txt'],[href$='.vcf'],[href$='.wav'],[href$='.wma'],[href$='.wmf'],[href$='.wmv'],[href$='.xls'],[href$='.xlsm'],[href$='.xlsx'],[href$='.zip']", goal: "CLICK_FILE", sum: 0 }, { value: "[href^='tel:']", goal: "CLICK_TEL", sum: 0 }, { value: "[href^='mailto:']", goal: "CLICK_EMAIL", sum: 0 }, { value: "[href*='window.print']", goal: "CLICK_PRINT", sum: 0 } ], "url": [{ value: /(\?|&)(q|s|search|query|text)=/i, goal: "SEARCH", sum: 0 }, { value: /(contact|kontakt|контакт)/i, goal: "CONTACT", sum: 0 }, { value: /(cart|basket|order)/i, goal: "CART", sum: 0 }, { value: /(\/order\/make\/|\/checkout\/|\/order\/)/i, goal: "ORDER", sum: 0 }, { value: /(order_?id=\d+|ORDER_ID=\d+)/i, goal: "PAY", sum: 0 }, { value: /(thank|order_?id=\d+|tilda\/form\d+\/submitted|checkout\/success|ORDER_ID=\d+)/i, goal: "SEND", sum: ts.priceSEND }, ], "hover": [{ value: "[href^='tg:'],[href^='whatsapp:'],[href^='skype:'],[href*='skype.com'],[href^='viber:'],[href*='whatsapp.com'],[href*='wa.me'],[href*='t.me'],[href*='telegram.me'],[href*='teleg.one'],[href*='tele.click'],[href*='wa.link'],[href*='wa.clck.bar']", goal: "HOVER_MES", sum: 0 }, { value: "[href^='tel:']", goal: "HOVER_TEL", sum: 0 }, { value: "[href^='mailto:']", goal: "HOVER_EMAIL", sum: 0 }, { value: ts.fForm, goal: "HOVER_FORM", sum: 0 }, ], "copy": [{ value: /[ ()\d\-]{7,18}/, goal: "COPY_TEL", sum: 0 }, { value: /[^@\s]+@[^@\s]+\.[^@\s]+/, goal: "COPY_EMAIL", sum: 0 } ], "ref": [{ value: /(allpay\.to|qiwi\.com|paypal\.com|advcash\.com|interkassa\.com|payanyway\.ru|payeer\.com|paykeeper\.ru|perfectmoney\.is|platron\.ru|robokassa\.com|securepayments\.sberbank\.ru|unitpay\.ru|yoomoney\.ru|webmoney\.ru|walletone\.com|tinkoff\.ru)/i, goal: "PAY", sum: 0 },], "time": [{ value: 5, goal: "SEC5", sum: 0 }, { value: 15, goal: "SEC15", sum: 0 }, { value: 30, goal: "SEC30", sum: 0 }, { value: 60, goal: "SEC60", sum: 0 }, { value: 120, goal: "SEC120", sum: 0 } ], "redirect_ym": [{ value: "UNIQUE_LEAD,Jivo_Offline_message_sent,Jivo_In-chat_email_form_submitted,Jivo_User_gave_contacts_during_chat,Jivo_Callback_requested,RedHelper.Message_sent,RedConnect.callOrdered,CHAT_OFFLINE_MESSAGE,CHAT_VISITOR_INTRODUCED,Chatra_Pre-chat_form_submitted,LEADBACK_CALL,LEADBACK_CHAT_LEAD,LEADBACK_CHAT_OFFLINE_LEAD,MeTalk_Offline_message_sent,MeTalk_Form_submited,MeTalk_User_gave_contacts_before_chat,MeTalk_User_gave_contacts_during_chat,Callbackhunter_CALL,Callbackhunter_CALL_MOBILE,marquiz-finish,mch_callback_created,mch_leadgen_created,mch_chat_propose,widget_callback_created,widget_leadgen_created", goal: "SEND", sum: ts.priceSEND },], }; var cVersion = "2025-03-14"; var sNoClass = "sgoal"; var bfindForm = true; var arrGOOD = ts.mGOOD.split(","); var arrParam = ts.mParam.split(","); var bGOAL = { FORM: false, GOOD: false, COPY: false, SCROLL25: false, SCROLL50: false, SCROLL75: false, SCROLL100: false, HOVER_MES: false, HOVER_TEL: false, HOVER_EMAIL: false, HOVER_FORM: false, }; var secCur = 0; var secLP = 0; var lenDL = 0; if (!ts.nameSEND) { ts.nameSEND = "SEND"; } if (ts.ymCreate && ts.ymNumber != "") { (function (m, e, t, r, i, k, a) { m[i] = m[i] || function () { (m[i].a = m[i].a || []).push(arguments); }; m[i].l = 1 * new Date(); (k = e.createElement(t)), (a = e.getElementsByTagName(t)[0]), (k.defer = 1), (k.src = r), a.parentNode.insertBefore(k, a); })(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); ym(ts.ymNumber, "init", { clickmap: true, trackLinks: true, accurateTrackBounce: true, webvisor: true, trackHash: true, ecommerce: "dataLayer", }); } if (ts.gaCreate && ts.gaNumber != "") { var scGA1 = document.createElement("script"); scGA1.setAttribute("type", "text/javascript"); scGA1.setAttribute( "src", "https://www.googletagmanager.com/gtag/js?id=" + ts.gaNumber ); scGA1.setAttribute("defer", ""); document.head.appendChild(scGA1); var scGA2 = document.createElement("script"); scGA2.setAttribute("type", "text/javascript"); scGA2.setAttribute("defer", ""); scGA2.innerHTML = "window.dataLayer = window.dataLayer || []; window.gtag = function() { dataLayer.push(arguments); }; window.gtag('js', new Date()); window.gtag('config', '" + ts.gaNumber + "');"; document.head.appendChild(scGA2); } if (ts.fbCreate && ts.fbNumber != "") { !(function (f, b, e, v, n, t, s) { if (f.fbq) return; n = f.fbq = function () { n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments); }; if (!f._fbq) f._fbq = n; n.push = n; n.loaded = !0; n.version = "2.0"; n.queue = []; t = b.createElement(e); t.async = !0; t.src = v; s = b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t, s); })( window, document, "script", "https://connect.facebook.net/en_US/fbevents.js" ); fbq("init", ts.fbNumber); fbq("track", "PageView"); } if (ts.bMask) { var scMI = document.createElement("script"); scMI.setAttribute( "src", "https://cdn.jsdelivr.net/npm/inputmask/dist/inputmask.min.js" ); scMI.setAttribute("type", "text/javascript"); scMI.setAttribute("defer", ""); document.head.appendChild(scMI); } window.cookie = { set: function (key, value, expires, path, domain, secure) { var sCookie = key + "=" + escape(value) + "; "; if (expires !== undefined) { var date = new Date(); date.setTime(date.getTime() + expires * 93600000); sCookie += "expires=" + date.toGMTString() + "; "; } sCookie += path === undefined ? "path=/;" : "path=" + path + "; "; sCookie += domain === undefined ? "" : "domain=" + domain + "; "; sCookie += secure === true ? "secure; " : ""; document.cookie = sCookie; }, get: function (sKey) { var sValue = ""; var sKeyEq = sKey + "="; var aCookies = document.cookie.split(";"); for ( var iCounter = 0, iCookieLength = aCookies.length; iCounter < iCookieLength; iCounter++ ) { while (aCookies[iCounter].charAt(0) === " ") { aCookies[iCounter] = aCookies[iCounter].substring(1); } if (aCookies[iCounter].indexOf(sKeyEq) === 0) { sValue = aCookies[iCounter].substring(sKeyEq.length); } } return unescape(sValue); }, remove: function (key) { cookie.set(key, "", -1); }, clear: function () { var aCookies = document.cookie.split(";"); for ( var iCounter = 0, iCookieLength = aCookies.length; iCounter < iCookieLength; iCounter++ ) { while (aCookies[iCounter].charAt(0) === " ") { aCookies[iCounter] = aCookies[iCounter].substring(1); } var iIndex = aCookies[iCounter].indexOf("=", 1); if (iIndex > 0) { cookie.set(aCookies[iCounter].substring(0, iIndex), "", -1); } } }, isEnabled: function () { cookie.set("test_cookie", "test"); var val = cookie.get("test_cookie") === "test" ? true : false; cookie.remove("test_cookie"); return val; }, }; function consoleAlert(text, aler) { if (ts.bDebugDisplay) { console.log("SEOUP_GOAL: " + text); if (aler && bDebugAlert) { alert(text); } } return true; } function getParameterByName(name) { var name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); var regex = new RegExp("[\\?&]" + name + "=([^]*)"); var results = regex.exec(location.search); return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); } function inRange(x, min, max) { return (x - min) * (x - max) <= 0; } function setCookieUtm() { loc = {}; for (index = 0; index < arrParam.length; index++) { loc[arrParam[index]] = getParameterByName(arrParam[index]); } cook = {}; for (index = 0; index < arrParam.length; index++) { cook[arrParam[index]] = cookie.get(arrParam[index]); } sumLoc = ""; for (index = 0; index < arrParam.length; index++) { sumLoc = sumLoc + loc[arrParam[index]]; } if (loc != cook && sumLoc != "") { for (index = 0; index < arrParam.length; index++) { cookie.set(arrParam[index], loc[arrParam[index]], 730); } } if (ts.ymNumber != "") { yaClientID = getYclid(); var yaClientIDcok = cookie.get("y_clid"); if (yaClientIDcok != yaClientID) { cookie.set("y_clid", yaClientID, 730); } } if (ts.gaNumber != "") { gaClientID = getGclid(); var gaClientIDcok = cookie.get("g_clid"); if (gaClientIDcok != gaClientID) { cookie.set("g_clid", gaClientID, 730); } } lastVisit = cookie.get("SU_lastVisit"); if (lastVisit == "") { cookie.set("SU_lastVisit", Math.floor(Date.now() / 1000), 730); } else { currentVisit = Math.floor(Date.now() / 1000); cookie.set("SU_lastVisit", currentVisit, 730); onetime = Math.floor((currentVisit - lastVisit) / 60); if (inRange(onetime, 1, 1440)) { eventGoal("DAY_0", 0); } else if (inRange(onetime, 1440, 1440 * 2)) { eventGoal("DAY_1", 0); } else if (inRange(onetime, 1440 * 2, 1440 * 3)) { eventGoal("DAY_2-3", 0); } else if (inRange(onetime, 1440 * 3, 1440 * 7)) { eventGoal("DAY_4-7", 0); } else if (inRange(onetime, 1440 * 7, 1440 * 15)) { eventGoal("DAY_8-15", 0); } else if (inRange(onetime, 1440 * 15, 1440 * 31)) { eventGoal("DAY_16-31", 0); } else if (inRange(onetime, 1440 * 31, 1440 * 63)) { eventGoal("DAY_32-63", 0); } else if (inRange(onetime, 1440 * 63, 1440 * 127)) { eventGoal("DAY_64-127", 0); } else if (inRange(onetime, 1440 * 127, 1440 * 255)) { eventGoal("DAY_128-255", 0); } } } function setFormUtm() { var forms = document.querySelectorAll(ts.fForm); forms.forEach(function (form) { arrParam.forEach(function (param) { var paramValue = cookie.get(param); if (paramValue !== "") { var input = document.createElement("input"); input.type = "hidden"; input.name = param; input.value = paramValue; form.appendChild(input); } }); if (ts.ymNumber !== "") { var ymInput = document.createElement("input"); ymInput.type = "hidden"; ymInput.name = "y_clid"; ymInput.value = cookie.get("y_clid"); form.appendChild(ymInput); } if (ts.gaNumber !== "") { var gaInput = document.createElement("input"); gaInput.type = "hidden"; gaInput.name = "g_clid"; gaInput.value = cookie.get("g_clid"); form.appendChild(gaInput); } }); } function getYclid() { if ( typeof window["yaCounter" + ts.ymNumber] !== "undefined" && typeof window["yaCounter" + ts.ymNumber].getClientID !== "undefined" ) { var yaClientID = window["yaCounter" + ts.ymNumber].getClientID(); return yaClientID; } else { return cookie.get("_ym_uid"); } return; } function getGclid() { var match = document.cookie.match("(?:^|;)\\s*_ga=([^;]*)"); var raw = match ? decodeURIComponent(match[1]) : null; if (raw) { match = raw.match(/(\d+\.\d+)$/); } var gacid = match ? match[1] : null; return gacid; } function eventGoal(eg, ec) { for (key in bGOAL) { if (key === eg) { if (!bGOAL[eg]) { bGOAL[eg] = true; break; } else { return true; } } } if (eg == ts.nameSEND) { if (secCur < ts.secMax) { consoleAlert(ts.nameSEND + " reached in " + secCur + " sec.", false); eventGoal("SPAM", 0); } else { eventGoal("NOSPAM", 0); } } var ale = false; if (ts.ymNumber !== "") { try { ym(ts.ymNumber, "reachGoal", eg); consoleAlert(eg + " event for YM", ale); } catch (e) { consoleAlert("ERROR! Sending " + eg + " for YM via ym() " + e, ale); } } if (ts.gaNumber !== "") { try { if (ts.gaNumber.indexOf("UA-") !== -1) { window.gtag("event", "event_name", { event_category: "SEOUP", event_action: eg, }); } else { window.gtag("event", eg); } consoleAlert(eg + " event for GA", ale); } catch (e) { consoleAlert("ERROR! Sending " + eg + " for GA via gtag() " + e, ale); try { window.ga("send", "event", "SEOUP", eg); consoleAlert(eg + " event for GA", ale); } catch (e) { consoleAlert("ERROR! Sending " + eg + " for GA via ga() " + e, ale); } } } if (ts.fbNumber !== "") { try { fbq("trackCustom", eg); consoleAlert(eg + " event for FB", ale); if (eg == "CART_ADD") fbq("track", "AddToCart"); if (eg == "REG") fbq("track", "CompleteRegistration"); if (eg == "CLICK_TEL") fbq("track", "Contact"); if (eg == "CLICK_EMAIL") fbq("track", "Contact"); if (eg == "CLICK_MES") fbq("track", "Contact"); if (eg == "CLICK_MAP") fbq("track", "FindLocation"); if (eg == "CONTACT") fbq("track", "FindLocation"); if (eg == "FORM") fbq("track", "InitiateCheckout"); if (eg == ts.nameSEND) fbq("track", "Lead"); if (eg == "SEARCH") fbq("track", "Search"); } catch (e) { consoleAlert("ERROR! Sending " + eg + " for FB via fbq() " + e, ale); } } if (ec > 0) { window.dataLayer.push({ ecommerce: { currencyCode: "RUB", purchase: { actionField: { id: "auto", }, products: [ { id: 1, name: eg, price: ec, category: "SEOUP/" + eg, }, ], }, }, }); consoleAlert("COST event " + eg + "=" + ec, false); } if (!bGOAL["GOOD"]) { if (arrGOOD.includes(eg)) { eventGoal("GOOD", 0); } } return true; } function parseURLget(g) { var regexp = new RegExp(g + "=([^&]+)", "i"); var GetValue = ""; if (!!regexp.exec(document.location.search)) GetValue = regexp.exec(document.location.search)[1]; return GetValue; } function formCheck(form, input, eg, ec) { var bOk = true; if (input !== "") { var fInput = form.querySelectorAll(input); consoleAlert("Found " + fInput.length + " input elements", false); for (var i = 0; i < fInput.length; i++) { if (fInput[i].value.trim() === "") { bOk = false; break; } } } if (bOk) { eventGoal(eg, ec); } else { consoleAlert(ts.nameSEND+" failed, there are empty INPUT elements", true); } return true; } function formEventClear() { if (!bGOAL["FORM"]) { if (ts.fForm && typeof ts.fForm === "string" && ts.fForm.trim() !== "") { document.querySelectorAll(ts.fForm).forEach(function (form) { form.querySelectorAll("input, select, textarea").forEach(function (field) { field.removeEventListener("input", handleFormChange); field.addEventListener("input", handleFormChange); }); }); } } if (ts.bFormSEND) { if (ts.fBut !== "") { document.querySelectorAll(ts.fBut).forEach(function (button) { button.removeEventListener("click", handleButtonClick); button.addEventListener("click", handleButtonClick); }); } document.querySelectorAll(ts.fForm).forEach(function (form) { form.removeEventListener("submit", handleFormSubmit); form.addEventListener("submit", handleFormSubmit); }); } if (typeof ts.mCoal.form !== "undefined") { ts.mCoal.form.forEach(function (item) { if (item.valueBut !== "") { document.querySelectorAll(item.valueBut).forEach(function (button) { button.removeEventListener("click", handleCoalButtonClick); button.addEventListener("click", handleCoalButtonClick); }); } document.querySelectorAll(item.valueForm).forEach(function (form) { form.removeEventListener("submit", handleCoalFormSubmit); form.addEventListener("submit", handleCoalFormSubmit); }); }); } return true; } function handleFormChange() { eventGoal("FORM", 0); } function handleButtonClick(event) { formCheck(event.target.closest(ts.fForm), ts.fRequired, ts.nameSEND, ts.priceSEND); } function handleFormSubmit(event) { event.preventDefault(); formCheck(event.target, ts.fRequired, ts.nameSEND, ts.priceSEND); } function handleCoalButtonClick(event) { var button = event.target; var item = null; ts.mCoal.form.forEach(function (el) { if (el.valueBut === button) { item = el; } }); if (item) { formCheck( button.closest(item.valueForm), item.valueInput, item.goal, item.sum ); } } function handleCoalFormSubmit(event) { event.preventDefault(); var form = event.target; var item = null; ts.mCoal.form.forEach(function (el) { if (el.valueForm === form) { item = el; } }); if (item) { formCheck(form, item.valueInput, item.goal, item.sum); } } function formEvent(fe) { if (bfindForm) { ts.mCoal.click.forEach(function (item) { var elements = document.querySelectorAll(item.value); for (var i = 0; i < elements.length; i++) { if (!elements[i].classList.contains(sNoClass + '_click')) { elements[i].classList.add(sNoClass + "_click"); elements[i].addEventListener("click", makeHandler(item)); if (ts.bDebugDisplay && ts.bDebugEnable) { elements[i].style.border = "2px dashed #f0d"; elements[i].style.margin = "-2px"; elements[i].setAttribute("goal", item.goal); } } } }); ts.mCoal.hover.forEach(function (item) { var elements = document.querySelectorAll(item.value); for (var i = 0; i < elements.length; i++) { if (!elements[i].classList.contains(sNoClass + '_hover')) { elements[i].classList.add(sNoClass + "_hover"); elements[i].addEventListener("mouseenter", makeHandler(item)); elements[i].addEventListener("mouseleave", function () { }); } } }); } if (ts.fForm) { var bClear = false; if (fe) { var forms = document.querySelectorAll(ts.fForm); for (var i = 0; i < forms.length; i++) { forms[i].classList.remove(sNoClass); } bClear = true; } var firstForm = document.querySelector(ts.fForm); if (firstForm && !firstForm.classList.contains(sNoClass)) { var allForms = document.querySelectorAll(ts.fForm); for (var i = 0; i < allForms.length; i++) { allForms[i].classList.add(sNoClass); } if (ts.bMask) { if (typeof Inputmask !== "undefined") { var inputs = document.querySelectorAll(ts.fMask); for (var i = 0; i < inputs.length; i++) { var im = new Inputmask(ts.sMask); im.mask(inputs[i]); } } else { consoleAlert("ERROR! Mask library not loaded", false); } } if (ts.bAddTagForm) { setCookieUtm(); setFormUtm(); } var requiredInputs = document.querySelectorAll(ts.fRequired); for (var i = 0; i < requiredInputs.length; i++) { requiredInputs[i].classList.add("ym-record-keys"); } if (ts.bDebugDisplay && ts.bDebugEnable) { var debugForms = document.querySelectorAll(ts.fForm); for (var i = 0; i < debugForms.length; i++) { debugForms[i].style.border = "2px dashed #f00"; debugForms[i].style.margin = "-2px"; debugForms[i].setAttribute("goal", ts.nameSEND); } for (var i = 0; i < requiredInputs.length; i++) { requiredInputs[i].style.border = "2px dashed #9f0"; } if (ts.fBut && ts.fBut.trim()) { var buttons = document.querySelectorAll(ts.fBut); for (var i = 0; i < buttons.length; i++) { buttons[i].style.border = "2px dashed #03f"; } } consoleAlert("Found new