Александр Зарайский

+241
с 2018
24 подписчика
6 подписок

Настройка электронной торговли (ecommerce) практически всегда требует персонального подхода к сайту, а также разработчика, который всё настроит. Как сделать все самому, без помощи программиста, используя лишь Google Tag Manager и несколько готовых скриптов?

Привет, я Александр Зарайский — спикер курса «Весь контекст за 4 месяца». На курсе мы…

19

Недавно введенная в Яндекс.Директ стратегия «Ручное управление ставками с оптимизацией в сетях» оказалось довольно коварной. Превышение заданной максимальной ставки в РСЯ может достигать 200% — а возможно и выше. В агентстве МОАВ уже столкнулись с этим и нашли решение. Рассказываем, что можно сделать.

Как не переплачивать за РСЯ: укрощаем стратегию «Оптимизация в сетях»
23

Чем грозит конфликт ключевых слов в контекстной рекламе? Вы можете получить гораздо более низкий уровень конверсии, чем ожидалось. Рассказываем, как избавиться от конфликтов — быстро и без ручной работы.

Кросс-минусация в Google Adwords: как не терять конверсию на конфликте ключевых слов
25

Пошаговая инструкция на примере GTM вместо Yagla.

В комментариях к статье «Google Tag Manager вместо Yagla» меня спросили, как реализовать текстовую подмену, если переменная podmena не равна заданному слову, а содержит его. Допустим, если в переменной есть слово «москва», а на сайте должно отобразиться «дешёвые слоны в Москве». Фактически — к…

32

Создание мультилендингов — с адаптированным текстом под разные рекламные кампании — мечта маркетолога. Вы можете заметно повысить конверсию, подменяя слоган или заголовок на лендинге в соответствии с текстом рекламного объявления. Инструменты для такой настройки есть — например, Yagla. Мы расскажем, как заменить платный сервис Yagla общедоступными…

114
","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Выглядит для начала так:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"f0826838-e878-6899-2f73-62c4d2da1635","width":1514,"height":897,"size":1135584,"type":"png","color":"f0f0f0","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

transactionProducts равняется скобкам, потому что это обозначает в JavaScript будущий список значений. А учитывая, что туда будут динамично вписываться товары из корзины, то нужно написать именно так.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

А теперь давайте последовательно заполним данными каждую переменную от простого к сложному.

"}},{"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":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"254ba3e0-2e88-4c2a-ab93-12a69b5ba404","width":1920,"height":943,"size":2055245,"type":"png","color":"2c2a29","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Но прежде, давайте проверим в консоли, что это то, что нам нужно:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"fffa8d75-c3a2-2ed1-2205-9067f6ce1ad7","width":1920,"height":943,"size":3058956,"type":"gif","color":"ffffff","hash":"","external_service":[],"duration":0,"isVideo":false,"has_audio":false}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

И в выводе получился текст: “1 251 р.” - что не подходит для записи в transactionTotal, т.к. нам нужно просто число.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Поэтому к следующему вызову был добавлен метод: .replace

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Где в скобках первое значение в кавычках “что заменить”, а второе - “на что заменить”. В данном случае заменен: “ р.” (конец строки после числа) на пустое значение. И на третий раз метод повторили и был убран лишний пробел, в результате получив число.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Рекомендую запомнить метод replace - определенно пригодится при поиске нужного значения на иных сайтах.

"}},{"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":"

Для начала повторим, что нам нужно сделать и в чём проблема.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В эту переменную нужно записать товары, которые были добавлены в корзину. Изначально неизвестно, какие товары будут добавлены в корзину и сколько их будет. Следовательно, элемент “товар” в корзине мы не можем выбрать по селектору, т.к. он непостоянный и динамичный. И в этом вопросе нам поможет немного логики и щепотка программирования.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Мы не можем работать с элементом которого может не быть, но мы можем работать с элементами, которые есть в корзине постоянно. И как бы “вслепую” работать с их дочерними элементами.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Смотрите пример ниже и разберем его далее:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"ccc21e5a-5cec-cee4-12a9-6c6aea5fefca","width":1920,"height":943,"size":4117853,"type":"gif","color":"ffffff","hash":"","external_service":[],"duration":0,"isVideo":false,"has_audio":false}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Для начала, был найдена таблица, которая содержит все товары. Отличие таблицы от товаров - она статична и всегда будет на странице корзины, вне зависимости от количества товаров в корзине.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Далее, был взять селектор таблицы и найден в консоли. Следующим шагом, был использован метод children, который вывел список всех дочерних элементов - и это все товары.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Затем, с помощью квадратных скобок и введения номера, я мог выбирать любой дочерний элемент из списка. То есть сейчас имеется доступ ко всем товарам корзины и можно без проблем вписать данные каждого товара. Всё что требуется - создать последовательную запись каждого children таблицы.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Запишем следующее в код шаблона:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Что нового добавилось:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Объявлена новая переменная list, в которую записан селектор таблицы товаров с методом children. То есть по сути в list хранится список всех товаров. Осталось расшифровать данные, в чём нам поможет цикл for. О нём я подробно рассказывал в статье по контекстному кодингу, потому тут ограничусь краткой вводной.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В цикле for объявляется переменная i, которая принимает значение 0 и каждую итерацию цикла увеличивается на 1, до тех пор, пока длина списка товаров (list.length) больше переменной i. Например сейчас всего три товара в списке и list.length будет равно 3, значит цикл повторится 3 раза с увеличением переменной i на единицу каждый раз в конце прохода цикла.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Внутри цикла реализован следующий метод:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"transactionProducts.push({\n name: list[i],\n price: list[i],\n quantity: list[i],\n sku: ''\n })","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Который обозначает, что каждый проход цикла, в объявлений список transactionProducts вносится (push) новый элемент, который содержит 4 переменных: name, price, quantity и sku. И пока что каждый элемент принимает значение переменной list[i]. А значит при каждом прохождении цикла будет вносится значение подобным образом: list[0], list[1], list[2] и так пока не законится цикл.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Помните, что в переменной list внесены товары? а значит вызов list[i] будет выглядеть так:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"5234fa94-7735-10f4-bdf2-5e51ed239749","width":1920,"height":943,"size":1026543,"type":"gif","color":"ffffff","hash":"","external_service":[],"duration":0,"isVideo":false,"has_audio":false}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

По факту будет запись каждого товара во все переменные. Это близко, но не совсем то, что нужно. Например, нужно найти название товара, а не весь товар. Значит list[i] в переменной name надо уточнить тем, что надо из рассматриваемого товара найти нужный элемент с названием:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"39ff6b4c-4509-593a-6e3d-0fed5424e8d6","width":1920,"height":943,"size":1497761,"type":"gif","color":"ffffff","hash":"","external_service":[],"duration":0,"isVideo":false,"has_audio":false}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Как видно, можно обратится к children текущего children и найти интересующий нас элемент. В данном случае это был 1 элемент, который содержал нужный текст.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Следовательно можно дополнить переменную name такой формулировкой:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

