Настройка электронной торговли (ecommerce) практически всегда требует персонального подхода к сайту, а также разработчика, который всё настроит. Как сделать все самому, без помощи программиста, используя лишь Google Tag Manager и несколько готовых скриптов?
Недавно введенная в Яндекс.Директ стратегия «Ручное управление ставками с оптимизацией в сетях» оказалось довольно коварной. Превышение заданной максимальной ставки в РСЯ может достигать 200% — а возможно и выше. В агентстве МОАВ уже столкнулись с этим и нашли решение. Рассказываем, что можно сделать.
Чем грозит конфликт ключевых слов в контекстной рекламе? Вы можете получить гораздо более низкий уровень конверсии, чем ожидалось. Рассказываем, как избавиться от конфликтов — быстро и без ручной работы.
В комментариях к статье «Google Tag Manager вместо Yagla» меня спросили, как реализовать текстовую подмену, если переменная podmena не равна заданному слову, а содержит его. Допустим, если в переменной есть слово «москва», а на сайте должно отобразиться «дешёвые слоны в Москве». Фактически — к…
Создание мультилендингов — с адаптированным текстом под разные рекламные кампании — мечта маркетолога. Вы можете заметно повысить конверсию, подменяя слоган или заголовок на лендинге в соответствии с текстом рекламного объявления. Инструменты для такой настройки есть — например, Yagla. Мы расскажем, как заменить платный сервис Yagla общедоступными…
transactionProducts равняется скобкам, потому что это обозначает в JavaScript будущий список значений. А учитывая, что туда будут динамично вписываться товары из корзины, то нужно написать именно так.
А теперь давайте последовательно заполним данными каждую переменную от простого к сложному.
"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["currency - тут всё просто. Пишем:"],"type":"UL"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Кстати если потребуется иная валюта, то просто впишите её аббревиатуру. Например для евро - EUR, для долларов - USD и т.д. Только не забудьте внести в кавычки как в примере (одинарные или двойные).
"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["transactionId - тут придется создать переменную, которая будет генерировать случайное число. В GTM такая есть:"],"type":"UL"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"9d28e9d9-58c4-3cd2-49ab-a1125872238e","width":1920,"height":943,"size":2300184,"type":"gif","color":"ffffff","hash":"","external_service":[],"duration":0,"isVideo":false,"has_audio":false}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Внедряем полученную переменную в код:
"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"","lang":""}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["transactionTotal - получить сумму товаров тоже несложно."],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Для этого нужно найти элемент на сайте, который выдает нужное значение:
Где в скобках первое значение в кавычках “что заменить”, а второе - “на что заменить”. В данном случае заменен: “ р.” (конец строки после числа) на пустое значение. И на третий раз метод повторили и был убран лишний пробел, в результате получив число.
Результирующую комбинацию записываем в переменную:
"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"","lang":""}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["transactionProducts - заполнение это переменной будет самой сложной и можно сказать главная часть этого руководства."],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Для начала повторим, что нам нужно сделать и в чём проблема.
В эту переменную нужно записать товары, которые были добавлены в корзину. Изначально неизвестно, какие товары будут добавлены в корзину и сколько их будет. Следовательно, элемент “товар” в корзине мы не можем выбрать по селектору, т.к. он непостоянный и динамичный. И в этом вопросе нам поможет немного логики и щепотка программирования.
Мы не можем работать с элементом которого может не быть, но мы можем работать с элементами, которые есть в корзине постоянно. И как бы “вслепую” работать с их дочерними элементами.
Для начала, был найдена таблица, которая содержит все товары. Отличие таблицы от товаров - она статична и всегда будет на странице корзины, вне зависимости от количества товаров в корзине.
Далее, был взять селектор таблицы и найден в консоли. Следующим шагом, был использован метод children, который вывел список всех дочерних элементов - и это все товары.
Затем, с помощью квадратных скобок и введения номера, я мог выбирать любой дочерний элемент из списка. То есть сейчас имеется доступ ко всем товарам корзины и можно без проблем вписать данные каждого товара. Всё что требуется - создать последовательную запись каждого children таблицы.
Объявлена новая переменная list, в которую записан селектор таблицы товаров с методом children. То есть по сути в list хранится список всех товаров. Осталось расшифровать данные, в чём нам поможет цикл for. О нём я подробно рассказывал в статье по контекстному кодингу, потому тут ограничусь краткой вводной.
В цикле for объявляется переменная i, которая принимает значение 0 и каждую итерацию цикла увеличивается на 1, до тех пор, пока длина списка товаров (list.length) больше переменной i. Например сейчас всего три товара в списке и list.length будет равно 3, значит цикл повторится 3 раза с увеличением переменной i на единицу каждый раз в конце прохода цикла.
Который обозначает, что каждый проход цикла, в объявлений список transactionProducts вносится (push) новый элемент, который содержит 4 переменных: name, price, quantity и sku. И пока что каждый элемент принимает значение переменной list[i]. А значит при каждом прохождении цикла будет вносится значение подобным образом: list[0], list[1], list[2] и так пока не законится цикл.
По факту будет запись каждого товара во все переменные. Это близко, но не совсем то, что нужно. Например, нужно найти название товара, а не весь товар. Значит list[i] в переменной name надо уточнить тем, что надо из рассматриваемого товара найти нужный элемент с названием:
Как видно, можно обратится к children текущего children и найти интересующий нас элемент. В данном случае это был 1 элемент, который содержал нужный текст.
Теперь в цикле пополняется список актуальными данными каждого товара. Но как вы могли заметить, остался пустым sku - артикул товара. По той причине, что на сайте этих данных нет, а потом поле осталось пустым. Так же можно поступить и с любым другим полем, если по какой-то причине этих данных нет на сайте.
Это по факту список Google Tag Manager, в котором он записывает и хранит данные произошедших событий. Его можно вызвать в консоли браузера, чтобы посмотреть его записи:
И все эти данные хранятся до тех пор, пока страница не будет перезагружена. Что как раз и нужно, для того чтобы сохранить данные о товарах и отправить их сразу при отправке формы заказа.
Был добавлен метод dataLayer.push в который внесено пользовательское событие (event) - ecommerce. Вызов пользовательского события пригодится нам в будущем.
В результате в datalayer будут нужные для e-commerce значения и будет произведен вызов пользовательского события. Давайте протестим работу, добавив к тегу событие на клик кнопки оформить заказ:
Остался последний шаг - отправить данные в Google Analytics.
"}},{"type":"header","cover":false,"hidden":false,"anchor":"3","data":{"style":"h2","text":"Завершение цепи событий - отправка транзакции в Google Analytics"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Был создан тег на отправку события формы заказа с проверкой, тег на сбор данных e-commerce и осталось сделать тег на отправку данных и связать все эти три тега вместе.
Был создан тег в виде стандартного шаблона Google Analytics, где типом отслеживания была указана “транзакция”, а в качестве триггера было создано пользовательское событие ecommerce - то которое вызывает datalayer. Следовательно отправка данных будет сразу после того, как в datalayer попадут данные e-commerce.
В теге отправки формы был настроен порядок активации тегов, где был указан тег для e-commerce. То есть тег e-commerce будет вызван сразу после отправки формы и не будет вызван, если произошла какая-то ошибка (неправильное заполнение например).
В результате выстраивается конечная цепочка тегов:
"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Тег отправки формы заказа","Тег заполнения данных для e-commerce","Тег отправки данных e-commerce в Google Analytics"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Вот и всё! Результат можно проверить либо в отчетах Google Analytics по электронной торговле, либо с помощью расширения браузера - GA Debug:
Если еще нет такого расширения - рекомендую поставить. Удобно для отслеживания отправки событий в Google Analytics.
"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Это конечно круто, но как это применить к моему сайту?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Весь перечисленный выше алгоритм и примененные шаблоны кода можно применить к большинству сайтов, где есть корзина в табличном виде (это почти все интернет-магазины). Однако алгоритм по минимуму, но придется подстраивать под ситуацию. Например естественно селекторы будут уникальны для разных сайтов, а набор children, чтобы найти name или price может быть другим.
Тут сразу стало понятно, что в списке товаров самый первый элемент и последний были лишними, потому условие в цикле перечисления товаров был другим. Было исходно так:
То есть цикл начинался не с первого элемента, а со следующего (i = 1, а не 0) и последний элемент не обрабатывался (list.length - 1, длина на 1 меньше).
Руководство вышло довольно длинным и спасибо тем смелым людям, которые осилили его до конца. Надеюсь, описанное поможет лучше понять работу функционала GTM и e-commerce в частности.
Я планировал продолжить цикл статей по GTM. Следующей темой возможно станет разбор расширенного e-commerce - как считаете, актуально? И если у вас есть тема для разбора по GTM, пишите в комментариях, буду рад.
Впрочем, иногда текстовый формат сложен - проще один раз увидеть (и сделать самому), чем 100 раз прочитать. Мастер классы по GTM и аналитике, которые я веду в рамках “Весь контекст за 4 месяца” занимают около 5-6 часов демонстрации экрана - в таком формате контент воспринимается существенно проще, даже если у вас совсем немного опыта.
Если моя статья показалась вам не столь сложной, вы можете проверить свои знания о контекстной рекламе при помощи вот такого теста из 15 вопросов, в составлении которого я также принял участие.
"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":15,"favorites":194,"reposts":2,"views":29,"hits":11000,"reads":null,"online":0},"dateFavorite":0,"hitsCount":11000,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":true,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/marketing/139679-ecommerce-svoimi-rukami-bez-programmista-poshagovaya-instrukciya","author":{"id":139172,"name":"Александр Зарайский","nickname":null,"description":null,"uri":"","avatar":{"type":"image","data":{"uuid":"14d51104-4f64-5533-aed2-c44b563668c0","width":301,"height":344,"size":39274,"type":"jpg","color":"8e8381","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQEAeAB4AAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAKAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABwUI/8QAJhAAAQMCBQMFAAAAAAAAAAAAAQIDBAURAAYHEiIhMUEIExRRYv/EABUBAQEAAAAAAAAAAAAAAAAAAAME/8QAHhEAAgICAgMAAAAAAAAAAAAAAQIEEQADIVEigcH/2gAMAwEAAhEDEQA/AFDUunZUrebHdT4MpcajtJmSokdtlL4dKnFNtvISS2faLgB6C5B7C4xlOVpJouZThqmqFIhVPcflxxSJChHevzRcAg7VXHQ26YR5klx/12sxFuLXETmCKAypRLYC2l7+Pbl5+/OIeZ9NsurzJUFKoFFKjJcJJgtXPM/nAz9bxNlq1lux7+5M+4TSsUgqEW/EkE8leaI6z//Z"}},"cover":null,"achievements":[{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":5282691,"userId":139172,"count":0,"shareImage":"https://api.vc.ru/achievements/share/5282691"},{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 23 июля 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":1658604,"userId":139172,"count":0,"shareImage":"https://api.vc.ru/achievements/share/1658604"},{"title":"5 лет на vc.ru","code":"registration_5_years","description":"Провёл 5 лет вместе с vc.ru. Получена 23 июля 2025.","previewUuid":"a9140d54-73b8-5f40-afa8-449fbaafd42b","formats":{"glb":"https://static.vc.ru/achievements/whale.glb","usdz":"https://static.vc.ru/achievements/whale.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.533203125,"textY":0.658203125,"logoX":0.533203125,"logoY":0.77734375,"logoXNoText":0.4375,"logoYNoText":0.66015625},"id":431896,"userId":139172,"count":0,"shareImage":"https://api.vc.ru/achievements/share/431896"}],"lastModificationDate":1765002426,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":199113,"name":"Маркетинг","description":"Рекламные кейсы из России и других стран, советы по продвижению, маркетинг и digital.","uri":"/marketing","avatar":{"type":"image","data":{"uuid":"d66009fe-9bf0-52da-bdbf-4c758eba39e7","width":2400,"height":2400,"size":841299,"type":"jpg","color":"f97373","hash":"0c1cf06cf0d010","external_service":[]}},"cover":{"type":"image","data":{"uuid":"5488a646-f32d-57a6-a31f-d290afc4388a","width":960,"height":280,"size":177,"type":"png","color":"fc7c7c","hash":"","external_service":[]}},"lastModificationDate":1661337194,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":false,"isDisabledAd":false,"nickname":"marketing","isUnsubscribable":true,"badge":null,"badgeId":null,"isDonationsEnabled":false,"isOnline":false,"isPlus":false,"isUnverifiedBlogForCompanyWithoutPro":false,"isVerified":false,"isRemovedByUserRequest":false,"isFrozen":false,"isPro":false,"type":2,"subtype":"community"},"reactions":{"counters":[{"id":1,"count":19}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}},{"type":"entry","data":{"id":65217,"customUri":null,"subsiteId":139172,"title":"Как не переплачивать за РСЯ: укрощаем стратегию «Оптимизация в сетях»","date":1556008383,"dateModified":1556008383,"blocks":[{"type":"text","cover":true,"hidden":false,"anchor":"","data":{"text":"
Недавно введенная в Яндекс.Директ стратегия «Ручное управление ставками с оптимизацией в сетях» оказалось довольно коварной. Превышение заданной максимальной ставки в РСЯ может достигать 200% — а возможно и выше. В агентстве МОАВ уже столкнулись с этим и нашли решение. Рассказываем, что можно сделать.
Привет, я Александр Зарайский, один из спикеров курса “Вся контекстная реклама за 4 месяца”. Сегодня я расскажу о «наглых» ставках в РСЯ и как с этим бороться - РСЯ как раз является одной из моих “любимых” тем.
"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Когда все началось: ручное управление с оптимизацией"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Уже чуть больше полугода, а точнее с 14 сентября 2018 года Яндекс.Директ ввел стратегию «Ручное управление ставками с оптимизацией в сетях». Если кратко, то теперь Яндекс может автоматически понижать или повышать ставку, заданную вручную, в зависимости от прогноза вероятности конверсии. Конечно, и до этого нововведения Яндекс утверждал, что ставки в РСЯ могут автоматически понижаться, если прогнозируется низкая вероятность целевого действия на сайте. Но теперь они могут еще и повышаться.
Автоматическое повышение ставки свыше заданной максимальной при самостоятельном анализе на проектах, которые я вел как PPС-специалист, достигло 200%.
"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"9c369beb-2ddb-09c9-2d1a-11d06bd330a2","width":550,"height":305,"size":62739,"type":"jpg","color":"35322d","hash":"","external_service":[]}}}]}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Из нашего опыта"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Один из множества наших клиентов продает туры и услуги отдыха за границей. РСЯ в такой области делать легко и приятно. Все ведь хотят отдыхать. И ставка небольшая, и профит хороший.
После нововведений Яндекса какое-то время также не было никаких изменений. Но в середине ноября ситуация резко изменилась — средняя ставка неумолимо поплыла вверх.
Мы занялись выяснением причин и поиском решений. Общались с поддержкой Яндекса (именно тогда мы узнали, что они сами не могут сказать, где предел роста ставок). Методом проб и ошибок было найдено решение — как избежать перерасхода.
"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Оптимизация в сетях: отключить нельзя оставить"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Как выяснилось, основная проблема кроется в алгоритме оптимизации в сетях. Отключить ее нельзя, поэтому работаем с тем что есть.
Разберемся, как работает оптимизация. При оптимизации оценивается каждый пользователь — его посещения, предпочтения и прочая, — и оценивается вероятность конверсии на основании данных сайта. Если клиент перспективный, и по истории конверсий клиент с именно такой моделью поведения часто совершал заказы, то ставка будет повышена. Или — в обратном случае — понижена.
Первая мысль, которая пришла после этого, — нужно попросту обнулять статистику ключевых слов (все равно CTR по факту роли не играет) в РСЯ, и оптимизация не будет работать. Но не тут-то было. Оказывается, при отсутствии или недостатке фактической статистики оптимизация берет прогнозируемую статистику и использует её для конечного решения по корректировке ставок. Как понимаете, от этого ситуация может стать еще хуже.
"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Два пути решения проблемы"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Можно сменить стратегию или подправить настройки оптимизации.
Первое — сменить стратегию. Ручное управление ставками с оптимизацией в сетях — это стратегия. А если стратегия нам не нравится, мы имеем право её поменять.
Мне это помогло, как видите. Однако есть несколько нюансов. Во-первых, первые сутки стратегия настраивается, и потому превышение ставок в это время может быть. И если хоть как-то потревожить работу стратегии (остановить РК, изменить ставку в стратегии), всё слетит и придется снова ждать сутки запуска стратегии. Во-вторых, перерасход всё же есть. Небольшой и в разы меньше, чем при ручном управлении, но есть.
В этой настройке можно указать, на какие именно цели нужно ориентироваться оптимизации в сетях. Базово ключевой целью являются вовлеченные сессии. Вместо этого можно указать одну или несколько целей и установить ценность каждой конверсии (не обязательно).
Сказать, насколько стало лучше после этого, сложно, но процент превышения ставки несколько уменьшился.
"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Немного о доступных стратегиях"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Разберем доступные стратегии в РСЯ, чтобы было проще выбрать подходящий вариант.
Ручное управление с оптимизацией в сетях - стратегия, исходя из вышеописанного давно уже не “ручная” и может корректировать ваши ставки. Давайте присмотримся к настройкам этой стратегии.
Видно, что есть настройка только на средний дневной бюджет. В описании стратегии указано, что оптимизация может поднимать и снижать ставку в зависимости от вероятности конверсии. Коротко говоря, о максимальной ставке речи не идет. Только о средней, которую вы можете поставить в ручную. И среднюю ставку, а также средний дневной бюджет это единственное, что вы можете в принципе контролировать в этой стратегии.
Средняя цена клика - данная стратегия тоже не дает излишнего контроля PPC-специалисту. Суть её в том, что вы можете указать среднюю цену за клик в неделю и недельный бюджет.
При постановке такой стратегии, рядом с каждым ключевым словом появляется приоритет. Ключевые слова с “высоким” приоритетом будут чаще показываться и ставка на них может устанавливаться выше. Ключевые слова с “низким” приоритетом соответственно будут менее активны. И “средний” приоритет будет мало подвержен изменениям:
Подобная стратегия была бы хороша опять же в Поисковом размещении. А что в РСЯ? Обычно все ключевые слова в хорошей РСЯ-кампании отвечают ЦА и приоритет везде может быть высоким. А вот максимальной ставки по прежнему нет и стратегия может играться со ставками в течение недели как угодно и стараться соответствовать среднему значению.
Данная стратегия может быть полезна, потому что позволит не только не переплачивать больше максимальной цены за клик, но и поддерживать цену указанной конверсии на уровне. То есть стратегия будет ориентироваться на тех пользователей, которые потенциально могут выполнить указанную конверсию и повышать ставки только для них. Но очевидно, что средняя цена конверсии не сможет быть эффективно подобрана, если не из чего подбирать. Потому данную стратегию не рекомендуется использоваться без имеющейся статистики в аккаунте. То есть аккаунту надо поработать недельку-две, чтобы задумываться о такой стратегии. Кстати, вполне актуальная стратегия для тестирования на Поиске.
Средняя рентабельность инвестиции (ROI) - та же самая идея, как и в стратегии “Средняя цена конверсии”, но за расчет берется ROI, а не цена конверсии. Работает у тех, у кого есть настроенная система ценности целей.
В рамках этой стратегии можно указать максимальную цену за клик, недельный бюджет, а также тип работы. Типов работы два - либо просто максимальное количество кликов, либо клики с ориентацией на конкретную цель, что позволяет ориентироваться на нужных нам пользователей. В дополнение можно также указать приоритет фраз, если это требуется. По сути, данная стратегия может не так хорошо сработать на Поиске, но в РСЯ дала хорошие показатели, не подвела и защитила от переплат.
Задаете сколько хотите кликов за неделю, возможно максимальную цену за клик и вперед. Если не задавать максимальную цену за клик, то будет как кнопочка с названием “Яндекс дай мне трафик”. Оптимизация будет у трафика минимальная, цены могут быть высокие... Зато много. В моей практике, не очень популярная стратегия.
"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Оптимизация — дело хорошее, но… "}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Оптимизация в сетях на самом деле — хорошая и рабочая функция. В некоторых проектах подобная оптимизация даже шла в плюс. Подобная возможность оптимизации, кстати, есть в Google Ads. Но Google Ads не навязывает предложенную оптимизацию, и её всегда можно отключить. А процент возможно превышения регламентирован и строго соблюдается.
Было бы хорошо, если бы Яндекс.Директ также перестал навязывать оптимизацию, потому что далеко не во всех случаях она нужна. Впрочем, подобные сложности - это всегда вопрос “заплаток”, которые мы можем поставить, чтобы избежать “слива” бюджета в пустоту.
А какое ваше мнение об этом нововведении от Яндекса? Как оно повлияло на вас? И как вы справляетесь? Пишите в комментариях.
"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":84,"favorites":72,"reposts":0,"views":41,"hits":21854,"reads":null,"online":0},"dateFavorite":0,"hitsCount":21854,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":true,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":true,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/marketing/65217-kak-ne-pereplachivat-za-rsya-ukroshaem-strategiyu-optimizaciya-v-setyah","author":{"id":139172,"name":"Александр Зарайский","nickname":null,"description":null,"uri":"","avatar":{"type":"image","data":{"uuid":"14d51104-4f64-5533-aed2-c44b563668c0","width":301,"height":344,"size":39274,"type":"jpg","color":"8e8381","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQEAeAB4AAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAKAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABwUI/8QAJhAAAQMCBQMFAAAAAAAAAAAAAQIDBAURAAYHEiIhMUEIExRRYv/EABUBAQEAAAAAAAAAAAAAAAAAAAME/8QAHhEAAgICAgMAAAAAAAAAAAAAAQIEEQADIVEigcH/2gAMAwEAAhEDEQA/AFDUunZUrebHdT4MpcajtJmSokdtlL4dKnFNtvISS2faLgB6C5B7C4xlOVpJouZThqmqFIhVPcflxxSJChHevzRcAg7VXHQ26YR5klx/12sxFuLXETmCKAypRLYC2l7+Pbl5+/OIeZ9NsurzJUFKoFFKjJcJJgtXPM/nAz9bxNlq1lux7+5M+4TSsUgqEW/EkE8leaI6z//Z"}},"cover":null,"achievements":[{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":5282691,"userId":139172,"count":0,"shareImage":"https://api.vc.ru/achievements/share/5282691"},{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 23 июля 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":1658604,"userId":139172,"count":0,"shareImage":"https://api.vc.ru/achievements/share/1658604"},{"title":"5 лет на vc.ru","code":"registration_5_years","description":"Провёл 5 лет вместе с vc.ru. Получена 23 июля 2025.","previewUuid":"a9140d54-73b8-5f40-afa8-449fbaafd42b","formats":{"glb":"https://static.vc.ru/achievements/whale.glb","usdz":"https://static.vc.ru/achievements/whale.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.533203125,"textY":0.658203125,"logoX":0.533203125,"logoY":0.77734375,"logoXNoText":0.4375,"logoYNoText":0.66015625},"id":431896,"userId":139172,"count":0,"shareImage":"https://api.vc.ru/achievements/share/431896"}],"lastModificationDate":1765002426,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":199113,"name":"Маркетинг","description":"Рекламные кейсы из России и других стран, советы по продвижению, маркетинг и digital.","uri":"/marketing","avatar":{"type":"image","data":{"uuid":"d66009fe-9bf0-52da-bdbf-4c758eba39e7","width":2400,"height":2400,"size":841299,"type":"jpg","color":"f97373","hash":"0c1cf06cf0d010","external_service":[]}},"cover":{"type":"image","data":{"uuid":"5488a646-f32d-57a6-a31f-d290afc4388a","width":960,"height":280,"size":177,"type":"png","color":"fc7c7c","hash":"","external_service":[]}},"lastModificationDate":1661337194,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":false,"isDisabledAd":false,"nickname":"marketing","isUnsubscribable":true,"badge":null,"badgeId":null,"isDonationsEnabled":false,"isOnline":false,"isPlus":false,"isUnverifiedBlogForCompanyWithoutPro":false,"isVerified":false,"isRemovedByUserRequest":false,"isFrozen":false,"isPro":false,"type":2,"subtype":"community"},"reactions":{"counters":[{"id":1,"count":23}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}},{"type":"entry","data":{"id":60960,"customUri":null,"subsiteId":139172,"title":"Кросс-минусация в Google Adwords: как не терять конверсию на конфликте ключевых слов","date":1552462402,"dateModified":1552462402,"blocks":[{"type":"text","cover":true,"hidden":false,"anchor":"","data":{"text":"
Чем грозит конфликт ключевых слов в контекстной рекламе? Вы можете получить гораздо более низкий уровень конверсии, чем ожидалось. Рассказываем, как избавиться от конфликтов — быстро и без ручной работы.
Привет, я Александр Зарайский, руководитель обучающего центра контекстного рекламного агентства MOAB. Я расскажу вам о подводных камнях кросс-минусации в Google Adwords, с которыми мне довелось столкнуться, и подскажу как их решить.
Разберем причины возникновения конфликтов на примере. Есть, предположим, две группы с ключевыми словами:
"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Группа 1:","набор посуды","купить набор посуды","набор посуды недорого","Группа 2:","набор посуды rondell","посуда rondell","купить набор посуды rondell"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Группа 1 имеет ссылку на каталог посуды и нейтральное объявление. Группа 2 имеет ссылку на категорию посуды Rondell и объявление соответственно ориентировано на эту серию посуды.
— для ответа на запрос подойдут все ключи группы 1 и все ключи группы 2. Произойдет конфликт ключевых слов и с большой вероятностью предпочтение к показу в аукционе будет отдано наиболее высокочастотному ключевому слову (набор посуды). И объявления покажут для группы 1. В результате — неточный ответ на запрос и снижение процента вероятности конверсии.
"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Почему только Google AdWords?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
В Яндекс.Директ таких проблем практически нет. Есть стандартный инструмент в Директ Коммандере, который может сделать корректировку фраз на пересечение. И в результате пример, приведенный выше, дополнится минус-словами на уровне ключевых слов:
И всё. От пересечений можно избавиться в два клика. Поговаривают, конечно, что в Яндекс.Директ корректировка фраз слишком мягкая и иногда может не полноценно проставлять кросс-минусацию, но это тема для отдельной статьи.
Что же в Google AdWords? Главная причина в том, что минус-слов на уровне ключевых слов просто нет. Минимум — на уровне групп объявлений. Следовательно, пример для Директа уже не актуален. При этом какого либо стандартного инструмента в том же AdWords Editor для кросс-минусации нет.
Конечно же есть разные способы кросс-минусации. Вот основные варианты:
"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Вручную — вооружившись Excel и экспортом РК Google AdWords, можно прописать минус-слова на уровне групп, обеспечивая максимально точную кросс-минусацию. При том, что бытует практика разделять семантику по системе «1 группа — 1 ключ», работа вручную становится крайне трудозатратной по времени.","С помощью кросс-минусации Яндекс.Директ. Один из самых популярных методов. Экспорт РК Директ с готовой кросс-минусацией переделывается под шаблон AdWords и минусацией на уровне ключевых слов и переносится на уровень групп.","С помощью сервисов кросс-минусовки. Есть разные сервисы, типа «Кросс-Минусатор», Kwtools или ру7.ru. Хотя нам бы хотелось иметь сервис, который бы полноценно мог переносить РК из Яндекс.Директ и выполнять кросс-минусацию с учетом разных окончаний. Поэтому мы сделали свой инструмент Bridge.","Ну и наконец, с помощью скрипта Google Analytics. Правда, тот вариант, которыймне удалось найти, требует вписывать кросс-минусацию в сам ключ (примерно так: «ключ слово -минус1 -минус2»). Учитывая, что есть ограничение по длине ключевого слова, это может вызывать дополнительные трудности."],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"И это только начало — проблемы остаются"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Многие описывали, как сделать кросс-минусацию в AdWords. Но в основном ожидается, что группировка будет в формате «1 группа, 1 ключ». Что тоже крайне трудозатратно осуществить. 1000 ключей, 1000 объявлений. Долго. А что же до групп с несколькими ключами? Если мы возьмем кросс-минусацию из какого-либо сервиса или переведем кросс-минусацию Яндекс.Директ на уровень групп, получится следующее:
"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Группа 1: -rondell -недорого -купить ","набор посуды","купить набор посуды","набор посуды недорого","Группа 2:-набор -купить","набор посуды rondell","посуда rondell","купить набор посуды rondell"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Возникает неприятная проблема, связанная с тем, что переминусовка в Яндекс.Директ или какими либо еще способами осуществляется между ВСЕМИ ключевыми словами в РК. Неважно, что ключевые слова в одной группе — перенос кросс-минусации на уровень групп приводит отличную работу к печальным последствиям.
Сама кросс-минусация начинает минусовать и блокировать показы для ключевых слов. Так, в группе 2, например, больше не будет показов, если в запросе пользователя будут слова «набор» и «купить».
Сам Google AdWords нам помогает решить возникшую проблему. Когда будет сделана переминусовка каким-либо сервисом, и у вас появятся минус-слова на уровне групп, которые ранее были на уровне ключевых слов, перейдите в веб-интерфейс AdWords. Практически сразу, когда изменения вступили в силу, AdWords укажет на конфликты ключевых слов.
Google AdWords самостоятельно отмечает минус-слова на уровне групп объявлений, которые мешают корректным показам ключевых слов. И достаточно нажать «применить всё», чтобы такой конфликт убрать везде. Есть, правда, нюансы, но об этом в конце статьи.
"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Группа 1:-rondell -недорого -купить","набор посуды","купить набор посуды","набор посуды недорого","Группа 2: -набор -купить","набор посуды rondell","посуда rondell","купить набор посуды rondell"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Стало:
"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Группа 1: -rondell","набор посуды","купить набор посуды","набор посуды недорого","Группа 2:","набор посуды rondell","посуда rondell","купить набор посуды rondell"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
То есть все конфликты были удалены, остались только те минусы (rondell в группе 1), которые не причиняют конфликтов. Тем самым сохраняется во многом корректная кросс-минусация и нет конфликтов. При таком способе, можно быть менее зависимым к составлению формата «1 группа 1 ключ». Потому что нежелательные конфликты ключевых слов разных групп исключаются, а заголовки можно дополнить шаблонами. Следовательно — экономия трудозатрат.
"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Рабочий алгоритм таков:"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Составить РК AdWords.","Осуществить кросс-минусацию любым автоматизированным способом.","Удалить конфликты.","Просмотреть группы на возможные незамеченные конфликты."],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Так можно составлять сложные группы объявлений с шаблонами и без, без обязательного разделения на множество групп. Экономия времени и сил.
"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Это еще не всё"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Еще два аспекта делают этот и любой другой алгоритм кросс-минусации, к сожалению, не совершенным. Но всё решаемо.
Первый аспект: ключевые слова со статусом мало показов. Статус может быть присвоен НЧ ключевым словам и чаще всего выявляются у новых созданных или перенесенных РК. Особенно, если семантика собиралась изначально для Яндекс Директ. А проблема в том, что любая автоматическая переминусовка исключит конфликты между всеми ключевыми словами. В том числе между малопоказниками. А зачем исключать конфликт с теми ключевыми словами, которые рано или поздно будут удалены?
Второй аспект: склонения ключевых слов. Не секрет, что для эффективной минусации, в AdWords требуется учесть все варианты окончаний одного и того же слова. И если склонения для минус-слов уже сделаны, то автоматическое отслеживание конфликтов минус-слов будет не точным. Система AdWords предложит удалить базовые минус-слова (которые являются частями ключевых слов), но не созданные искусственно склонения базовых минус-слов.
Возможно у вас есть другие эффективные способы кросс-минусации? Пишите в комментариях.
"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":19,"favorites":72,"reposts":0,"views":22,"hits":10648,"reads":null,"online":0},"dateFavorite":0,"hitsCount":10648,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":true,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/marketing/60960-kross-minusaciya-v-google-adwords-kak-ne-teryat-konversiyu-na-konflikte-klyuchevyh-slov","author":{"id":139172,"name":"Александр Зарайский","nickname":null,"description":null,"uri":"","avatar":{"type":"image","data":{"uuid":"14d51104-4f64-5533-aed2-c44b563668c0","width":301,"height":344,"size":39274,"type":"jpg","color":"8e8381","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQEAeAB4AAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAKAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABwUI/8QAJhAAAQMCBQMFAAAAAAAAAAAAAQIDBAURAAYHEiIhMUEIExRRYv/EABUBAQEAAAAAAAAAAAAAAAAAAAME/8QAHhEAAgICAgMAAAAAAAAAAAAAAQIEEQADIVEigcH/2gAMAwEAAhEDEQA/AFDUunZUrebHdT4MpcajtJmSokdtlL4dKnFNtvISS2faLgB6C5B7C4xlOVpJouZThqmqFIhVPcflxxSJChHevzRcAg7VXHQ26YR5klx/12sxFuLXETmCKAypRLYC2l7+Pbl5+/OIeZ9NsurzJUFKoFFKjJcJJgtXPM/nAz9bxNlq1lux7+5M+4TSsUgqEW/EkE8leaI6z//Z"}},"cover":null,"achievements":[{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":5282691,"userId":139172,"count":0,"shareImage":"https://api.vc.ru/achievements/share/5282691"},{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 23 июля 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":1658604,"userId":139172,"count":0,"shareImage":"https://api.vc.ru/achievements/share/1658604"},{"title":"5 лет на vc.ru","code":"registration_5_years","description":"Провёл 5 лет вместе с vc.ru. Получена 23 июля 2025.","previewUuid":"a9140d54-73b8-5f40-afa8-449fbaafd42b","formats":{"glb":"https://static.vc.ru/achievements/whale.glb","usdz":"https://static.vc.ru/achievements/whale.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.533203125,"textY":0.658203125,"logoX":0.533203125,"logoY":0.77734375,"logoXNoText":0.4375,"logoYNoText":0.66015625},"id":431896,"userId":139172,"count":0,"shareImage":"https://api.vc.ru/achievements/share/431896"}],"lastModificationDate":1765002426,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":199113,"name":"Маркетинг","description":"Рекламные кейсы из России и других стран, советы по продвижению, маркетинг и digital.","uri":"/marketing","avatar":{"type":"image","data":{"uuid":"d66009fe-9bf0-52da-bdbf-4c758eba39e7","width":2400,"height":2400,"size":841299,"type":"jpg","color":"f97373","hash":"0c1cf06cf0d010","external_service":[]}},"cover":{"type":"image","data":{"uuid":"5488a646-f32d-57a6-a31f-d290afc4388a","width":960,"height":280,"size":177,"type":"png","color":"fc7c7c","hash":"","external_service":[]}},"lastModificationDate":1661337194,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":false,"isDisabledAd":false,"nickname":"marketing","isUnsubscribable":true,"badge":null,"badgeId":null,"isDonationsEnabled":false,"isOnline":false,"isPlus":false,"isUnverifiedBlogForCompanyWithoutPro":false,"isVerified":false,"isRemovedByUserRequest":false,"isFrozen":false,"isPro":false,"type":2,"subtype":"community"},"reactions":{"counters":[{"id":1,"count":25}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}},{"type":"entry","data":{"id":57788,"customUri":null,"subsiteId":139172,"title":"Контекстный кодинг: как улучшить работу с Google Tag Manager с помощью программирования","date":1549529400,"dateModified":1549529400,"blocks":[{"type":"text","cover":true,"hidden":false,"anchor":"","data":{"text":"
В комментариях к статье «Google Tag Manager вместо Yagla» меня спросили, как реализовать текстовую подмену, если переменная podmena не равна заданному слову, а содержит его. Допустим, если в переменной есть слово «москва», а на сайте должно отобразиться «дешёвые слоны в Москве». Фактически — как использовать текстовую подмену на сайтах ещё эффективнее. Задача нетривиальная настолько, что достойна отдельной статьи.
Привет, я Александр Зарайский, руководитель обучающего центра контекстного рекламного агентства MOAB. Сегодня я покажу вам, как упростить работу в Google Tag Manager с помощью кодинга. Если вы ещё не читали мою статью «Google Tag Manager вместо Yagla», рекомендую сначала ознакомиться с ней, так как разобранный здесь пример сделан на её основе.
"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"В чём вообще проблема?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Допустим, вы сделали текстовую подмену по инструкции из прошлой статьи. Теперь у вас в ссылке есть переменная podmena. Если вписать в неё значение, которое вы добавили в таблицу поиска — например, «москва», — то новый заголовок подставится автоматически. Вот так:
Но что, если вы захотите, чтобы переменная передавала не вписанные значения, а, допустим, значение {keyword} из вашей UTM-метки? Например, «купить инкубатор москва» или «купить инкубатор в москве», или даже просто слово «москве». Вот что получится:
Что-то пошло не так. Конечно, мы можем вписать в таблицу поиска каждое требуемое значение, но это очень долго. Да и редактировать таблицу поиска в дальнейшем будет трудно, особенно если накопится много ключевых слов. Таблица поиска может разрастись до нескольких сотен или даже тысяч строк, работать с которыми придётся вручную. Перспектива неприятная.
Чтобы этого добиться, нужно сделать «прокладку» между podmena и таблицей поиска. Речь о «прокладке» в виде отдельной функции, которая будет проверять значение podmena, искать нужные фразы и передавать результат таблице поиска. Тем самым выполняя условие «содержит».
Оставить эту переменную пустой нельзя, потому сразу заполним её кодом. Те, кто хорошо знаком с JavaScript, спокойно добавляют код, сохраняют переменную и читают дальше. Для тех, кто не знает этого языка программирования, я добавил подробные объяснения.
"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"function()\n{\n var podmena; //объявление новой переменной\n podmena = {{Запрос для подмены}}; //записываем значение podmena из URL в переменную\n return podmena; //возвращаем значение переменной\n}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Вот что мы сделали:
"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Объявили функцию JavaScript.","Объявили переменную.","Записали значение «Запрос для подмены» в переменную.","Сделали так, чтобы функция возвращала значение podmena в качестве результата."],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
2. Мы создали переменную комбинацией «var [название переменной]». Необязательно называть переменную podmena. Можно, например, назвать переменную «var p», но это будет менее понятно, правда? Чтобы не запутаться в коде, выбирайте понятные названия для переменных.
При этом «Запрос для подмены» заключается аж в две фигурные скобки с каждой стороны. Это требование GTM для того, чтобы обращаться к другим переменным в аккаунте. Таким образом вы можете обращаться к любым переменным и использовать их в своём коде.
Если в таблицу поиска установить в качестве входной переменной новую функцию, будет происходить вот что:
"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Podmena в URL передаёт значение в «Запрос для подмены».","«Запрос для подмены» передаёт значение в функцию.","Функция передаёт значение в таблицу поиска."],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Так функция становится нужной нам перемычкой. Но пока она ещё ничего не делает с тем значением, которое получает. Потому давайте улучшим функцию следующим кодом:
"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"function()\n{\n\tvar podmena = {{Запрос для подмены}}; //принимаем значение podmena из URL\n\tvar stringForCheck = \"москв\"; //искомое значение, которое будем искать в podmena\n\tvar stringIfSuccess = \"москва\"; //какое значение вернем, если найдем нужное значение\n\tvar checkOut = podmena.indexOf(stringForCheck); //ищем индекс нужного значения в переменной\n\tif (checkOut > 0) //если он нашелся, возвращаем ожидаемое значение\n \t{\n \t\treturn stringIfSuccess;\n \t}\n\treturn podmena;\n}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Мы сделали четыре переменных и добавили условия if, а также использовали метод indexOf.
То есть stringForCheck у нас равно «москв». Если это значение «москв» будет в podmena, нам вернётся индекс, который покажет, где это слово в строке начинается.
Предположим, что podmena = «инкубатор москва». Тогда при проверке podmena.indexOf(“москв”); индекс будет равен 10. То есть слово “москв” начинается с 10 буквы в строке.
Здесь if совершает проверку переменной checkOut. Если переменная больше нуля (checkOut > 0), совершаются действия в фигурных скобках (return stringIfSuccess). Если checkOut меньше нуля (например, -1), действие в фигурных скобках совершаться не будет.
return — команда к завершению функции. То есть когда объявляется return, функция возвращает указанное рядом с return значение (return «что-то»; //например) или может ничего не указывать и вызвать
Вот и всё! С помощью этого кода реализуется алгоритм поиска указанного слова (stringForCheck) и возвращается нужное значение (stringIfSuccess), если фраза найдена. Так что уже неважно, какое ключевое слово находится в podmena, лишь бы там была интересующая нас фраза.
Но можно сделать ещё одно приятное улучшение. Сейчас идёт проверка только одной фразы. А ведь фраз в таблице поиска несколько, и было бы неплохо проверять на наличие каждую. Для этого мы можем улучшить существующую функцию:
"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"function() {\n\tvar podmena = {{Запрос для подмены}}; //принимаем значение podmena из URL\n\t\n\t//искомые значения, которые будем искать в podmena\n\tvar stringForCheck = [\"москв\", \"петербург\", \"питер\", \"красноярск\", \"житомир\"];\n\t//какое значение вернем, если найдем искомое\n\tvar stringIfSuccess = [\"москва\", \"петербург\", \"петербург\", \"красноярск\", \"житомир\"];\n\tvar result = podmena;\n\tfor (var i = 0; i < stringForCheck.length; i++)\n {\n \t var checkOut = podmena.indexOf(stringForCheck[i]);\n //ищем индекс искомого значения в переменной\n \t if (checkOut >= 0) //если он находится, возвращаем ожидаемое значение\n {\n return stringIfSuccess[i];\n \t }\n \t}\n\treturn podmena;\n}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
2. Цикл for предполагает, что функция несколько раз повторит один и тот же алгоритм действий, указанный в фигурных скобках, пока выполняется условие, указанное в обычных скобках.
Этот метод stringForCheck.length возвращает значение длины массива stringForCheck. Если посмотреть в код выше, мы увидим, что там записано пять слов через запятую. Соответственно, этот метод вернёт значение 5.
Тут всё просто и знакомо. Мы задаём переменную checkOut. Приравниваем её значение к индексу значения массива. И тут есть важный момент: мы ищем индекс переменной stringForCheck[i]. То есть мы используем переменную i, чтобы каждую итерацию цикла for получать каждое значение массива по очереди (сначала 0, потом 1, потом 2 и так далее). Так цикл for проходит по всем значениям массива, а значит, по всем городам, которые записаны в переменной stringForCheck.
Дальше происходит проверка: если индекс текущего значения больше нуля (найдено текущее проверяемое слово), то функция завершается (return) и возвращается значение из другой переменной stringIfSuccess. А в stringIfSuccess у нас записан ряд значений, которые имеют такую же очередь, как и в stringForCheck. Поэтому в таблицу поиска вернётся нужное значение.
stringForCheck[0] у нас равен «москв», а в переменной podmena такого значения нет, потому проверка if будет неудачной, и цикл for пойдёт на следующий круг.
stringForCheck[1] у нас равен «петербург». Такое значение в переменной podmena есть. Следовательно, проверка if будет успешной, и функция завершит работу и вернёт значение stringIfSuccess[1], который равен «петербург».
Надеюсь, я подтолкнул вас к новым идеям применения JavaScript для работы с GTM. Если остались вопросы или появились мысли, как можно улучшить функцию, — пишите в комментариях
"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":24,"favorites":116,"reposts":0,"views":22,"hits":6128,"reads":null,"online":0},"dateFavorite":0,"hitsCount":6128,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":true,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/marketing/57788-kontekstnyi-koding-kak-uluchshit-rabotu-s-google-tag-manager-s-pomoshyu-programmirovaniya","author":{"id":139172,"name":"Александр Зарайский","nickname":null,"description":null,"uri":"","avatar":{"type":"image","data":{"uuid":"14d51104-4f64-5533-aed2-c44b563668c0","width":301,"height":344,"size":39274,"type":"jpg","color":"8e8381","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQEAeAB4AAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAKAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABwUI/8QAJhAAAQMCBQMFAAAAAAAAAAAAAQIDBAURAAYHEiIhMUEIExRRYv/EABUBAQEAAAAAAAAAAAAAAAAAAAME/8QAHhEAAgICAgMAAAAAAAAAAAAAAQIEEQADIVEigcH/2gAMAwEAAhEDEQA/AFDUunZUrebHdT4MpcajtJmSokdtlL4dKnFNtvISS2faLgB6C5B7C4xlOVpJouZThqmqFIhVPcflxxSJChHevzRcAg7VXHQ26YR5klx/12sxFuLXETmCKAypRLYC2l7+Pbl5+/OIeZ9NsurzJUFKoFFKjJcJJgtXPM/nAz9bxNlq1lux7+5M+4TSsUgqEW/EkE8leaI6z//Z"}},"cover":null,"achievements":[{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":5282691,"userId":139172,"count":0,"shareImage":"https://api.vc.ru/achievements/share/5282691"},{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 23 июля 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":1658604,"userId":139172,"count":0,"shareImage":"https://api.vc.ru/achievements/share/1658604"},{"title":"5 лет на vc.ru","code":"registration_5_years","description":"Провёл 5 лет вместе с vc.ru. Получена 23 июля 2025.","previewUuid":"a9140d54-73b8-5f40-afa8-449fbaafd42b","formats":{"glb":"https://static.vc.ru/achievements/whale.glb","usdz":"https://static.vc.ru/achievements/whale.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.533203125,"textY":0.658203125,"logoX":0.533203125,"logoY":0.77734375,"logoXNoText":0.4375,"logoYNoText":0.66015625},"id":431896,"userId":139172,"count":0,"shareImage":"https://api.vc.ru/achievements/share/431896"}],"lastModificationDate":1765002426,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":199113,"name":"Маркетинг","description":"Рекламные кейсы из России и других стран, советы по продвижению, маркетинг и digital.","uri":"/marketing","avatar":{"type":"image","data":{"uuid":"d66009fe-9bf0-52da-bdbf-4c758eba39e7","width":2400,"height":2400,"size":841299,"type":"jpg","color":"f97373","hash":"0c1cf06cf0d010","external_service":[]}},"cover":{"type":"image","data":{"uuid":"5488a646-f32d-57a6-a31f-d290afc4388a","width":960,"height":280,"size":177,"type":"png","color":"fc7c7c","hash":"","external_service":[]}},"lastModificationDate":1661337194,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":false,"isDisabledAd":false,"nickname":"marketing","isUnsubscribable":true,"badge":null,"badgeId":null,"isDonationsEnabled":false,"isOnline":false,"isPlus":false,"isUnverifiedBlogForCompanyWithoutPro":false,"isVerified":false,"isRemovedByUserRequest":false,"isFrozen":false,"isPro":false,"type":2,"subtype":"community"},"reactions":{"counters":[{"id":1,"count":32}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}},{"type":"entry","data":{"id":52491,"customUri":null,"subsiteId":139172,"title":"Google Tag Manager вместо Yagla: быстро, просто, бесплатно. Пошаговая инструкция","date":1544166309,"dateModified":1544166309,"blocks":[{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Создание мультилендингов — с адаптированным текстом под разные рекламные кампании — мечта маркетолога. Вы можете заметно повысить конверсию, подменяя слоган или заголовок на лендинге в соответствии с текстом рекламного объявления. Инструменты для такой настройки есть — например, Yagla. Мы расскажем, как заменить платный сервис Yagla общедоступными бесплатными инструментами Google Tag Manager.
Привет, я Александр Зарайский - руководитель обучающего центра контекстного рекламного агентства MOAB. Сегодня я покажу по шагам, как настроить текстовые подмены, подмену картинок, а также использовать другие возможности GTM.
Давайте договоримся сразу: сам по себе Yagla — хороший сервис, но платный. Возможность сэкономить — это всегда приятно, особенно для агентства с большим числом проектов. С помощью Google Tag Manager можно бесплатно сделать то, что Yagla предлагает за деньги — и даже больше.
"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что такое GTM и чем он отличается от Yagla"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Вообще, все началось с того, что мы запустили MOAB как контекстное рекламное агентство и придумывали тарифы на контекстную рекламу -например, такие, чтобы человек разом получал и Директ, и Ads, и работу с конверсией, и много других полезных вещей.
В рамках таких тарифов было бы круто делать текстовые подмены для лендингов с привязкой к запросу — объективно, это увеличивает конверсию в большинстве случаев. Однако, в случае с Yagla это привело бы к росту цен на наши услуги за счет стоимости самого сервиса. Идеальным выходом стал Google Tag Manager.
Google Tag Manager — это диспетчер тегов. С помощью этого инструмента можно создавать и обновлять теги для сайта или мобильного приложения. Он позволяет самостоятельно управлять тегами и настраивать нужные опции, не отвлекая программиста просьбами типа «А придумай какой-нибудь код, чтобы я мог посмотреть, сколько людей кликнуло на ту красную кнопочку».
Интерфейс GTM простой и интуитивно понятный, ведь его разрабатывали для маркетологов, а не для айтишников. Есть руководство по установке и настройке. И тонна полезных опций, включая добавление тегов ретаргетинга, отслеживание глубины прокрутки страницы и добавление кнопок соцсетей на картинки. Чуть позже мы рассмотрим несколько.
А еще GTM без проблем работает с тегами разных служб, обеспечивает простое тестирование и отладку, позволяет настраивать теги даже в загруженных пользователями приложениях и дает возможность проводить любое количество тестов, возвращаясь к самым эффективным версиям.
Остается вопрос: если GTM такой крутой, почему на Yagla вообще есть спрос? Справедливости ради нужно сказать, что у Google Tag Manager есть парочка недостатков:
"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Требуется настройка с нуля. Ничего сложного в ней нет, но для некоторых пользователей это слишком муторная задача. Проще зайти в Yagla и быстренько настроить подмену, не напрягаясь. Тем более что у этого сервиса есть сотрудники техподдержки, которые всегда готовы взять новичка за ручку, провести по всем пунктам и разжевать, что и в какой последовательности нужно делать. Если у вас есть бюджет на это — велкам.","Нет встроенных способов просмотра статистики по каждой подмене. Подключить сбор статистики можно, но это потребует дополнительных телодвижений и траты времени."],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
На этом минусы заканчиваются и начинаются плюсы.
"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Во-первых, всё, что предлагает Yagla, можно сделать через Google Tag Manager. Притом без ограничений в рамках тарифной сетки — любое число подмен на любом количестве сайтов. Всё бесплатно, даже если вы работаете в агентстве и курируете с полсотни сайтов и мобильных приложений.","Во-вторых, в GTM подмену можно настроить индивидуально под свой сайт, а интерфейс Yagla накладывает определенные ограничения. Возьмем тот же сбор статистики. В Yagla можно настраивать множество целей, но результаты вы увидите только в сумме. А в GTM можно разграничивать цели, а также отправлять отчеты через Яндекс.Метрику или Google Analytics.","В-третьих, GTM позволяет делать много других полезных вещей."],"type":"UL"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Как сделать бесплатное «Yagla» из GTM","Что еще можно сделать с помощью GTM","Отслеживание внутренних переходов по конкретной ссылке","Отслеживание переходов по внешним ссылкам","Добавление тегов ретаргетинга","Отслеживание глубины прокрутки страницы","Отслеживание кликов по кнопкам","Уточнение показателя отказов","Добавление кнопок соцсетей на картинки","Внедрение кода микроразметки"],"type":"OL"}},{"type":"header","cover":false,"hidden":false,"anchor":"1","data":{"style":"h2","text":"Как сделать бесплатное «Yagla» из GTM"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
С помощью Google Tag Manager можно менять любые элементы на сайте.
Для начала нам потребуется две переменных. Заходим в GTM, затем «Переменные» — «Создать». Первая переменная, которая нам нужна — URL, тип компонента — «Запрос». Ключ запроса и название переменной могут быть любыми. Главное, чтобы они были понятны вам. Например, вы можете указать ключ podmena и название «Запрос для подмены».
Теперь создаем вторую переменную типа «Таблица поиска» — она будет содержать данные для подмены. В пункте «Входная переменная» выберите название переменной, откуда нужно брать запросы для подмены — в нашем случае это «Запрос для подмены» (очевидно, правда?).
Затем добавляем несколько строк. Их может быть сколько угодно — зависит от количества вариантов, которые вы планируете использовать. В шаблоне указано, что должна содержать переменная, а в результате — текст, который будет отображаться на сайте. Например, в шаблоне мы можем указать значения 30 и None, а в результате — «Скидка 30%» и «Подарок при покупке» соответственно. Затем указываем имя переменной (например, podmena) и сохраняем.
Две переменных готовы. Теперь нам нужно создать тег типа «Пользовательский HTML». В нем пишем код (курсивом выделены части кода, которые нужно заменить):
Расшифрую: на сайте мы ищем элемент по указанному ID (его можно узнать с помощью опции «посмотреть код» в браузере) и в подставляем в него значение, которое хранится в переменной podmena.
Для этого тега нужно задать триггер активации типа «Просмотр страницы» и выбрать в настройках «Некоторые просмотры страниц», а затем «Page URL — Содержит — podmena».
Вот и все, теперь можно спокойно лить трафик на сайт, отправляя пользователей на страницы с нужным текстом. Так руками за 10 минут бесплатно можно сделать то, что в Yagla предлагают за деньги.
Важный момент: если вы используете параметр подмены в рекламных объявлениях вместе с UTM-метками, помните о структуре составления параметров в URL. Сначала пишем «?», притом он всегда один. Каждый параметр и значение разделяем «&». Вот пример ссылки с UTM-меткой и параметром подмены: domen.ru/?utm_source=google&utm_term=cpc&podmena=30
Все то же самое. Только потребуется еще одна переменная типа «Таблица поиска», где в результатах вы будете указывать не текст, а путь к картинке. Например, images/mebel/stol1. Допустим, мы назовем эту переменную PodmenaImages.
Если учитывать, что вариантов текста и картинок обычно немного, справиться с задачей можно очень быстро. А если позднее вы захотите изменить какие-то изображения или варианты текста — ничего даже не придется настраивать заново, достаточно будет изменить некоторые значения в таблицах поиска.
А что там насчет статистики? Той самой, которая лучше, чем у Yagla, но настраивается отдельно? Элементарно: в любом счетчике нужно создать фильтр на переходы по URL, содержащим podmena. А если нужна более точная статистика, то по URL, содержащим podmena=[значение].
"}},{"type":"header","cover":false,"hidden":false,"anchor":"2","data":{"style":"h2","text":"Что еще можно сделать с помощью GTM"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Для клиентов агентства MOAB мы используем весь функционал GTM для упрощения и ускорения внутренних работ и сбора статистики, причем по-прежнему — бесплатно. Давайте по шагам разберем, что еще хорошего можно сделать, используя GTM.
"}},{"type":"header","cover":false,"hidden":false,"anchor":"3","data":{"style":"h2","text":"Отслеживание внутренних переходов по конкретной ссылке"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Это как UTM-метки, только для внутренних переходов на сайте.
В списке встроенных переменных выбираем Click URL. Затем создаем новый триггер типа «Клик» — «Только ссылки» и укажите для активации URL нужной страницы.
Теперь остается только добавить тег типа Universal Analytics (тип отслеживания — «Событие»), добавить в него нужный триггер, который мы только что создали, заполнить поля и сохранить. После этого вы сможете отслеживать клики в Google Analytics, раздел «События».
"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"1bbce4e9-e0da-627d-7364-2896c19bf94a","width":1152,"height":623,"size":35839,"type":"png","color":"ededed","hash":"","external_service":[]}}}]}},{"type":"header","cover":false,"hidden":false,"anchor":"4","data":{"style":"h2","text":"Отслеживание переходов по внешним ссылкам"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Здесь есть два варианта: отслеживание переходов по всем внешним ссылкам сразу или только по одной конкретной. Рассмотрим оба.
В обоих случаях нужно создать пользовательскую переменную типа URL и триггер «Клик». Ну и после окончания настроек создать тег отслеживания типа Universal Analytics и заполнить поля. А вот сами настройки будут разные.
Если нужно отследить переходы по всем внешним ссылкам на сайте, в пользовательской переменной выберите тип компонента «Имя хоста», а в источнике укажите {{Click URL}}.
Если нужно отследить переход только по одной конкретной внешней ссылке, в настройках переменной укажите тип компонента «Полный URL», в поле «Источник» {{Click URL}}.
Ретаргетинг (вдруг не все в курсе) — это когда рекламу показывают только тем пользователям, которые хоть как-то взаимодействовали с сайтом. Например, просматривали товары, добавляли их в корзину или даже просто заходили, скроллили и выходили. Продать что-то человеку, который уже был на сайте и видел предложение продавца, проще, чем совсем «холодному» клиенту. Результат — реклама и дешевле, и эффективнее.
Теги ретаргетинга добавляются через GTM буквально за минуту. Создаем новый тег типа «Пользовательский HTML». Настраиваем ретаргетинг в кабинете сервиса (ВКонтакте, Facebook и пр.), получаем код, добавляем его через GTM, устанавливаем триггер активации, чтобы код срабатывал на нужных страницах, сохраняем — profit!
Эта опция особенно актуальна для лендингов. Если хотите знать, насколько далеко скроллят страницу пользователи и не пора ли убрать пару-тройку блоков, она вам пригодится.
Выберите тип триггера «Глубина прокрутки». Далее идут настройки:
"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Можно отслеживать глубину не только вертикальной, но и горизонтальной прокрутки. Поставьте галочку на интересующий вас вариант (или на оба).","Выберите измерение — проценты или пиксели. Пороговые значения нужно указывать через запятую. Например, если вы выбрали проценты, можно написать «10,15,25,30,40,50,65,75,85,100». Или вариант для более грубых измерений: «10,25,50,75,100».","Укажите, для каких страниц нужно отслеживать глубину прокрутки. Если речь об одностраничнике — вопросов не возникнет. Если же о сайте и вы хотите, допустим, отслеживать глубину прокрутки только для статей в блоге, укажите дополнительные условия для активации триггера. Например, Page Path — Содержит — /blog."],"type":"UL"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"ef0eabf8-3728-57e3-0634-05ae95cab418","width":959,"height":563,"size":38891,"type":"png","color":"e3e4e1","hash":"","external_service":[]}}}]}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Во вкладке «Переменные» включите опции. Scroll Depth Threshold передает пороговое значение, которого достиг посетитель. Scroll Depth Units указывает вариант измерения — пиксели или проценты. Scroll Direction содержит информацию о типе прокрутки (вертикальная или горизонтальная)."],"type":"UL"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"c6bba276-f039-815c-349d-406929a78d94","width":1232,"height":625,"size":76306,"type":"png","color":"dddddd","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
С настройками закончили. Осталось организовать передачу данных в Google Analytics. Выбираем тип отслеживания «Событие», категорию Scrolling, действие {{Scroll Depth Threshold}}%, если вы выбрали проценты, или {{Scroll Depth Threshold}}px, если предпочли пиксели. Добавлять проценты или пиксели необязательно — просто вам же будет легче потом читать отчеты. Ярлык — {{Page URL}}, но если вы хотите отслеживать и горизонтальную, и вертикальную прокрутку, добавьте к ярлыку {{Scroll Direction}}.
Обратите внимание на значение «Не взаимодействие». Если вы хотите, чтобы доскролл влиял на показатель отказов, в это значение нужно вставить переменную типа «Таблица поиска». При ее заполнении учитывайте: если в результате true, событие НЕ влияет на показатель отказов, а если false — влияет. Например, если вы укажете 15 true, 50 false, доскролл до середины будет влиять на показатель отказов, а до 15% — не будет.
Чтобы отслеживать события скроллинга в Google Analytics, нужно составить такой шаблон отчета:
"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"75366939-91c9-5171-243c-d87848463a23","width":1266,"height":867,"size":109455,"type":"png","color":"f4f4f3","hash":"","external_service":[]}}}]}},{"type":"header","cover":false,"hidden":false,"anchor":"7","data":{"style":"h2","text":"Отслеживание кликов по кнопкам"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Допустим, у вас на сайте есть несколько кнопок с одинаковой функцией, но разными призывами к действию. Например, «заказать», «купить», «добавить в корзину», «положить в корзину» и пр. Вы хотите протестировать их и выяснить, какие кнопки работают лучше. И у GTM есть решение этой задачи.
Активируем встроенную переменную Click Text. Создаем триггер «Клик — Все элементы» и выбираем вариант «Некоторые клики» в настройках. Затем указываем Click Text — Содержит — «Добавить в корзину» (или другой текст на кнопке, который вас интересует). Затем создаем тег типа Universal Analytics для отслеживания события и готово.
Google Analytics весьма своеобразно считает отказы. Он записывает в отказ любое посещение, при котором пользователь просмотрел только одну страницу и не совершил никаких действий (не заполнил форму, не нажал на кнопку обратного звонка и пр.) На одностраничниках этот показатель может доходить до 100%. Например, если пользователь зашел на сайт, прочитал текст, позвонил по указанному номеру телефона и закрыл страницу — он все равно будет записан как «отказник». Чтобы уточнить этот показатель и получить более точные сведения, можно через GTM настроить отслеживание длительности посещения без привязки к действиям. Пробыл на странице 20 секунд — уже не «отказ».
Как это сделать? Выберите тип тега Universal Analytics, тип отслеживания «Событие», затем задайте для тега триггер типа «Таймер» и задайте нужный интервал в миллисекундах.
"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"88f11fc9-6535-94d9-d011-291a639eb2aa","width":960,"height":445,"size":2342238,"type":"gif","color":"ffffff","hash":"","external_service":[],"duration":0,"isVideo":false,"has_audio":false}}}]}},{"type":"header","cover":false,"hidden":false,"anchor":"9","data":{"style":"h2","text":"Добавление кнопок соцсетей на картинки"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Тут все очень просто: выбираете любой сервис по своему вкусу, копируете код кнопок и добавляете с помощью тега типа «Пользовательский HTML». Примерно так:
И тут все тоже предельно просто. Генерируете код с помощью инструмента Schema или аналога, создаете тег типа «Пользовательский HTML», вписываете туда полученный код, а затем настраиваете активацию триггера. И все, на вашем сайте есть микроразметка!
"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":" Вместо послесловия "}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"
Разумеется, данная статья - вовсе не призыв отказаться от одних инструментов (платных) и использовать другие (бесплатные). Если у вас все уже настроено и работает эффективно - к чему что-либо менять?
Но для тех, кто еще не использует текстовые подмены, попробовать их было бы гораздо проще с помощью данного руководства; в особенности - агентствам контекстной рекламы и фрилансерам, которым, как и нам в MOAB, приходится работать с большим количеством клиентов.
"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":99,"favorites":622,"reposts":0,"views":23,"hits":30232,"reads":null,"online":0},"dateFavorite":0,"hitsCount":30232,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":true,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/marketing/52491-google-tag-manager-vmesto-yagla-bystro-prosto-besplatno-poshagovaya-instrukciya","author":{"id":139172,"name":"Александр Зарайский","nickname":null,"description":null,"uri":"","avatar":{"type":"image","data":{"uuid":"14d51104-4f64-5533-aed2-c44b563668c0","width":301,"height":344,"size":39274,"type":"jpg","color":"8e8381","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQEAeAB4AAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAKAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABwUI/8QAJhAAAQMCBQMFAAAAAAAAAAAAAQIDBAURAAYHEiIhMUEIExRRYv/EABUBAQEAAAAAAAAAAAAAAAAAAAME/8QAHhEAAgICAgMAAAAAAAAAAAAAAQIEEQADIVEigcH/2gAMAwEAAhEDEQA/AFDUunZUrebHdT4MpcajtJmSokdtlL4dKnFNtvISS2faLgB6C5B7C4xlOVpJouZThqmqFIhVPcflxxSJChHevzRcAg7VXHQ26YR5klx/12sxFuLXETmCKAypRLYC2l7+Pbl5+/OIeZ9NsurzJUFKoFFKjJcJJgtXPM/nAz9bxNlq1lux7+5M+4TSsUgqEW/EkE8leaI6z//Z"}},"cover":null,"achievements":[{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":5282691,"userId":139172,"count":0,"shareImage":"https://api.vc.ru/achievements/share/5282691"},{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 23 июля 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":1658604,"userId":139172,"count":0,"shareImage":"https://api.vc.ru/achievements/share/1658604"},{"title":"5 лет на vc.ru","code":"registration_5_years","description":"Провёл 5 лет вместе с vc.ru. Получена 23 июля 2025.","previewUuid":"a9140d54-73b8-5f40-afa8-449fbaafd42b","formats":{"glb":"https://static.vc.ru/achievements/whale.glb","usdz":"https://static.vc.ru/achievements/whale.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.533203125,"textY":0.658203125,"logoX":0.533203125,"logoY":0.77734375,"logoXNoText":0.4375,"logoYNoText":0.66015625},"id":431896,"userId":139172,"count":0,"shareImage":"https://api.vc.ru/achievements/share/431896"}],"lastModificationDate":1765002426,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":199113,"name":"Маркетинг","description":"Рекламные кейсы из России и других стран, советы по продвижению, маркетинг и digital.","uri":"/marketing","avatar":{"type":"image","data":{"uuid":"d66009fe-9bf0-52da-bdbf-4c758eba39e7","width":2400,"height":2400,"size":841299,"type":"jpg","color":"f97373","hash":"0c1cf06cf0d010","external_service":[]}},"cover":{"type":"image","data":{"uuid":"5488a646-f32d-57a6-a31f-d290afc4388a","width":960,"height":280,"size":177,"type":"png","color":"fc7c7c","hash":"","external_service":[]}},"lastModificationDate":1661337194,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":false,"isDisabledAd":false,"nickname":"marketing","isUnsubscribable":true,"badge":null,"badgeId":null,"isDonationsEnabled":false,"isOnline":false,"isPlus":false,"isUnverifiedBlogForCompanyWithoutPro":false,"isVerified":false,"isRemovedByUserRequest":false,"isFrozen":false,"isPro":false,"type":2,"subtype":"community"},"reactions":{"counters":[{"id":1,"count":114}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}}],"cursor":"PuR2GsZKFTvhhG9TAYfj9NSbRrA0Zzqp8pO3vI3Iw0/OL+jFMLeqxktd4WpN2A==","isAnonymized":true}};