Orium Studios

Заметка из продакшна

Аналитика, которая считала всё и не отправляла ничего

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

Автор ·Опубликовано

Коротко

Сайт этой студии в США правильно классифицировал каждый клик и не доставил в Google Analytics ни одного. Тег аналитики загружается поздно, а событие, отправленное до его настройки, пропадает без всякой ошибки. Вторая ошибка прятала целый блок от его собственного счётчика просмотров. Тесты не видели ни одну из них, потому что обе были правдой о браузере, а не о коде.

SHT-02Заметка из продакшна

01

Ноль в отчёте ещё не результат

На сайте был трафик, страницу с ценами читали, а панель событий в Google Analytics была пуста. Это самый обманчивый экран в нашем деле: пустой отчёт и сломанная труба выглядят одинаково, а новость из них только одна. Честно прочитать ноль можно только так: вы пока ничего не узнали.

02

Первая правка была настоящей и ничего не изменила

Вызов выглядел неправильно. Его переписали в той форме, которую приводит документация, выкатили и на следующий день проверили снова. По-прежнему ничего. Это стоит сказать вслух: правдоподобная правка, которая ничего не меняет, опаснее, чем отсутствие правки, потому что она закрывает вопрос. Заново его открыло только одно: вернуться на выкаченную страницу и посмотреть, что браузер отправляет на самом деле. А он не отправлял ничего.

03

Что было не так на самом деле

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

04

Очередь

Теперь каждое событие сначала попадает в небольшой массив. Таймер проверяет, появился ли тег; когда он появился, массив отправляется по порядку, и очередь снова пуста. Через тридцать секунд она сдаётся: читатель, который заблокировал аналитику, не тот, кого стоит ждать, а очередь, которая никогда не опустошается, становится утечкой памяти с вежливым названием. Пятнадцать строк, и события пошли.

05

Вторая ошибка пряталась в той же неделе

Одно событие так и не срабатывало: счётчик просмотров блока с ценами. Он использовал intersection observer с порогом, который звучит как доля экрана, а на деле означает долю наблюдаемого элемента. Блок с ценами выше экрана телефона, поэтому запрошенная доля была недостижима на том устройстве, с которого читает большинство. Блок всё время был на экране, и observer честно отвечал, что черту он ни разу не пересёк.

06

Почему ни одна не могла уронить тест

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

07

Что студия делает с этим теперь

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

08

Что стоит унести с собой

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

SHT-04Вопросы

Вопросы, на которые отвечает эта заметка.

N01Почему бы просто не загружать тег аналитики первым?
Потому что за это платит читатель. Тег не нужен, чтобы прочитать страницу, а ранняя загрузка спорит с содержимым за первую отрисовку на телефоне. Откладывать его правильно, но тогда момент его появления не контролирует никто, и код, который отправляет события, обязан это учитывать, а не делать вид, что проблемы нет.
N02Как понять, что это происходит на моём сайте?
Откройте свой сайт на телефоне или в узком окне, откройте вкладку сети и нажмите на то, что, по-вашему, отслеживается. Если к вашему сервису аналитики не ушёл ни один запрос, события не существует, что бы ни говорил код. Это занимает около минуты, и это единственная проверка, которая отвечает на вопрос.
N03Пустой отчёт аналитики значит, что никто не покупает?
Он значит, что вы не знаете. У пустого отчёта две причины, которые выглядят одинаково: ничего не произошло или ничего не дошло. Пока вторая не исключена, первая остаётся догадкой, и действуют обычно именно по ней, потому что она звучит как данные.