list[i].children[1].innerText

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

И теперь в name будет записываться название каждого товара.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

С ценой и количеством поступим также:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"2ea298aa-3abb-be4c-f8e2-8bfebd8b14de","width":1920,"height":943,"size":2182280,"type":"gif","color":"ffffff","hash":"","external_service":[],"duration":0,"isVideo":false,"has_audio":false}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

При поиске цены товара был задействован метод replace, чтобы избавиться от лишних символов.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В результате скрипт получится таким:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Теперь в цикле пополняется список актуальными данными каждого товара. Но как вы могли заметить, остался пустым sku - артикул товара. По той причине, что на сайте этих данных нет, а потом поле осталось пустым. Так же можно поступить и с любым другим полем, если по какой-то причине этих данных нет на сайте.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Ну и последнее - данные надо внести в datalayer.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Давайте ненадолго отвлечемся от текущей задачи и по простому разберем, что такое datalayer.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Это по факту список Google Tag Manager, в котором он записывает и хранит данные произошедших событий. Его можно вызвать в консоли браузера, чтобы посмотреть его записи:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"ecaabe7c-9177-3e32-d284-179c5ba1b744","width":1920,"height":943,"size":1058291,"type":"gif","color":"ffffff","hash":"","external_service":[],"duration":0,"isVideo":false,"has_audio":false}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Как видно, он хранит все события, которые были произведены GTM.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Кроме того, с помощью datalayer можно вызывать события и хранить данные:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"55cac97b-4cd3-4990-fc48-19e2e2e61bec","width":1920,"height":943,"size":1384134,"type":"gif","color":"ffffff","hash":"","external_service":[],"duration":0,"isVideo":false,"has_audio":false}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

datalayer может вызывать пользовательские события. Здесь например был вызван test_event.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

И есть возможность сохранить переменные с помощью push, в данном случае - data_list.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

И все эти данные хранятся до тех пор, пока страница не будет перезагружена. Что как раз и нужно, для того чтобы сохранить данные о товарах и отправить их сразу при отправке формы заказа.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Дополним наш скрипт на основе полученных знаний:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Был добавлен метод dataLayer.push в который внесено пользовательское событие (event) - ecommerce. Вызов пользовательского события пригодится нам в будущем.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

И добавлены переменные, которые были ранее собраны.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В результате в datalayer будут нужные для e-commerce значения и будет произведен вызов пользовательского события. Давайте протестим работу, добавив к тегу событие на клик кнопки оформить заказ:

"}},{"type":"video","cover":false,"hidden":false,"anchor":"","data":{"title":"","video":{"type":"video","data":{"thumbnail":{"type":"image","data":{"uuid":"2b0468c6-35c4-1ac5-53cc-4b30b31dba5b","width":1280,"height":720,"size":139461,"type":"jpg","color":"e2e5e4","hash":"","external_service":[]}},"width":800,"height":450,"time":0,"external_service":{"name":"youtube","id":"h_gY5e2dqUQ"}}}}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Как видно, всё работает. В datalayer есть актуальные данные товаров, даже при их изменении.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Остался последний шаг - отправить данные в 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 и осталось сделать тег на отправку данных и связать все эти три тега вместе.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Для начала создадим тег отправки данных и привяжем его к пользовательскому событию:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"65a03f5a-ed3f-e599-eddf-614409479462","width":1920,"height":944,"size":1585072,"type":"gif","color":"ffffff","hash":"","external_service":[],"duration":0,"isVideo":false,"has_audio":false}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Был создан тег в виде стандартного шаблона Google Analytics, где типом отслеживания была указана “транзакция”, а в качестве триггера было создано пользовательское событие ecommerce - то которое вызывает datalayer. Следовательно отправка данных будет сразу после того, как в datalayer попадут данные e-commerce.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Теперь осталось привязать событие добавления данных e-commerce при успешной отправке формы. Тут поможет порядок вызова тегов:

"}},{"type":"video","cover":false,"hidden":false,"anchor":"","data":{"title":"","video":{"type":"video","data":{"thumbnail":{"type":"image","data":{"uuid":"cb04dfab-8d12-7a73-8342-1f39ec75d8cf","width":1280,"height":720,"size":116970,"type":"jpg","color":"d3d4d4","hash":"","external_service":[]}},"width":800,"height":450,"time":0,"external_service":{"name":"youtube","id":"KX5-BguH3FQ"}}}}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В теге отправки формы был настроен порядок активации тегов, где был указан тег для e-commerce. То есть тег e-commerce будет вызван сразу после отправки формы и не будет вызван, если произошла какая-то ошибка (неправильное заполнение например).

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В результате выстраивается конечная цепочка тегов:

"}},{"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:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"5c50b03b-5d0d-37da-af73-00746087b101","width":1920,"height":943,"size":2257904,"type":"png","color":"ebebec","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Если еще нет такого расширения - рекомендую поставить. Удобно для отслеживания отправки событий в 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 может быть другим.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Еще например встречались мне таблицы, где содержались не только товары, но и куски заголовков:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"28307621-ecec-f20e-4b02-2547b7d484b1","width":1920,"height":943,"size":3025587,"type":"gif","color":"ffffff","hash":"","external_service":[],"duration":0,"isVideo":false,"has_audio":false}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

for (var i = 0; i < list.length; i++)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

На этой сайте сделано так:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

for (var i = 1; i < list.length - 1; i++)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

То есть цикл начинался не с первого элемента, а со следующего (i = 1, а не 0) и последний элемент не обрабатывался (list.length - 1, длина на 1 меньше).

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

На другом сайте товары были вообще через один:

"}},{"type":"video","cover":false,"hidden":false,"anchor":"","data":{"title":"","video":{"type":"video","data":{"thumbnail":{"type":"image","data":{"uuid":"62f64c9d-b49d-a32c-3f7a-e92b6e6de18e","width":1280,"height":720,"size":246639,"type":"jpg","color":"304f8d","hash":"","external_service":[]}},"width":800,"height":450,"time":0,"external_service":{"name":"youtube","id":"IYMRNY5hswQ"}}}}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Потому элементы нужно было брать с пропуском. И условие цикла было таким:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

for (var i = 0; i < list.length; i =+ 2)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

