Счётчикам аналитики не место в файлах темы
- Опубликовано
- • 3 мин чтения•--- просмотров
Трекинг ставят самым быстрым доступным способом, то есть сниппетом в шаблоне темы. Это решение месяцами никак себя не проявляет, а потом порождает три отдельные проблемы, и ни одна из них о себе не объявляет.
Он исчезает
Код темы не переживает саму тему. Обновление, переход на дочернюю тему, редизайн, передача проекта - и счётчика нет. Ошибок при этом не возникает. Панель просто затихает, и к моменту, когда кто-то заметит, вы потеряли месяц данных, который нечем восстановить.
То же самое относится ко второму счётчику, который кто-то добавил в прошлом году в другой файл шаблона и которого теперь никто не может найти.
Лечится плагином с экраном настроек. Пустое поле означает, что ничего не выводится, и это заодно даёт чистый способ держать тестовую копию молчащей без правок кода.
Он соперничает со страницей
При обычном подключении скрипт аналитики просит внимания браузера ровно в те секунды, когда посетитель решает, быстрый ли у вас сайт. Вы тратите отзывчивость загрузки, которая сама по себе влияет на ранжирование, ради измерения этой самой отзывчивости.
Лучше дождаться, пока браузер освободится:
if ('requestIdleCallback' in window) {
requestIdleCallback(loadMetrika, { timeout: 2000 });
} else {
setTimeout(loadMetrika, 2000);
}
Таймаут тут обязателен. Без него страница, которая никогда не простаивает, никогда не загрузит счётчик, и вы тихо перестанете измерять самые нагруженные страницы, то есть самые важные. Запасная ветка нужна по той же причине: requestIdleCallback есть не везде, и проверка возможности без запасного пути даёт дыру в данных вместо мягкой деградации.
Он считает дважды
Сниппеты вставляют по два раза. Кто-то добавил в тему, кто-то другой через менеджер тегов, и теперь каждая сессия учитывается дважды. Трафик как будто подскочил, и отличить этот скачок от настоящего нельзя, пока кто-нибудь не полезет в HTML.
Прикройте вставку:
for (var j = 0; j < document.scripts.length; j++) {
if (document.scripts[j].src === r) {
return;
}
}
Пять строк. Сравните с четвертью решений, принятых по удвоенным цифрам.
Экранировать всё, включая булевы значения
Идентификаторы счётчиков и значения настроек приходят из базы, а базу редактируют люди через форму. Экранируйте идентификатор, а булевы приводите явно вместо подстановки того, что оказалось в PHP:
$clickmap_value = $clickmap ? 'true' : 'false';
Значение false в PHP превращается в пустую строку внутри объектного литерала JavaScript. Получается синтаксическая ошибка, которая убивает весь скрипт вместе со всем, что делит с ним файл. Мелкая деталь, дающая полную остановку измерений, и заметить её очень трудно, потому что страница выглядит нормально.
Произвольный блок в head и его цена
Поле настроек, содержимое которого печатается в <head>, закрывает теги подтверждения прав, сниппеты рекламных площадок и разовые скрипты. Оно избавляет от превращения рутинных просьб маркетинга в релизы и приносит реальную пользу.
Стоит честно понимать, что это такое. Это доступное только администратору поле, которое вставляет неэкранированную разметку на каждую страницу. Так можно, потому что администратор и без того редактирует файлы плагинов, то есть новых возможностей поле не даёт. Так нельзя в момент, когда до него дотягивается роль пониже или значение приходит откуда-то помимо человека, печатающего в админке.
Решить, что вы собираете
Вебвизор записывает поведение посетителя на странице: движения, клики, иногда ввод в формы. Карта кликов и точный показатель отказов мягче, но тоже поведенческие.
У превращения этих функций в переключатели есть побочный эффект, который стоит назвать. Ответ на вопрос «что мы собираем» становится экраном, куда можно заглянуть, вместо археологической экспедиции по минифицированному JavaScript. Если это придётся описывать в политике конфиденциальности, а придётся, то настройки должен читать тот, кто её пишет.
Открыт для работы по контракту
Я доступен для работы по контракту. Если у вас есть интересная идея проекта, запишитесь на звонок через Calendly.
Записаться на 30-минутный звонок