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

Просчитывая HTML, CSS, JavaScript, DOM-дерево движок браузера отображает нам готовый визуальный результат в виде веб-страницы.
DOM (Document Object Model дерево сайта) — это представление HTML-документа в виде вложенной древовидной структуры узлов, которую браузер строит для удобной работы с содержимым страницы. В этой структуре каждый узел соответствует элементу, тексту или атрибуту HTML, организованным в виде вложенного списка или аутлайнера, что визуально похоже на дерево с родителями и детьми.
Зачем это вообще знать интернет-маркетологу или веб-аналитику, спросите вы🤔? – без знания технического маркетинга и устройства работы множества элементов на сайте, которые мы собираемся отслеживать, построить сложные цели и воронки для маркетинга не получится. Так же, кроме понимания отработки модели DOM, нужно хотя бы немного понимать HTML теги, что они делают.
HTML теги
- !DOCTYPE — объявляет тип документа HTML
- a — ссылка
- abbr — аббревиатура
- address — адрес или контактная информация
- area — область на карте изображения
- article — самостоятельная часть содержимого (статья)
- aside — дополнительный контент (боковая панель)
- audio — аудиопроигрыватель
- b — полужирный текст
- base — базовый URL для ссылки
- bdi — изоляция направления текста
- bdo — управление направлением текста
- blockquote — цитата
- body — тело документа
- br — перенос строки
- button — кнопка
- canvas — область для рисования графики
- caption — заголовок таблицы
- cite — источник цитаты
- code — код
- col, colgroup — колонки таблицы
- datalist — список вариантов для поля ввода
- dd — описание термина
- del — удалённый текст
- details — скрытая дополнительная информация
- dfn — определяемый термин
- dialog — диалоговое окно
- div — блочный контейнер
- dl — список определений
- dt — термин в списке определений
- em — выделенный текст (курсив)
- embed — встроенный объект
- fieldset — группа элементов формы
- figcaption — подпись к графическому элементу
- figure — графический элемент с подписью
- footer — нижний колонтитул
- form — форма ввода данных
- h1–h6 — заголовки разного уровня
- head — заголовок документа
- header — верхняя часть блока
- hr — горизонтальная линия
- html — корневой элемент документа
- i — курсивный текст
- iframe — встроенный фрейм
- img — изображение
- input — поле ввода
- ins — вставленный текст
- kbd — ввод с клавиатуры
- label — метка для элемента формы
- legend — заголовок группы элементов формы
- li — элемент списка
- link — ссылка на внешний ресурс
- main — основной контент страницы
- map — карта областей на изображении
- mark — выделенный текст
- menu, menuitem — меню и его пункт
- meta — метаинформация документа
- meter — измерительный элемент
- nav — навигационное меню
- noscript — контент для отключенного JavaScript
- object — встроенный объект
- ol — нумерованный список
- optgroup — группа вариантов в списке
- option — вариант выбора
- output — результат вычислений
- p — параграф
- param — параметр объекта
- picture — контейнер для изображений
- pre — предварительно отформатированный текст
- progress — индикатор прогресса
- q — короткая цитата
- rp, rt, ruby — аннотации для восточноазиатских символов
- s — зачеркнутый текст
- samp — пример вывода программы
- script — скрипт
- section — раздел страницы
- select — выпадающий список
- small — мелкий шрифт
- source — источник медиафайла
- span — строчный контейнер
- strong — сильное выделение (жирный)
- style — стили CSS
- sub, sup — нижний и верхний индекс
- summary — заголовок детали
- table — таблица
- tbody, thead, tfoot — части таблицы (тело, шапка, подвал)
- td, th — ячейки таблицы (данные, заголовок)
- textarea — многострочное поле ввода
- time — дата и время
- title — заголовок документа
- tr — строка таблицы
- track — дорожки субтитров в видео/аудио
- ul — маркированный список
- var — переменная
- video — видео
- wbr — допустимое место переноса слова
Так как с Cookie сейчас полная неразбериха и данные плохо собираются, то через Тег менеджер приходится настраивать сбор данных обращаясь к данным введенным в поля форм чтобы отправлять хешированные email и телефон для расширенных конверсий.
Расширенные конверсии
Расширенные конверсии — это функция в Google Рекламе, которая повышает точность отслеживания конверсий, передавая хешированные данные пользователей (например, email, телефон) с сайта в Google. Эти данные хранятся в зашифрованном виде (через SHA-256) и сопоставляются с учетными записями Google пользователей, что позволяет корректно атрибутировать конверсии даже при ограничениях по использованию сторонних cookie.
Основные моменты работы и преимущества расширенных конверсий:
- Пользователь совершает конверсию на сайте и вводит, например, email или телефон. - Эти данные хешируются в браузере или на сервере и передаются Google вместе с событием конверсии. - Google сопоставляет хеши с аккаунтами пользователей, которые кликали по рекламе, для более точной атрибуции. - Это позволяет компенсировать блокировки cookie и улучшить эффективность автоматических стратегий назначения ставок. - Расширенные конверсии дают более полное представление о пути клиента и помогают повысить рентабельность рекламы.
Такая технология особенно актуальна при росте ограничений использования сторонних cookie и для рекламодателей, которые хотят повысить точность и качество аналитики конверсий в Google Ads и Google Analytics 4
Или на странице полно одинаковых кнопок, у которых цель одна и та же, но они разбросаны по длинному лендингу, а мы хотим создать единое условие, через которое будет происходить фиксация только одного события. Это только пара причин из-за которых маркетологу-веб-аналитику эти технические штучки придется выучить.
Итак, наша база и важность для веб-аналитики Window, DOM, BOM, Java Script:
- Window обеспечивает общий контекст выполнения скриптов и взаимодействие с браузером.
- DOM позволяет отслеживать события на странице (клики, изменения), анализировать структуру и содержимое.
- BOM предоставляет информацию о состоянии браузера и возможность управлять навигацией и историей.
- JavaScript — основной инструмент для программного доступа к данным и отправки аналитических событий.
Еще немного интересной информации хочу сказать про BOM. Это по сути информация из браузера, которую можно извлечь и передать в систему аналитики. Вот пример команды, которая передаёт широту и долготу расположения устройства:
- Откройте веб-страницу в браузере.
- Нажмите F12 или кликните правой кнопкой мыши и выберите “Инспектировать” (Inspect).
- *Перейдите на вкладку “Консоль” (Console)
- Вставьте код и нажмите Enter, чтобы выполнить его.
- Если коносль выдает ошибку и не дает вставить код введите команду “allow pasting”
// Проверяем, поддерживается ли геолокация в браузере
if (navigator.geolocation) {
// Запрашиваем текущие координаты
navigator.geolocation.getCurrentPosition(
function(position) {
// Получаем широту и долготу из объекта position
const latitude = position.coords.latitude;
const longitude = position.coords.longitude;
console.log("Широта:", latitude);
console.log("Долгота:", longitude);
},
function(error) {
// Обработка ошибки, если пользователь отказал или не удалось получить координаты
console.error("Ошибка получения геолокации:", error.message);
}
);
} else {
console.log("Геолокация не поддерживается этим браузером");
}
Вариант от Я.Осипенкова получения ГЕОлокации
Проверка API Geolocation: if(navigator.geolocation){ alert('Ваш браузер поддерживает Geolocation API'); }else{ alert('Ваш браузер не поддерживает Geolocation API'); } Сам код определения местоположения: if(navigator.geolocation){ navigator.geolocation.getCurrentPosition( function(position) { alert('Вы находитесь где то тут: ' + position.coords.latitude + ", " + position.coords.longitude); } ); }else{ alert('Ваш браузер не поддерживает Geolocation API'); } ``` Вариант с обучения Осипенкова
Есть и другие. Чтобы не засорять эфир просто дам совет, пойти в любую нейронку и поболтать с ней на тему команд от BOM которые можно тестировать в своем проекте.
Краткий список основных команд и объектов BOM (Browser Object Model)
Объект window
window.open(URL, name, specs)— открыть новое окно или вкладку браузера.window.close()— закрыть текущее окно.window.resizeTo(width, height)— изменить размер окна.window.moveTo(x, y)— переместить окно на экранном поле.window.innerWidth— внутренняя ширина окна просмотра в пикселях.window.innerHeight— внутренняя высота окна просмотра в пикселях.Объект location
location.href— получить или изменить URL текущей страницы.location.protocol— протокол страницы (http:,https:).location.hostname— доменное имя сайта.location.pathname— путь к файлу на сервере.location.search— строка запроса (параметры после?).location.hash— хеш страницы (например, часть после#).location.assign(URL)— перенаправить браузер на новый URL.location.reload()— перезагрузить страницу.Объект history
history.back()— перейти назад на предыдущую страницу.history.forward()— перейти вперед.history.go(n)— переход на n страниц вперёд или назад (число).Объект navigator
navigator.userAgent— информация о браузере.navigator.platform— информация о платформе (операционной системе).navigator.language— язык браузера пользователя.navigator.onLine— состояние соединения с интернетом (true/false).Всплывающие окна
alert(message)— показать всплывающее окно с сообщением.confirm(question)— окно с выбором OK/Cancel, возвращает true/false.prompt(question, default)— окно с полем ввода, возвращает введённое значение или null.
Самое приятное в моей профессии, что сейчас достаточно внимательно посмотреть на сайт, определить задачу и пойти в чат с ИИ грамотно задав промт по отслеживанию цели. Например геолокацию📍, версию браузера, да что угодно! То есть знать все команды и то как выглядят базовые скрипты JS не нужно, есть все таки польза от Богоизбранного. На лекциях у Я.Осипенкова приводились примеры команд Window в консоли. Выше описано, что это за зверь такой. Идем в нейронную сеть и задаём промт:
Что можно отследить в консоли с помощью команды Window
Ответ от Perplexity
В консоли браузера с помощью объекта Window можно отследить и выполнить множество команд, связанных с управлением окном и взаимодействием с браузерным окружением. Вот несколько примеров того, что можно сделать:
Получить размер окна браузера:
javascriptconsole.log(window.innerWidth, window.innerHeight);Узнать текущий URL страницы:
javascriptconsole.log(window.location.href);
Перезагрузить страницу:
javascriptwindow.location.reload();
Открыть новое окно или вкладку:
javascriptwindow.open('https://example.com');
Закрыть текущее окно (работает если окно открыто скриптом):
javascriptwindow.close();
Получить пользовательский агент (браузер и ОС):
javascriptconsole.log(window.navigator.userAgent);
Работа с куки:
javascriptconsole.log(document.cookie);document.cookie = "test=123";
Отслеживать события окна, например изменение размера:
javascriptwindow.addEventListener('resize', () => console.log('Размер изменён'));Таким образом, в консоли с помощью Window можно получить массу информации о текущем браузере, странице и управлять поведением окна, что полезно для отладки, анализа и веб-аналитики
Еще одна интересная команда это document.title – выдача заголовка страницы. 📃 По сути это тоже самое, что есть в отчётах счётчиков аналитики, обычно называется “Заголовок страницы”. Зачем же его отслеживать, когда он и так есть 🤷. Да это избыточно, но есть нюанс 😁. С помощью этой переменной можно вычислить посещаемость страницы 404, которая обычно появляется динамически без смены URL.
Получается что зная техническую базу и то как устроена могучая компания Window, DOM, BOM, Java Script — докопаться до сути решения будет совсем не сложно, конечно при наличии интереса и мотивации😉 — это вопрос гуманитарный. Нравится или нет, но с консолью разработчика придется посидеть, набить руку. 🤝 С ее помощью проверять отработку событий, искать ошибки и выбирать CSS селекторы для целей.
Полезные ссылки про HTML, BOM, DOM
Что такое DOM? https://itchief.ru/javascript/dom
Теги HTML http://htmlbook.ru/html
Команды BOM https://developer.mozilla.org/ru/docs/Web/API/Navigator
Все эти команды могут стать переменными, передаваться в любую систему аналитики, либо быть частью конверсионной воронки целей, именно поэтому списки этих страшных команд должны быть перед глазами в заметках или чате с ИИ, чтобы в случае чего вспомнить и применить в работе. Зубрить наизусть как исторические даты их не требуется, это просто техническая документация к которой обращаются в нужный момент.
Нюанс по считыванию кода сайта
Код страницы (DOM) загружается сверху вниз. При отладке в Google Tag Manager (GTM) слева можно видеть последовательность загрузки — сначала элементы DOM, потом событие Window Loaded и другие этапы. Иногда бывает так, что переменная получает значение раньше, чем наступает этап срабатывания триггера. В этом случае может возникнуть небольшая задержка, из-за чего переменная примет значение Undefined, и данные не попадут в аналитику.
Чтобы избежать ошибок при передаче данных, лучше перед публикацией в режиме предварительного просмотра проверить, когда переменная получает значение на вкладке Variables. Это помогает убедиться, что тег настроен правильно и данные передаются вовремя.
CSS-селекторы
Прежде чем приступать к работе я рекомендую как и автор курса веб-аналитики Я.Осипенков установить данные расширения в Google Chrome. Без них будет сложно работать 😓:
- https://chrome.google.com/webstore/detail/gtm-variable-builder/feeboihdgpananoagfmbohoogoncndba — крутая штука пишет готовую переменную на JS для GTM
- https://chrome.google.com/webstore/detail/copy-css-selector/kemkenbgbgodoglfkkejbdcpojnodnkg — удобно копировать CSS селектор без консоли
- https://chrome.google.com/webstore/detail/css-and-xpath-checker/aoinfihhckpkkcpholfhmkeplbhddipe — даёт подсветку элементам с которыми мы работаем на сайте
Теперь про селекторы. Любая веб-страница состоит из множества HTML-элементов с разными атрибутами. Самыми популярными из них являются атрибуты ID и Class. Эти атрибуты помогают однозначно с элементом или группирует их на странице. К тому же элементы получают стили через таблицу CSS, которая использует селекторы для применения стилей.
В консоли браузера можно открыть вкладку «Стили» и увидеть, какие CSS-правила применяются к выбранному элементу.
В Google Tag Manager (GTM) для отслеживания кликов часто используются переменные на основе атрибутов элемента: Click ID (по ID) и Click Classes (по классам). Важно понимать, что CSS селектор — это немного другой тип переменной, В GTM это Click Element с правилом «соответствует CSS селектору». CSS селектор всегда существует у элемента, в отличие от отдельных атрибутов, поэтому он более надёжен для настройки целей в GTM.
Кратко по важным моментам для технарей и промтов ИИ, чтобы вспомнить:
- 🆔 атрибут на странице всегда в одном экземпляре
- Атрибутов Class может быть много🤔, одинаковые по стилю элементы объединяют в группу.
- Если у элемента нет ID и Class то точно есть селектор, на него и настраиваем события
- Самый надежный вариант это конечно ID но их часто нет в структуре кода страницы на элементах.
- Чтобы проверить дубликаты в селекторах нужно ввести в консоли команду document.querySelector указав в скобках скопированный.
- Можно из 🆔сделать селектор поставив знак решетку перед ним
- Из Class тоже можно сделать селектор заменив пробелы на точки и вначале поставив точку
- Как видим отслеживать события можно разными конструкциями, они взаимозаменяемы ⚠️.
- Можно использовать разные атрибуты в элементах для отслеживания, а через расширение xPathChecker проверять. Главное не забывать про выделение атрибуты в квадратные скобки “[ ]” если хотим найти множество элементов с одинаковым атрибутом
- CSS селектор при копировании может выглядеть по разному в разных браузерах, но работать будет корректно.
- Если нужно отслеживать кнопки не по порядку, а например через одну и их много, как пример кнопки в корзину в интернет магазинах: в этом случае нужно через запятую указать все селекторы.
- Проверяем список в Checker. Потом вставляем в Тег менеджер весь список. Окошко в Тег Менеджере маленькое, но он проглотит любой объем текста.
- Кстати вбивая в расширение HTML теги можно проверить, что есть на странице: H1, a, div и т.д.
- Проверяем список в Checker. Потом вставляем в Тег менеджер весь список. Окошко в Тег Менеджере маленькое, но он проглотит любой объем текста.
- Существует множество регулярных выражений в использовании селекторов. Например, нам нужно отследить клики только по картинкам формата PNG или только по скачке PDF файлов. Для этого в селектор прописывается спецсимволы. Условия могут быть: начинается с, заканчивается на, и содержит.
- Вернемся к интернет магазину, где много товаров и нам нужно отследить все элементы у которых есть артикул начинающийся с определенных цифр, или одинаковый текст в начале названия карточки.
- Тут применим универсальный селектор со знаком “звездочки”
- Клик по верхнему элементу по CSS селектору, фиксирует всю область. Но бывает что в DOM сайта верхний селектор не применяется к вложенным элементам блока. Для этого через пробел после селектора ставится знак “звездочка”
- Если быть более точным, один и тот же селектор вставляется два раза через запятую, и после второго уже ставим через пробел символ “звеpдочки”
- Данная фишка важна для отслеживания целого блока(зоны) нужного элемента.
- Если быть более точным, один и тот же селектор вставляется два раза через запятую, и после второго уже ставим через пробел символ “звеpдочки”
- Клик по верхнему элементу по CSS селектору, фиксирует всю область. Но бывает что в DOM сайта верхний селектор не применяется к вложенным элементам блока. Для этого через пробел после селектора ставится знак “звездочка”
- Тут применим универсальный селектор со знаком “звездочки”
- Вернемся к интернет магазину, где много товаров и нам нужно отследить все элементы у которых есть артикул начинающийся с определенных цифр, или одинаковый текст в начале названия карточки.
Примеры регулярных выражений и CSS-селекторов для веб-аналитики:
CSS-селектор для элементов с классом, начинающимся на «na»:
css[class^="na"](символ ^ означает "начинается с")CSS-селектор для элементов с классом, заканчивающимся на «na»:
css [class означает “заканчивается на”)
В JavaScript для проверки селектора с помощью регулярного выражения:
// Например, проверить у элемента класс, начинающийся на "na"const elementsStartNa = [...document.querySelectorAll('[class]')].filter(el => /^na/.test(el.className));
// Проверить элементы с классом, заканчивающимся на "na"const elementsEndNa = [...document.querySelectorAll('[class]')].filter(el => /na$/.test(el.className));
Из Лекции Осипенкова про селекторы
document.getElementsByTagName - для HTML-тегов document.getElementById - для идентификаторов (id=) document.getElementsByClassName - для классов (class=)
Выбор по отслеживанию.
ID - идентификатор HTML-элемента; → document.getElementById class - класс элемента; → getElementsByClassName CSS-селектор - селектор элемента; → querySelector или querySelectorAll
Если есть идентификатор (id=) у элемента, то используйте Click ID содержит … Если есть класс (class=) у элемента, то используйте Click Classes содержит … Если нет ни id, ни class, то используйте Click Element сооветствует селектору CSS …
class btn btn-primary btn-lg btn-block → конвертировать в селектор и тогда будет не Click Classes содержит btn btn-primary btn-lg btn-block, а будет Click Element соответствует селектору CSS …
Если у вас id=”..”, то для его конвертации вы в начале пишите # Если у вас class = ”…”, то для его конвертации вы в начале ставите точку . , а далее между пробелами ставите точки .
Специальные символы которые используются при настройках различных атрибутов и селекторов часть правил программирования 👨💻, и это как раз нужно зазубрить. Для настройки целей и триггеров в Google Tag Manager (GTM) при использовании селекторов CSS применяются следующие символы для идентификации элемента по ID, классу и атрибутам:
- Для ID элемента используется символ решетки
#. Например, селектор#button1выбирает элемент с атрибутомid="button1". - Для класса используется точка
.. Например, селектор.menu-itemвыбирает все элементы с классомmenu-item. - Для атрибутов используются квадратные скобки
[], внутри которых указывается имя атрибута и, при необходимости, его значение:[attr]— выбирает элементы с атрибутомattrнезависимо от значения.[attr="value"]— выбирает элементы, у которых атрибутattrравенvalue.[attr^="value"]— атрибут начинается сvalue.[attr$="value"]— атрибут заканчивается наvalue.[attr*="value"]— атрибут содержит подстрокуvalue.
Отслеживание клика по элементу самое популярное событие, которое ежедневно используют все аналитики сайтов. С помощью клика человек попадает на сайт, взаимодействует с ним и отправляет форму обратной связи. Череда кликов ведет к конверсии или ее отсутствию, по идее это главный фактор оценки поведения посетителя сайта. Я обычно выстраиваю такой порядок ценности и важности категорий целей:
- Клики по элементам (кнопки, ссылки)
- Отправка форм (регистрация, заявки)
- Ошибки при заполнении форм
- Продвижение по многошаговым формам или процессам
- Скроллинг страницы (глубина прокрутки)
- Просмотры видео (запуск, пауза, завершение)
- Просмотры страниц и переходы между ними
- Клики по внешним ссылкам
- Авторизация и вход в личный кабинет
- Взаимодействие с модальными окнами и всплывающими подсказками
- Пользовательские действия интерфейса (перетаскивание, наведение)
- Загрузка и скачивание файлов
- Для e-commerce
- Добавление товара в корзину
- Оформление покупки и завершение транзакции
- Использование фильтров и сортировки товаров/контента (для e-commerce)
- Поиск по сайту (запросы в поисковой строке)
- Просмотры категорий товаров и карточек
Большинство этих действий не получится отследить без селектора CSS, ID или Class. Один раз разобравшись с консолью, и деревом сайта возможности по отслеживанию вырастают, что не скажешь про стандартный интерфейс Яндекс Метрики, где с помощью мышки получается настроить клик по кнопке или отправку формы.
Да эти цели будут работать, но гарантию качества данных никто не дает – сайты разные, отслеживание происходит очень часто неверно в автоматических целях и даже в тех, которые забирают селектор CSS с кнопки с помощью Метрики. К тому же кроме кнопок отследить события кликов по другим элементам не получится, интерфейс счетчика этого не позволяет.
В финале прикладываю краткий список алгоритма отслеживания:
Алгоритм отслеживания кликов от Я, Осипенкова
- если у элемента есть id, то в качестве условия активации триггера использовать Click ID содержит/равно
- если у элемента есть class, то в качестве условия активации триггера использовать Click Classes содержит/равно
- если нет 1 и 2, то в качестве условия активации триггера использовать Click Element соответствует селектору CSS
- если напротив Click Element ничего не показывает или показывает что-то в скобках […], то использовать решение из этой статьи: https://osipenkov.ru/track-click-datalayer/
Полезные ссылки по теме
- Что такое DOM? https://itchief.ru/javascript/dom
- Теги HTML http://htmlbook.ru/html
- Команды BOM https://developer.mozilla.org/ru/docs/Web/API/Navigator
- Определение местоположения https://www.poseti.net/articles/html5-geolocation/
- GTM Variable Builder https://osipenkov.ru/gtm-variable-builder/
- CSS-селекторы в GTM. Часть I https://osipenkov.ru/css-selektory-v-gtm-chast-i/
- Селекторы в jQuery. Часть II https://osipenkov.ru/selektory-v-jquery-chast-ii/
- Регулярные выражения в CSS-селекторах и GTM https://osipenkov.ru/regexp-css-selectors/
- Отслеживание событий в GTM с помощью data- атрибутов https://osipenkov.ru/data-attributes-gtm/*
- Отслеживание вложенных элементов в GTM с помощью https://osipenkov.ru/wildcard-all-elements/
- Отслеживание кликов через dataLayer https://osipenkov.ru/track-click-datalayer/
- Google Tag Manager и jQuery https://osipenkov.ru/google-tag-manager-and-jquery/