где каждый цикл, к i прибавлялось не 1, а 2 (i =+ 2)Следовательно и на вашем сайте возможно придется изменить шаблон в зависимости от условий.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Если ваш сайт сделан в конструкторе Tilda, то вот шаблон ecommerce:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"В заключение"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Руководство вышло довольно длинным и спасибо тем смелым людям, которые осилили его до конца. Надеюсь, описанное поможет лучше понять работу функционала GTM и e-commerce в частности.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Я планировал продолжить цикл статей по GTM. Следующей темой возможно станет разбор расширенного e-commerce - как считаете, актуально? И если у вас есть тема для разбора по GTM, пишите в комментариях, буду рад.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Впрочем, иногда текстовый формат сложен - проще один раз увидеть (и сделать самому), чем 100 раз прочитать. Мастер классы по GTM и аналитике, которые я веду в рамках “Весь контекст за 4 месяца” занимают около 5-6 часов демонстрации экрана - в таком формате контент воспринимается существенно проще, даже если у вас совсем немного опыта.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

P.S.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Если моя статья показалась вам не столь сложной, вы можете проверить свои знания о контекстной рекламе при помощи вот такого теста из 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% — а возможно и выше. В агентстве МОАВ уже столкнулись с этим и нашли решение. Рассказываем, что можно сделать.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"3beaedd8-ac0f-476f-e07a-a793ecc3fd1d","width":1283,"height":640,"size":107455,"type":"jpg","color":"171010","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Привет, я Александр Зарайский, один из спикеров курса “Вся контекстная реклама за 4 месяца”. Сегодня я расскажу о «наглых» ставках в РСЯ и как с этим бороться - РСЯ как раз является одной из моих “любимых” тем.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Когда все началось: ручное управление с оптимизацией"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Уже чуть больше полугода, а точнее с 14 сентября 2018 года Яндекс.Директ ввел стратегию «Ручное управление ставками с оптимизацией в сетях». Если кратко, то теперь Яндекс может автоматически понижать или повышать ставку, заданную вручную, в зависимости от прогноза вероятности конверсии. Конечно, и до этого нововведения Яндекс утверждал, что ставки в РСЯ могут автоматически понижаться, если прогнозируется низкая вероятность целевого действия на сайте. Но теперь они могут еще и повышаться.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Хорошо это? Я думаю нет. Ведь никто не хочет переплачивать.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

И думаете, переплата будет небольшая? Как в Google Ads — не больше 30%? Я вас удивлю.

"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"

“Даже поддержка Яндекса не знает, на сколько может быть повышена ставка в РСЯ.”

","subline1":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Автоматическое повышение ставки свыше заданной максимальной при самостоятельном анализе на проектах, которые я вел как 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":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Средняя ставка в РСЯ по всему аккаунту была около 3-5 руб. за клик в зависимости от ситуации в каждой рекламной кампании (РК).

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"072cbcef-0fda-b9bd-40c8-2ad8a90b62b4","width":1420,"height":276,"size":278159,"type":"png","color":"f3f4db","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

После нововведений Яндекса какое-то время также не было никаких изменений. Но в середине ноября ситуация резко изменилась — средняя ставка неумолимо поплыла вверх.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"8bd05b6e-d61a-81fd-55a8-0e5a98b06579","width":1152,"height":347,"size":275216,"type":"png","color":"f3f4dd","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"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":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"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":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Первое — сменить стратегию. Ручное управление ставками с оптимизацией в сетях — это стратегия. А если стратегия нам не нравится, мы имеем право её поменять.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Поддержка подтвердила, что при использовании, например, стратегии «Средняя цена клика» или «Недельный бюджет» превышения максимальной ставки не будет.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"71ad2b6f-e880-7283-d160-9ac8964e1010","width":1920,"height":904,"size":1229503,"type":"gif","color":"ffffff","hash":"","external_service":[],"duration":0,"isVideo":false,"has_audio":false}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"c14b74dc-3f3c-a5af-fa00-b11cc09d11dd","width":1426,"height":176,"size":61303,"type":"png","color":"f5f6da","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Мне это помогло, как видите. Однако есть несколько нюансов. Во-первых, первые сутки стратегия настраивается, и потому превышение ставок в это время может быть. И если хоть как-то потревожить работу стратегии (остановить РК, изменить ставку в стратегии), всё слетит и придется снова ждать сутки запуска стратегии. Во-вторых, перерасход всё же есть. Небольшой и в разы меньше, чем при ручном управлении, но есть.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Второй способ — ключевые цели. Настройка их также находится в настройках кампании.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"772c0a74-9563-9b65-9196-5576d1311919","width":940,"height":318,"size":173576,"type":"png","color":"e8e7e5","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"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":"

Разберем доступные стратегии в РСЯ, чтобы было проще выбрать подходящий вариант.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Ручное управление с оптимизацией в сетях - стратегия, исходя из вышеописанного давно уже не “ручная” и может корректировать ваши ставки. Давайте присмотримся к настройкам этой стратегии.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"1f486886-00e6-e1f6-07b2-27a76eca29ac","width":1510,"height":576,"size":671009,"type":"png","color":"bebdb9","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Видно, что есть настройка только на средний дневной бюджет. В описании стратегии указано, что оптимизация может поднимать и снижать ставку в зависимости от вероятности конверсии. Коротко говоря, о максимальной ставке речи не идет. Только о средней, которую вы можете поставить в ручную. И среднюю ставку, а также средний дневной бюджет это единственное, что вы можете в принципе контролировать в этой стратегии.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Ручная стратегия лучше всего себя реализует в Поисковом размещении, где она не дополнена оптимизацией.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Средняя цена клика - данная стратегия тоже не дает излишнего контроля PPC-специалисту. Суть её в том, что вы можете указать среднюю цену за клик в неделю и недельный бюджет.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"6aabeb46-7a67-bdec-890f-44ae1b372ad7","width":1496,"height":533,"size":576997,"type":"png","color":"c2c1bd","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

