Связаться с поддержкой

Мы отвечаем по электронной почте, обычно в течение двух дней.

Для защиты от злоупотреблений Google reCAPTCHA проверяет эту отправку; при этом данные передаются в Google. Скрипт загружается только при открытии этой формы.

← Все записи

Показателю отказов нужен один бит, а не трекер

До 28 августа этот сайт не показывал показатель отказов, и страница «о нас» говорила, что это намеренно: понадобился бы сеанс, отслеживаемый через несколько просмотров, а для него — баннер согласия.

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

четыре визита, и что о них говорит каждый источник таблица переходов бит одна страница ничего 0 дважды та же страница ничего 0 две страницы, 40 секунд между ними один переход 1 две страницы, 35 минут между ними ничего 1 четвёртый визит не отказ, и знает об этом только один из источников

Почему её нельзя было просто вычислить

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

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

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

Что данные всё же сказали

27 и 28 августа было 8 669 визитов и 2 817 переходов, то есть в среднем 1,32 страницы на визит. 99 счётчиков из 572 записали хоть один переход.

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

Один бит и никакого нового сбора

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

ON DUPLICATE KEY UPDATE mehr = mehr | (url <> VALUES(url)),
                        last_seen = UNIX_TIMESTAMP(), url = VALUES(url)

Порядок этих присваиваний — вся хитрость. База вычисляет их слева направо, поэтому url в момент сравнения ещё хранит прежний адрес. Поставьте url вперёд — и строка сравнит новый адрес сам с собой, бит навсегда останется нулём, а показатель отказов покажет всем сто процентов. Это отказ, который выглядит ровно как правдоподобный результат, и потому стоило доказать его на выбрасываемой строке, прежде чем ему верить.

Когда час истёк, ночная уборка считает истекающие строки — сколько визитов, сколько из них многостраничных, — пишет одну строку на счётчик и день и удаляет их. Бит живёт час. Никаких cookie и ничего, что его переживёт.

Что здесь обобщается

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

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

Реклама