При постановке такой стратегии, рядом с каждым ключевым словом появляется приоритет. Ключевые слова с “высоким” приоритетом будут чаще показываться и ставка на них может устанавливаться выше. Ключевые слова с “низким” приоритетом соответственно будут менее активны. И “средний” приоритет будет мало подвержен изменениям:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"0c7e043e-88cd-cccf-bbcb-939c7d7bd49f","width":1583,"height":929,"size":2180630,"type":"png","color":"eaeae7","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Подобная стратегия была бы хороша опять же в Поисковом размещении. А что в РСЯ? Обычно все ключевые слова в хорошей РСЯ-кампании отвечают ЦА и приоритет везде может быть высоким. А вот максимальной ставки по прежнему нет и стратегия может играться со ставками в течение недели как угодно и стараться соответствовать среднему значению.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Средняя цена конверсии - уже более подходящий вариант. Просто благодаря тому, что в этой стратегии есть максимальная цена за клик!

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"a8f9dc66-56f6-1e72-d310-6a63ad127362","width":1512,"height":536,"size":597848,"type":"png","color":"c2c1bd","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Данная стратегия может быть полезна, потому что позволит не только не переплачивать больше максимальной цены за клик, но и поддерживать цену указанной конверсии на уровне. То есть стратегия будет ориентироваться на тех пользователей, которые потенциально могут выполнить указанную конверсию и повышать ставки только для них. Но очевидно, что средняя цена конверсии не сможет быть эффективно подобрана, если не из чего подбирать. Потому данную стратегию не рекомендуется использоваться без имеющейся статистики в аккаунте. То есть аккаунту надо поработать недельку-две, чтобы задумываться о такой стратегии. Кстати, вполне актуальная стратегия для тестирования на Поиске.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Средняя рентабельность инвестиции (ROI) - та же самая идея, как и в стратегии “Средняя цена конверсии”, но за расчет берется ROI, а не цена конверсии. Работает у тех, у кого есть настроенная система ценности целей.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Недельный бюджет - я бы сказал, это рабочая лошадка РСЯ на данный момент. В этой стратегии ничего лишнего и много полезного

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"6311dfa7-13fa-4e66-660c-4642cf3c1865","width":1509,"height":538,"size":605489,"type":"png","color":"c2c1bd","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В рамках этой стратегии можно указать максимальную цену за клик, недельный бюджет, а также тип работы. Типов работы два - либо просто максимальное количество кликов, либо клики с ориентацией на конкретную цель, что позволяет ориентироваться на нужных нам пользователей. В дополнение можно также указать приоритет фраз, если это требуется. По сути, данная стратегия может не так хорошо сработать на Поиске, но в РСЯ дала хорошие показатели, не подвела и защитила от переплат.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"36de1a28-4382-d9e1-d51d-941b508285cb","width":1518,"height":526,"size":577209,"type":"png","color":"c2c2bd","hash":"","external_service":[]}}}]}},{"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":"

Оптимизация в сетях на самом деле — хорошая и рабочая функция. В некоторых проектах подобная оптимизация даже шла в плюс. Подобная возможность оптимизации, кстати, есть в Google Ads. Но Google Ads не навязывает предложенную оптимизацию, и её всегда можно отключить. А процент возможно превышения регламентирован и строго соблюдается.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Было бы хорошо, если бы Яндекс.Директ также перестал навязывать оптимизацию, потому что далеко не во всех случаях она нужна. Впрочем, подобные сложности - это всегда вопрос “заплаток”, которые мы можем поставить, чтобы избежать “слива” бюджета в пустоту.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

А какое ваше мнение об этом нововведении от Яндекса? Как оно повлияло на вас? И как вы справляетесь? Пишите в комментариях.

"}}],"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":"

Чем грозит конфликт ключевых слов в контекстной рекламе? Вы можете получить гораздо более низкий уровень конверсии, чем ожидалось. Рассказываем, как избавиться от конфликтов — быстро и без ручной работы.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"3beaedd8-ac0f-476f-e07a-a793ecc3fd1d","width":1283,"height":640,"size":63619,"type":"jpg","color":"171010","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Привет, я Александр Зарайский, руководитель обучающего центра контекстного рекламного агентства MOAB. Я расскажу вам о подводных камнях кросс-минусации в Google Adwords, с которыми мне довелось столкнуться, и подскажу как их решить.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Разберем причины возникновения конфликтов на примере. Есть, предположим, две группы с ключевыми словами:

"}},{"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 и объявление соответственно ориентировано на эту серию посуды.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Когда пользователь в поисковом запросе укажет что-то вроде:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

«купить набор посуды rondell недорого»

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

— для ответа на запрос подойдут все ключи группы 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":"

В Яндекс.Директ таких проблем практически нет. Есть стандартный инструмент в Директ Коммандере, который может сделать корректировку фраз на пересечение. И в результате пример, приведенный выше, дополнится минус-словами на уровне ключевых слов:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Группа 1:","набор посуды -rondell -недорого","купить набор посуды -rondell","набор посуды недорого -купить -rondell","Группа 2:","набор посуды rondell -купить","посуда rondell -набор -купить","купить набор посуды rondell"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

И всё. От пересечений можно избавиться в два клика. Поговаривают, конечно, что в Яндекс.Директ корректировка фраз слишком мягкая и иногда может не полноценно проставлять кросс-минусацию, но это тема для отдельной статьи.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Что же в Google AdWords? Главная причина в том, что минус-слов на уровне ключевых слов просто нет. Минимум — на уровне групп объявлений. Следовательно, пример для Директа уже не актуален. При этом какого либо стандартного инструмента в том же AdWords Editor для кросс-минусации нет.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Конечно же есть разные способы кросс-минусации. Вот основные варианты:

"}},{"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":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1 пункт требует слишком много времени. Ведь надо еще учесть разные варианты окончания — прописывать всё это вручную невероятно долго.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

4 пункт требует дополнительных действий и тоже — учёта вариантов окончания.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Наиболее актуальными остаются пункты 2 и 3.

"}},{"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":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Было:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Группа 1:","набор посуды -rondell -недорого","купить набор посуды -rondell","набор посуды недорого -купить -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":"

Возникает неприятная проблема, связанная с тем, что переминусовка в Яндекс.Директ или какими либо еще способами осуществляется между ВСЕМИ ключевыми словами в РК. Неважно, что ключевые слова в одной группе — перенос кросс-минусации на уровень групп приводит отличную работу к печальным последствиям.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Сама кросс-минусация начинает минусовать и блокировать показы для ключевых слов. Так, в группе 2, например, больше не будет показов, если в запросе пользователя будут слова «набор» и «купить».

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Но на самом деле — нет нерешаемых проблем.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Сам Google AdWords нам помогает решить возникшую проблему. Когда будет сделана переминусовка каким-либо сервисом, и у вас появятся минус-слова на уровне групп, которые ранее были на уровне ключевых слов, перейдите в веб-интерфейс AdWords. Практически сразу, когда изменения вступили в силу, AdWords укажет на конфликты ключевых слов.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Выглядит примерно так:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"8dc62a22-83fb-061e-57fa-96b8b418918e","width":684,"height":590,"size":91742,"type":"png","color":"606264","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Если перейти на «Посмотреть», то мы увидим следующие рекомендации:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"d7999bdb-18da-18eb-1c6c-7ba8415238e3","width":1283,"height":757,"size":148220,"type":"png","color":"405987","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Google AdWords самостоятельно отмечает минус-слова на уровне групп объявлений, которые мешают корректным показам ключевых слов. И достаточно нажать «применить всё», чтобы такой конфликт убрать везде. Есть, правда, нюансы, но об этом в конце статьи.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В результате мы получим следующее:

"}},{"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":"

Стало:

"}},{"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":"

Еще два аспекта делают этот и любой другой алгоритм кросс-минусации, к сожалению, не совершенным. Но всё решаемо.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Первый аспект: ключевые слова со статусом мало показов. Статус может быть присвоен НЧ ключевым словам и чаще всего выявляются у новых созданных или перенесенных РК. Особенно, если семантика собиралась изначально для Яндекс Директ. А проблема в том, что любая автоматическая переминусовка исключит конфликты между всеми ключевыми словами. В том числе между малопоказниками. А зачем исключать конфликт с теми ключевыми словами, которые рано или поздно будут удалены?

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Решение: перед исключением конфликтов, проработать ключевые слова со статусом мало показов.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Второй аспект: склонения ключевых слов. Не секрет, что для эффективной минусации, в AdWords требуется учесть все варианты окончаний одного и того же слова. И если склонения для минус-слов уже сделаны, то автоматическое отслеживание конфликтов минус-слов будет не точным. Система AdWords предложит удалить базовые минус-слова (которые являются частями ключевых слов), но не созданные искусственно склонения базовых минус-слов.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Решение: Сначала сделать кросс-минусацию, а потом уже склонения.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

И самое важное. Сколь бы ни эффективен был алгоритм кросс-минусации (этот или любой другой), все равно не помешает всё проверить вручную.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Возможно у вас есть другие эффективные способы кросс-минусации? Пишите в комментариях.

"}}],"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":"

Пошаговая инструкция на примере GTM вместо Yagla.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В комментариях к статье «Google Tag Manager вместо Yagla» меня спросили, как реализовать текстовую подмену, если переменная podmena не равна заданному слову, а содержит его. Допустим, если в переменной есть слово «москва», а на сайте должно отобразиться «дешёвые слоны в Москве». Фактически — как использовать текстовую подмену на сайтах ещё эффективнее. Задача нетривиальная настолько, что достойна отдельной статьи.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Привет, я Александр Зарайский, руководитель обучающего центра контекстного рекламного агентства 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. Если вписать в неё значение, которое вы добавили в таблицу поиска — например, «москва», — то новый заголовок подставится автоматически. Вот так:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"21523cf6-70d3-847c-c077-bb1a04dff30a","width":1920,"height":676,"size":1494026,"type":"gif","color":"ffffff","hash":"","external_service":[],"duration":0,"isVideo":false,"has_audio":false}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Но что, если вы захотите, чтобы переменная передавала не вписанные значения, а, допустим, значение {keyword} из вашей UTM-метки? Например, «купить инкубатор москва» или «купить инкубатор в москве», или даже просто слово «москве». Вот что получится:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"a29b87f4-5380-5dc2-4cd5-027f77a3f2f1","width":1920,"height":676,"size":2622192,"type":"gif","color":"ffffff","hash":"","external_service":[],"duration":0,"isVideo":false,"has_audio":false}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"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":"

Вот такой результат мы должны получить:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"e68223ce-defa-c73e-f3a0-8913aa54f980","width":1920,"height":580,"size":2892802,"type":"gif","color":"ffffff","hash":"","external_service":[],"duration":0,"isVideo":false,"has_audio":false}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Давайте разбираться, как это сделать.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

У нас есть готовая таблица поиска podmena, которая принимает три значения и даёт на выходе конкретный текст для заголовка:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"3d22bbc5-b1f1-3e16-0932-1269ff4ded2a","width":1417,"height":742,"size":828396,"type":"png","color":"eaeaea","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Значения подтягиваются из URL переменной «Запросы для подмены».

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"7ed1cb11-ab00-9276-9ab9-226abd2d0266","width":1419,"height":538,"size":537854,"type":"png","color":"ebebea","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В общем, всё, что мы делали для создания подмены, работает корректно.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Но есть проблема. Сейчас подмена работает по алгоритму: если значение podmena равно значению из таблицы поиска, то подменяем заголовок на сайте.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

А нам нужно сделать другой алгоритм: если значение podmena содержит значение из таблицы поиска, то подменяем заголовок на сайте.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Чтобы этого добиться, нужно сделать «прокладку» между podmena и таблицей поиска. Речь о «прокладке» в виде отдельной функции, которая будет проверять значение podmena, искать нужные фразы и передавать результат таблице поиска. Тем самым выполняя условие «содержит».

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Звучит сложно? Всё не так страшно, давайте сделаем и разберём результат.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Для начала создадим новую переменную типа «Собственный код JavaScript» и назовем её «Проверка переменной podmena».

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"57e48665-bf9b-b256-502c-812bbd623019","width":1400,"height":689,"size":4085537,"type":"gif","color":"c4c4c4","hash":"","external_service":[],"duration":0,"isVideo":false,"has_audio":false}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Оставить эту переменную пустой нельзя, потому сразу заполним её кодом. Те, кто хорошо знаком с JavaScript, спокойно добавляют код, сохраняют переменную и читают дальше. Для тех, кто не знает этого языка программирования, я добавил подробные объяснения.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Сам код:

"}},{"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":"

Теперь подробный разбор:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1. Объявление функции JavaScript — комбинация «function()». Рабочие процессы функции обрамлены в фигурные скобки:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

«function() { }»

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Обычно фигурные скобки пишут с новой строки для удобства понимания.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2. Мы создали переменную комбинацией «var [название переменной]». Необязательно называть переменную podmena. Можно, например, назвать переменную «var p», но это будет менее понятно, правда? Чтобы не запутаться в коде, выбирайте понятные названия для переменных.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Любое объявление переменной заканчивается точкой с запятой:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

«var podmena;»

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Так компьютер поймёт, что это отдельная переменная.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3. Мы указали, что переменная podmena равна значению из URL переменной «Запрос для подмены»:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

podmena = {{Запрос для подмены}};

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

При этом «Запрос для подмены» заключается аж в две фигурные скобки с каждой стороны. Это требование GTM для того, чтобы обращаться к другим переменным в аккаунте. Таким образом вы можете обращаться к любым переменным и использовать их в своём коде.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

4. Теперь переменная podmena имеет точно такое же значение, что и «Запрос для подмены», и последнее, что делает функция, это возвращает значение:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

return = podmena;

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Функция будет возвращать значение, где бы она ни была вызвана. Теперь мы эту функцию прикрепим к таблице поиска, и перемычка готова! Смотрите:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"b35ea98d-5bfb-6000-abe7-1882833396f0","width":1400,"height":689,"size":6468797,"type":"gif","color":"ffffff","hash":"","external_service":[],"duration":0,"isVideo":false,"has_audio":false}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Если в таблицу поиска установить в качестве входной переменной новую функцию, будет происходить вот что:

"}},{"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.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Теперь давайте разбираться.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Как видите, мы упростили объявление переменной и запись значения, соединив всё вместе:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

var podmena = {{Запрос для подмены}};

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Работает так же, как и в прошлом коде, только запись короче.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Также мы создали две переменных:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

var stringForCheck = \"москв\";

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

var stringIfSuccess = \"москва\";

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Их роль я объясню чуть позже.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Ещё у нас есть переменная:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

var checkOut = podmena.indexOf(stringForCheck);

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В эту переменную checkOut мы записываем не просто значение podmena, а индекс значения stringForCheck, которое есть в значении podmena.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

То есть stringForCheck у нас равно «москв». Если это значение «москв» будет в podmena, нам вернётся индекс, который покажет, где это слово в строке начинается.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Предположим, что podmena = «инкубатор москва». Тогда при проверке podmena.indexOf(“москв”); индекс будет равен 10. То есть слово “москв” начинается с 10 буквы в строке.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Если искомого слова не найдётся, индекс будет равен -1.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Так мы сделали ищейку, которая находит нужные слова! Это именно то, что нужно для текущей задачи.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Осталось только обработать результат ищейки и выдать ответ. Обработать ответ можно примерно таким образом:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Если слово нашлось в тексте (индекс не равен -1), то функция должна об этом сообщить в таблицу поиска.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В другом случае (индекс равен -1) функция ничего не делает и передаёт результат в таблицу поиска.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Именно такую обработку и совершают последние строки кода:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"if (checkOut > 0)\n {\n \treturn stringIfSuccess;\n }\n return podmena;","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Здесь if совершает проверку переменной checkOut. Если переменная больше нуля (checkOut > 0), совершаются действия в фигурных скобках (return stringIfSuccess). Если checkOut меньше нуля (например, -1), действие в фигурных скобках совершаться не будет.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В конце функции есть значение

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

return podmena;

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

return — команда к завершению функции. То есть когда объявляется return, функция возвращает указанное рядом с return значение (return «что-то»; //например) или может ничего не указывать и вызвать

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

return;

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Тогда функция себя завершит и ничего не вернет после обработки.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

А теперь ещё раз обратим внимание на комбинацию:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"if (checkOut > 0)\n {\n \treturn stringIfSuccess;\n }\n return podmena;","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Если условие if срабатывает, то произойдет

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

return stringIfSuccess;

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Функция завершит работу и вернет значение. А return podmena; уже не сработает, так как функция завершила свою работу ранее.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Если условие if не сработало, то у нас сработает стандартное return podmena.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Вот и всё! С помощью этого кода реализуется алгоритм поиска указанного слова (stringForCheck) и возвращается нужное значение (stringIfSuccess), если фраза найдена. Так что уже неважно, какое ключевое слово находится в podmena, лишь бы там была интересующая нас фраза.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Но можно сделать ещё одно приятное улучшение. Сейчас идёт проверка только одной фразы. А ведь фраз в таблице поиска несколько, и было бы неплохо проверять на наличие каждую. Для этого мы можем улучшить существующую функцию:

"}},{"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":"

Итак. Что мы добавили:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2. Добавился цикл for.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

А теперь расшифруем.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1. У нас есть переменная

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

var stringForCheck = [\"москв\", \"петербург\", \"петербург\", \"красноярск\", \"житомир\"];

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Благодаря квадратным скобкам она хранит не одно значение, а несколько. Такая переменная носит гордое название «массив».

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Теперь доступ к данным переменной можно получить только с указанием индекса желаемого значения. Важно — индекс всегда начинается с нуля.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Например, если мы хотим найти «питер» и вписать это значение в другой переменной, нужно указать:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

var anotherVariable = stringForCheck[2];

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

А если нужно вписать значение «москв», то:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

var anotherVariable = stringForCheck[0];

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2. Цикл for предполагает, что функция несколько раз повторит один и тот же алгоритм действий, указанный в фигурных скобках, пока выполняется условие, указанное в обычных скобках.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Мы задаём условие цикла:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

for (var i = 0; i < stringForCheck.length; i++)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Для этого создаём переменную i и приравниваем её к нулю:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

var i = 0;

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Затем задаём условие:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

i < stringForCheck.length;

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Этот метод stringForCheck.length возвращает значение длины массива stringForCheck. Если посмотреть в код выше, мы увидим, что там записано пять слов через запятую. Соответственно, этот метод вернёт значение 5.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Мы проверяем, что i меньше длины stringForCheck. Пока это справедливо, алгоритм в фигурных скобках будет выполняться.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

И последнее:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

i++)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Эта строчка указывает, что после выполнения всего алгоритма в фигурных скобках цикла for к переменной i прибавляется единица.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Итак, что происходит:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1. Создаётся переменная i и приравнивается к нулю.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2. Сверяется i с длиной массива stringForCheck.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3. Выполняется алгоритм, если i меньше длины массива.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

4. Прибавляется единица к i.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

5. Проверка повторяется с п.2.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Если условие п.2 не выполняется, то цикл for завершается.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Итак, давайте рассмотрим работу алгоритма цикла.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"for (var i = 0; i < stringForCheck.length; i++)\n{\n \tvar checkOut = podmena.indexOf(stringForCheck[i]);\n\n \tif (checkOut >= 0)\n \t{\n return stringIfSuccess[i];\n \t}\n}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Тут всё просто и знакомо. Мы задаём переменную checkOut. Приравниваем её значение к индексу значения массива. И тут есть важный момент: мы ищем индекс переменной stringForCheck[i]. То есть мы используем переменную i, чтобы каждую итерацию цикла for получать каждое значение массива по очереди (сначала 0, потом 1, потом 2 и так далее). Так цикл for проходит по всем значениям массива, а значит, по всем городам, которые записаны в переменной stringForCheck.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Дальше происходит проверка: если индекс текущего значения больше нуля (найдено текущее проверяемое слово), то функция завершается (return) и возвращается значение из другой переменной stringIfSuccess. А в stringIfSuccess у нас записан ряд значений, которые имеют такую же очередь, как и в stringForCheck. Поэтому в таблицу поиска вернётся нужное значение.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Разберём на примере, чтобы было понятно. Предположим, значение podmena = «инкубатор в петербурге»;

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Далее задаются нужные переменные, и начинается цикл for.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Первый цикл, i равно нулю.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Происходит проверка:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"var checkOut = podmena.indexOf(stringForCheck[0]);\n\n \tif (checkOut >= 0)\n \t{\n return stringIfSuccess[0];\n \t}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

stringForCheck[0] у нас равен «москв», а в переменной podmena такого значения нет, потому проверка if будет неудачной, и цикл for пойдёт на следующий круг.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Второй цикл, i теперь равен единице.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Происходит следующая проверка:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"var checkOut = podmena.indexOf(stringForCheck[1]);\n\n \tif (checkOut >= 1)\n \t{\n return stringIfSuccess[1];\n \t}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

stringForCheck[1] у нас равен «петербург». Такое значение в переменной podmena есть. Следовательно, проверка if будет успешной, и функция завершит работу и вернёт значение stringIfSuccess[1], который равен «петербург».

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Так можно проверять множество значений на наличие в pomena и возвращать нужные нам переменные.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Если вы впервые сталкиваетесь с программированием и осилили всю эту информацию, то поздравляю с базовым введением в программирование.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Подробнее обо всем, что я тут рассказал, можно почитать в учебнике JavaScript.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"В заключение"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Эта функция — лишь один из вариантов удобной работы с GTM. Её можно улучшить и сделать более гибкой.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Надеюсь, я подтолкнул вас к новым идеям применения JavaScript для работы с GTM. Если остались вопросы или появились мысли, как можно улучшить функцию, — пишите в комментариях

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

#инструкции

"}}],"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.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Привет, я Александр Зарайский - руководитель обучающего центра контекстного рекламного агентства MOAB. Сегодня я покажу по шагам, как настроить текстовые подмены, подмену картинок, а также использовать другие возможности GTM.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Давайте договоримся сразу: сам по себе 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, и работу с конверсией, и много других полезных вещей.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В рамках таких тарифов было бы круто делать текстовые подмены для лендингов с привязкой к запросу — объективно, это увеличивает конверсию в большинстве случаев. Однако, в случае с Yagla это привело бы к росту цен на наши услуги за счет стоимости самого сервиса. Идеальным выходом стал Google Tag Manager.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Google Tag Manager — это диспетчер тегов. С помощью этого инструмента можно создавать и обновлять теги для сайта или мобильного приложения. Он позволяет самостоятельно управлять тегами и настраивать нужные опции, не отвлекая программиста просьбами типа «А придумай какой-нибудь код, чтобы я мог посмотреть, сколько людей кликнуло на ту красную кнопочку».

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Интерфейс GTM простой и интуитивно понятный, ведь его разрабатывали для маркетологов, а не для айтишников. Есть руководство по установке и настройке. И тонна полезных опций, включая добавление тегов ретаргетинга, отслеживание глубины прокрутки страницы и добавление кнопок соцсетей на картинки. Чуть позже мы рассмотрим несколько.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

А еще GTM без проблем работает с тегами разных служб, обеспечивает простое тестирование и отладку, позволяет настраивать теги даже в загруженных пользователями приложениях и дает возможность проводить любое количество тестов, возвращаясь к самым эффективным версиям.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Ну и поскольку мы сравниваем его с Yagla —

"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"

«GTM позволяет настраивать текстовую подмену на сайте, притом отключать или менять неактуальные варианты можно за несколько секунд.»

","subline1":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Остается вопрос: если 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 можно менять любые элементы на сайте.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Для начала нам потребуется две переменных. Заходим в GTM, затем «Переменные» — «Создать». Первая переменная, которая нам нужна — URL, тип компонента — «Запрос». Ключ запроса и название переменной могут быть любыми. Главное, чтобы они были понятны вам. Например, вы можете указать ключ podmena и название «Запрос для подмены».

"}},{"type":"media","cover":true,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"15f576f2-ead9-5db4-cbeb-5707adca71d4","width":1364,"height":624,"size":3865671,"type":"gif","color":"c0e4fc","hash":"","external_service":[],"duration":0,"isVideo":false,"has_audio":false}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Теперь создаем вторую переменную типа «Таблица поиска» — она будет содержать данные для подмены. В пункте «Входная переменная» выберите название переменной, откуда нужно брать запросы для подмены — в нашем случае это «Запрос для подмены» (очевидно, правда?).

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Затем добавляем несколько строк. Их может быть сколько угодно — зависит от количества вариантов, которые вы планируете использовать. В шаблоне указано, что должна содержать переменная, а в результате — текст, который будет отображаться на сайте. Например, в шаблоне мы можем указать значения 30 и None, а в результате — «Скидка 30%» и «Подарок при покупке» соответственно. Затем указываем имя переменной (например, podmena) и сохраняем.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"c88432aa-aa4d-5c24-4ccc-cec461bf343e","width":1437,"height":651,"size":37707,"type":"png","color":"e9e9e9","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Две переменных готовы. Теперь нам нужно создать тег типа «Пользовательский HTML». В нем пишем код (курсивом выделены части кода, которые нужно заменить):

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

<script>document.getElementById(“IDэлемента”).innerHTML=”{{podmena}}”</script>

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"9223ea2c-13e7-233f-0a8a-da19e2c3c53a","width":1438,"height":593,"size":22354,"type":"png","color":"ebebeb","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Расшифрую: на сайте мы ищем элемент по указанному ID (его можно узнать с помощью опции «посмотреть код» в браузере) и в подставляем в него значение, которое хранится в переменной podmena.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"5fceb4b1-8ca1-b38d-a139-eca266808624","width":1365,"height":624,"size":289367,"type":"png","color":"ef864c","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Для этого тега нужно задать триггер активации типа «Просмотр страницы» и выбрать в настройках «Некоторые просмотры страниц», а затем «Page URL — Содержит — podmena».

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"50ed1f50-6771-67f7-e48c-09d8f29d7d09","width":960,"height":445,"size":3784244,"type":"gif","color":"ffffff","hash":"","external_service":[],"duration":0,"isVideo":false,"has_audio":false}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Вот и все, теперь можно спокойно лить трафик на сайт, отправляя пользователей на страницы с нужным текстом. Так руками за 10 минут бесплатно можно сделать то, что в Yagla предлагают за деньги.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Теперь, если URL будет содержать переменную podmena с нужным запросом, текст в указанном объекте на странице будет меняться. Вот так:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"64d258aa-aee4-b2f4-5033-2d3ae4692207","width":1364,"height":624,"size":1726010,"type":"gif","color":"ffffff","hash":"","external_service":[],"duration":0,"isVideo":false,"has_audio":false}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Важный момент: если вы используете параметр подмены в рекламных объявлениях вместе с UTM-метками, помните о структуре составления параметров в URL. Сначала пишем «?», притом он всегда один. Каждый параметр и значение разделяем «&». Вот пример ссылки с UTM-меткой и параметром подмены:
domen.ru/?utm_source=google&utm_term=cpc&podmena=30

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

А что, если вам нужно менять не только текст, но и картинки?

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Все то же самое. Только потребуется еще одна переменная типа «Таблица поиска», где в результатах вы будете указывать не текст, а путь к картинке. Например, images/mebel/stol1. Допустим, мы назовем эту переменную PodmenaImages.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"7738a96c-d31c-aacc-9e93-bab031c20438","width":1128,"height":621,"size":44271,"type":"png","color":"e5e5e5","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

И в теге типа «Пользовательский HTML» у вас будет написан такой код (то, что выделено курсивом, снова заменяем на нужные данные):

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

<script type=\"text/javascript\">

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

document.getElementById(“ID элемента”).innerHTML=”{{podmena}}”

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

document.getElementById(“ID основной картинки”).src=”{{PodmenaImages}}”

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"0f09814c-53fb-6f98-4069-ad8c105cff67","width":1121,"height":625,"size":33028,"type":"png","color":"34a57b","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Если учитывать, что вариантов текста и картинок обычно немного, справиться с задачей можно очень быстро. А если позднее вы захотите изменить какие-то изображения или варианты текста — ничего даже не придется настраивать заново, достаточно будет изменить некоторые значения в таблицах поиска.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

А что там насчет статистики? Той самой, которая лучше, чем у 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-метки, только для внутренних переходов на сайте.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В списке встроенных переменных выбираем Click URL. Затем создаем новый триггер типа «Клик» — «Только ссылки» и укажите для активации URL нужной страницы.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"ffcdd78e-6d3d-7937-d0a0-48cdc87e34ca","width":1128,"height":429,"size":29248,"type":"png","color":"e8e8e8","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Теперь остается только добавить тег типа 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":"

Здесь есть два варианта: отслеживание переходов по всем внешним ссылкам сразу или только по одной конкретной. Рассмотрим оба.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В обоих случаях нужно создать пользовательскую переменную типа URL и триггер «Клик». Ну и после окончания настроек создать тег отслеживания типа Universal Analytics и заполнить поля. А вот сами настройки будут разные.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Если нужно отследить переходы по всем внешним ссылкам на сайте, в пользовательской переменной выберите тип компонента «Имя хоста», а в источнике укажите {{Click URL}}.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"ba0247ed-3155-1658-9287-01ec9e439c70","width":1151,"height":553,"size":28348,"type":"png","color":"e9e9e9","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Затем в триггере выберите «Некоторые ссылки» и укажите: имя хоста не содержит «доменное имя вашего сайта».

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"dc72c8ed-8b87-10ae-99ea-6c5c0d0b0a56","width":1158,"height":571,"size":35826,"type":"png","color":"e9e9e9","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Если нужно отследить переход только по одной конкретной внешней ссылке, в настройках переменной укажите тип компонента «Полный URL», в поле «Источник» {{Click URL}}.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"43758eb7-7424-1a4a-d42e-f0ba106e4c72","width":963,"height":464,"size":20405,"type":"png","color":"e6e6e5","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

А в триггере выберите «Некоторые ссылки» и задайте настройки: «Конкретная ссылка — Содержит — “ссылка, которую вы хотите отследить”».

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"a613247e-de6c-9089-dadf-3d6be21a1391","width":1139,"height":523,"size":36976,"type":"png","color":"e9e9e8","hash":"","external_service":[]}}}]}},{"type":"header","cover":false,"hidden":false,"anchor":"5","data":{"style":"h2","text":"Добавление тегов ретаргетинга"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Ретаргетинг (вдруг не все в курсе) — это когда рекламу показывают только тем пользователям, которые хоть как-то взаимодействовали с сайтом. Например, просматривали товары, добавляли их в корзину или даже просто заходили, скроллили и выходили. Продать что-то человеку, который уже был на сайте и видел предложение продавца, проще, чем совсем «холодному» клиенту. Результат — реклама и дешевле, и эффективнее.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Теги ретаргетинга добавляются через GTM буквально за минуту. Создаем новый тег типа «Пользовательский HTML». Настраиваем ретаргетинг в кабинете сервиса (ВКонтакте, Facebook и пр.), получаем код, добавляем его через GTM, устанавливаем триггер активации, чтобы код срабатывал на нужных страницах, сохраняем — profit!

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"header","cover":false,"hidden":false,"anchor":"6","data":{"style":"h2","text":"Отслеживание глубины прокрутки страницы"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Эта опция особенно актуальна для лендингов. Если хотите знать, насколько далеко скроллят страницу пользователи и не пора ли убрать пару-тройку блоков, она вам пригодится.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Выберите тип триггера «Глубина прокрутки». Далее идут настройки:

"}},{"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}}.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"516220fd-d870-2152-d516-16cd837a4b6a","width":1136,"height":630,"size":41473,"type":"png","color":"e8e8e8","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Обратите внимание на значение «Не взаимодействие». Если вы хотите, чтобы доскролл влиял на показатель отказов, в это значение нужно вставить переменную типа «Таблица поиска». При ее заполнении учитывайте: если в результате true, событие НЕ влияет на показатель отказов, а если false — влияет. Например, если вы укажете 15 true, 50 false, доскролл до середины будет влиять на показатель отказов, а до 15% — не будет.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"e81c6d52-0ee7-360f-36a8-596621716079","width":1148,"height":540,"size":27193,"type":"png","color":"ebebeb","hash":"","external_service":[]}}}]}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"ec5d2f7e-a22c-d553-4cf2-9effc7af878e","width":1137,"height":608,"size":44676,"type":"png","color":"e8e9e9","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Чтобы отслеживать события скроллинга в 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 есть решение этой задачи.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Активируем встроенную переменную Click Text. Создаем триггер «Клик — Все элементы» и выбираем вариант «Некоторые клики» в настройках. Затем указываем Click Text — Содержит — «Добавить в корзину» (или другой текст на кнопке, который вас интересует). Затем создаем тег типа Universal Analytics для отслеживания события и готово.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"8","data":{"style":"h2","text":"Уточнение показателя отказов"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Google Analytics весьма своеобразно считает отказы. Он записывает в отказ любое посещение, при котором пользователь просмотрел только одну страницу и не совершил никаких действий (не заполнил форму, не нажал на кнопку обратного звонка и пр.) На одностраничниках этот показатель может доходить до 100%. Например, если пользователь зашел на сайт, прочитал текст, позвонил по указанному номеру телефона и закрыл страницу — он все равно будет записан как «отказник». Чтобы уточнить этот показатель и получить более точные сведения, можно через GTM настроить отслеживание длительности посещения без привязки к действиям. Пробыл на странице 20 секунд — уже не «отказ».

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Как это сделать? Выберите тип тега 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». Примерно так:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

<script type=\"text/javascript\" src=”код кнопок соцсетей”></script>

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

И не забываете указать триггер активации, особенно если кнопки должны появляться только на некоторых страницах.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"10","data":{"style":"h2","text":"Внедрение кода микроразметки"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

И тут все тоже предельно просто. Генерируете код с помощью инструмента Schema или аналога, создаете тег типа «Пользовательский HTML», вписываете туда полученный код, а затем настраиваете активацию триггера. И все, на вашем сайте есть микроразметка!

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":" Вместо послесловия "}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Разумеется, данная статья - вовсе не призыв отказаться от одних инструментов (платных) и использовать другие (бесплатные). Если у вас все уже настроено и работает эффективно - к чему что-либо менять?

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Но для тех, кто еще не использует текстовые подмены, попробовать их было бы гораздо проще с помощью данного руководства; в особенности - агентствам контекстной рекламы и фрилансерам, которым, как и нам в MOAB, приходится работать с большим количеством клиентов.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Уверен, что эту статью прочитают в Yagla - поэтому призываю коллег в комментарии - какие еще плюсы Yagla мы не учли?

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

#инструкции #маркетинг

"}}],"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}};