Определение "режима Инкогнито" в браузере пользователя
Рабочий трюк с использованием Google Tag Manager, позволяющий определить режим Инкогнито в браузере пользователя.
Впервые я наткнулся на такую реализацию в блоге stuifbergen.com (автор - Jules Stuifbergen). Хоть материал и написал в далеком 2016 году, в текущих реалиях и ограничениях, которые постоянно навязывают нам различные законодательные органы в Интернете и сами браузеры, соблюдающие эти самые регламенты, он актуален как никогда.
Что такое режим "Инкогнито"?
Режим Инкогнито (browsing Incognito) или приватный режим (private mode) - это режим веб-браузера, позволяющий вам посещать веб-сайты как обычно, но при этом:
- не записывается, и, следовательно, остается конфиденциальной история ваших просмотров;
- удаляются файлы cookie, что помогает сохранить конфиденциальность личных предпочтений;
- можно войти в несколько учетных записей одновременно. Например, в окне инкогнито можно войти в рабочую учетную запись, а в обычном окне в это же время оставаться в своей личной учетной записи на том же сайте.
При использовании закладки в режиме Инкогнито сохраняется конфиденциальность сеанса просмотра веб-страниц. Как правило, такой режим используют для защиты личных данных и действий в интернете от других пользователей этих же устройств. Режим Инкогнито также является простым способом выхода с веб-сайтов при использовании чужого устройства. Классическая история, например, в компьютерных клубах, где один и тот же компьютер могут использовать много человек за день. Там режима Инкогнито активен по умолчанию на всех устройствах.
Если режим инкогнито не используется, браузеры сохраняют веб-адреса всех посещаемых веб-страниц и хранят эту информацию даже по завершении сеанса просмотра. В дальнейшем это упрощает доступ к открываемым страницам.
После закрытия окна режима Инкогнито файлы cookie не сохраняются. Это значительно снижает вероятность появления рекламы, связанной с посещенными в этом режиме сайтами (ремаркетинг). Тем не менее, существует риск того, что реклама будет отображаться, так как все равно происходит отслеживание IP-адресов пользователей. Кроме того, некоторые пользователи отмечают, что поиск в режиме Инкогнито могут помочь найти более выгодные предложения на отели и авиабилеты. Это объясняется тем, что некоторые туристические сайты могут демонстрировать более высокие цены в зависимости от географического положения пользователей или в результате многократных повторных посещений сайта для проверки стоимости.
Если не входить в свою учетную запись Google, поисковые запросы не будут сохраняться в истории и не повлияют на будущие результаты поиска Google. Аналогично, если смотреть видео на YouTube или других платформах в режиме Инкогнито, при условии, что вы не авторизованы. Совершаемые действия не повлияют на рекомендации, предлагаемые в обычном режиме. Тот же пример с компьютерными клубами, когда вы после другого игрока садитесь за компьютер, открываете проигрыватель и не видите его предпочтений и персональных рекомендаций.
Пользователи, просматривающие ваш сайт в режиме Инкогнито, приходят и уходят без файлов cookie, поэтому вы не сможете оценить полный путь пользователя, количество его сессий, просмотров страниц, связать его источники трафика с первым визитом, будущие продажи, рассчитать LTV, увидеть все покупки и обращения за весь период его взаимодействия с вашей компаний. Каждый раз, когда такой пользователь будет посещать ваш сайт - будет создаваться новый профиль пользователя с уникальным идентификатором (Client ID), в котором будут записаны только данные за текущий сеанс. Повторный заход - новый профиль и новые данные. Счетчики аналитики будут считать такого пользователя ВСЕГДА НОВЫМ. Связать/объединить данные разных профилей и сеансов будет невозможно. Следовательно, никакого детального анализа для такой группы пользователей вы выполнить не сможете.
Определение пользователей в "режиме Инкогнито"
Но пользователей, зашедших на ваш сайт в режиме Инкогнито, можно определить и пометить в отдельный сегмент Яндекс Метрики и Google Analytics 4. А затем исключить из анализа. И делать мы это будем с помощью Google Tag Manager и готового (открытого) решения DetectIncognito.js, опубликованного на GitHub.
По заявлению самого автора, с 2024 года в большинстве современных браузеров можно использовать DetectIncognito.js для обнаружения режима Инкогнито и других режимов приватного просмотра. DetectIncognito.js обнаруживает:
- режим инкогнито в Google Chrome;
- частные окна в Safari для macOS;
- приватные вкладки в Safari для iOS;
- частные окна в Firefox;
- InPrivate Windows в Microsoft Edge;
- InPrivate Windows в Microsoft Internet Explorer;
- частные окна в Brave;
- частные окна в Opera.
На момент написания данной статьи поддерживаются следующие браузеры/версии:
Однако ни я, ни автор DetectIncognito.js не гарантируют 100% работы на всех платформах и во всех браузерах, поскольку обнаружение приватных режимов в браузерах - это, своего рода, гонка вооружений. Посмотрите на решение stuifbergen.com от 2016 года или другие темы на Stack Overflow. Большинство из них уже не работают, хотя с некоторых топиков прошло не так много времени. Неизвестно, будет ли и этот скрипт работать в ближайшем будущем. Но как пишет автор, он будет активно поддерживать работоспособность данного решения для большинства современных и популярных браузеров.
Обязательно посмотрите примечания к репозиторию на Github:
- в некоторых конфигурациях браузера, а также в гостевом режиме Chrome возможны ложные срабатывания (Проблема № 21);
- этот скрипт не обнаруживает вкладки контейнера в Firefox, поскольку они работают иначе, чем в приватном режиме;
- если браузер не может быть идентифицирован, возникнет ошибка;
- скрипт работает только удаленно на веб-сервере с использованием HTTPS. Запуск скрипта локально или с HTTP может привести к ложному результату или он может вообще не запуститься;
- Brave и uBlock Origin в настоящее время блокируют загрузку скрипта из CDN. Размещение скрипта в другом месте должно обойти это.
Итак, перед тем, как приступить к определению "режима Инкогнито" в браузере пользователя, давайте самостоятельно проверим DetectIncognito.js. Перейдите на демонстрационный сайт по ссылке. Если вы это сделали из обычного режима (не Инкогнито), то вы увидите такое уведомление:
Это означает, что вы используете Chrome в обычном окне браузера. А теперь перейдите на сайт detectincognito.com в режиме Инкогнито. Вы должны увидеть другое уведомление:
Это сообщение гласит, что вы используете Chrome в режим Инкогнито. Проверьте это и с другими браузерами, последовательно заходя из обычного режима и приватного. Если вас устраивает то, как определяет DetectIncognito.js режим Инкогнито, переходите к настройке в диспетчере тегов Google.
Настройка DetectIncognito.js в Google Tag Manager
Перейдите в ваш контейнер Google Tag Manager и создайте тег типа Пользовательский HTML. Вставьте в него нижеприведенный код без каких-либо изменений:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<script> function checkIncognito() { return new Promise(function(resolve, reject) { var script = document.createElement('script'); script.src = 'https://cdn.jsdelivr.net/gh/Joe12387/detectIncognito@main/dist/es5/detectIncognito.min.js'; script.onload = function() { detectIncognito().then(function(result) { resolve({ isPrivate: result.isPrivate, browserName: result.browserName }); }).catch(function(error) { reject(error); }); }; script.onerror = function() { reject(new Error("Не удалось загрузить скрипт")); }; document.body.appendChild(script); }); } // Пример использования checkIncognito().then(function(result) { // Создаем уровень данных для передачи информации window.dataLayer = window.dataLayer || []; window.dataLayer.push({ event: 'incognito', // Имя события isPrivate: result.isPrivate, // Значение isPrivate browserName: result.browserName // Значение browserName }); }).catch(function(error) { console.error("Ошибка при определении режима инкогнито:", error); }); </script> |
В качестве триггера активации задайте Инициализация (Initialization), чтобы сам код запускал как можно раньше. Задайте тег название (например, DetectIncognito.js) и сохраните его.
У автора в репозитории функция обнаружения (запуска) выглядит так:
1 2 3 |
detectIncognito().then((result) => { console.log(result.browserName, result.isPrivate); }); |
К сожалению, для работы в GTM она не подойдет, поэтому я модифицировал ее с использованием уровнем данных (dataLayer). Если кратко, то этот код выполняет определение наличия режима инкогнито (или приватного просмотра) в браузере пользователя, используя внешний скрипт DetectIncognito.js и добавляя результаты в dataLayer.
- функция checkIncognito возвращает специальный объект Promise, который будет разрешен, когда данные о режиме инкогнито будут получены;
- внутри функции checkIncognito создается новый элемент <script>, который загружает внешний скрипт с URL автора репозитория;
- после успешной загрузки скрипта (onload), вызывается функция detectIncognito, которая неявно возвращает специальный объект Promise с результатами проверки;
- если проверка проходит успешно, в resolve (callback) передаются объект с двумя свойствами - isPrivate (true или false, показывающее, находится ли пользователь в режиме инкогнито) и browserName (строка с названием браузера);
- если происходит ошибка при загрузке скрипта или при выполнении функции, вызывается reject, что означает, что специальный объект Promise отклоняется с соответствующей ошибкой;
- после вызова функции checkIncognito, промис обрабатывается с помощью методов .then и .catch;
- в случае успешного выполнения (если режим инкогнито был определен) данные isPrivate и browserName добавляются в dataLayer, а также вызывается событие incognito.
- в случае ошибки информация об ошибке выводится в консоль.
Таким образом, данный код позволяет определить, работает ли пользователь в режиме Инкогнито, и передать результаты в Яндекс Метрику и Google Analytics 4 для дальнейшего использования и сегментации пользователей.
Теперь необходимо перейти раздел Переменные и создать две пользовательские переменные типы Переменная уровня данных:
- isPrivate
- browserName
В Google Tag Manager это выглядит так:
Имена переменных уровня данных вводите точно так же, как показано на скриншоте выше! А вот их названия можете задать произвольные. У меня - это Инкогнито - Режим и Инкогнито - Браузер соответственно. Сохраните переменные.
Теперь перейдите в раздел Триггеры и создайте триггер типа Специальное событие с названием incognito:
Сохраните триггер.
Перед тем, как создавать итоговые теги для Яндекс Метрики и Google Analytics 4, проверьте настройки. Активируйте режим предварительного просмотра и перейдите на свой сайт сначала из обычного режима. На шкале событий вы должны увидеть событие incognito, а открыв API Call, две переменные на уровне данных isPrivate и browserName с заполненными значениями:
Если переменная isPrivate показывает значение false, то это обычный режим; если true - режим Инкогнито. В данном случае я зашел из обычного режима из браузера Google Chrome, поэтому код DetectIncognito.js определил значения моего браузера browserName правильно.
Поскольку вы создали переменные уровня данных, то вы можете перейти на вкладку Variables (Переменные) и убедиться, что в них отображаются нужные значения:
Теперь проверьте работу скрипта через режим Инкогнито. Для этого в правом вернем углу режима отладки GTM нажмите иконку с тремя точками и выберите Предоставить доступ:
Скопируйте полученную ссылку:
Откройте в браузере режим Инкогнито и вставьте в него эту ссылку. Нажмите Enter. Вам откроется тот же режим предварительного просмотра Google Tag Manager, только теперь в приватном режиме.
Поскольку браузер тот же, то значение browserName должно быть такое же. А вот значение в переменной isPrivate должно измениться, поскольку мы теперь зашли в режиме Инкогнито. Так оно и есть!
Как видите, скрипт отрабатывает как нужно. Что можно теперь сделать? Во-первых, вы можете создать теги для Яндекс Метрики и Google Analytics 4, передав с отдельным событием параметры события режима браузера и значение браузера. Во-вторых, вы можете использовать созданные переменные уровня данных в других тегах для отправки данных в аналитику. Например, с отправкой формы, чтобы узнать, отправлял ли ее пользователь в обычном режиме или когда зашел на ваш сайт в режиме Инкогнито. И так далее. А затем, когда данные соберутся в вашем счетчике в достаточном количестве, произвести детальный анализ пользователей в % соотношении - сколько из них оставляют конверсии в обычном режиме, а сколько используют приватный. И, конечно же, вы можете отправлять данные не с каждым событием, а как параметры посетителя для Яндекс Метрики и свойство пользователя для Google Analytics 4, чтобы режим браузера привязывался на уровне пользователя.
В качестве примера реализации отправки данных в аналитику я буду использовать как раз последний вариант. И еще предлагаю уточнить условие активации триггера. Поскольку мы хотим отслеживать пользователей, которые зашли на наш сайт через режим Инкогнито, в триггере специального события incognito можем конкретизировать условие - переменная уровня данных isPrivate равно true:
Это даст нам возможность активировать тег и передавать данные не при каждом срабатывании события, а только тогда, когда пользователь посещает наш сайт в режиме Инкогнито.
Теперь можно переходить к созданию тегов и отправке данных в аналитику.
Отправка данных в аналитику
Начнем с Яндекс Метрики. Чтобы передать значение переменной isPrivate для пользователей с режимом Инкогнито и привязать его к карточке пользователя (с привязкой к Client ID), необходимо использовать конструкцию для параметра посетителя с методом userParams.
Перейдите к Google Tag Manager и создайте тег типа Пользовательский HTML. Вставьте в него нижеприведенный код:
1 2 3 |
<script> ym(33437348, 'userParams', {'Режим браузера': {{Инкогнито - Режим}}}); </script> |
, где:
- 33437348 - идентификатор вашего счетчика Яндекс Метрики (замените на свое);
- userParams - метод передачи пользовательских параметров;
- Режим браузера - название параметра посетителя (можете заменить на свое);
- {{Инкогнито - Режим}} - ваша переменная уровня данных, из которой извлекается значение true. Если вы назвали ее по-другому, измените название на свое.
В качестве триггера активации выберите скорректированный триггер специального события incognito, срабатывающий только когда пользователь определен в режиме Инкогнито.
Задайте тегу название и сохраните его. Для Google Analytics 4 создайте тег типа Google Аналитика: событие GA4. Введите идентификатор своего ресурса GA4, название события (например, incognito), а затем, раскрыв раздел Свойство пользователя, задайте ему название (например, incognito). В качестве значения выберите созданную на предыдущем шаге переменную уровня данных:
Вы можете передать значение режима Инкогнито в теге не только на уровне пользователя, но и на уровне события. Для этого в разделе Параметр события добавьте два параметра. В них в качестве значений передайте наименование браузера и сам режим (true/false):
Задайте название тегу и сохраните его.
Теперь вы можете проверить активацию тегов с помощью режима отладки GTM. Поскольку тег в нашем случае сработает только со значением isPrivate: true, вам необходимо сразу же открывать режим предварительного просмотра в Инкогнито.
Далее вы можете перейти в Google Analytics 4 и в интерфейсе открыть инструмент DebugView. Там вы увидеть отправленные хиты, включая событие и созданные выше параметры события и свойство пользователя incognito, которое будет привязано на уровне пользователя:
Не забудьте в интерфейсе GA4 создать специальные определения, а именно:
- если вы передаете только свойство пользователя, то создать специальный параметр с областью действия Пользователь и значением из тега Google Analytics 4 (в GTM);
- если вы передаете со свойством пользователя еще и параметры событий, то создать еще специальные параметры с областью действия Событие и значениями из тега Google Analytics 4 (в GTM);
К сожалению, такого инструмента как DebugView в Яндекс Метрике нет. Но вы можете проверить передачу данных с помощью специальной конструкции, добавив в конце URL-ссылки параметр _ym_debug=2 после ?, чтобы получилось так:
Вам откроется консоль отладки Метрики, на которой необходимо перейти на вкладку Parameters. Там вы должны увидеть идентификатор своего счетчика и параметры, которые отправляются в Яндекс Метрику вместе с хитами. Как видите, параметр посетителя со значением true успешно передается в счетчик Метрики.
Отчеты и сегментация
После проделанных настроек не забудьте опубликовать контейнер Google Tag Manager с изменениями. Информация в Метрике и GA4 появится через некоторое время. Данные в Яндекс Метрике будут доступны в отчете Параметры посетителей:
Эти же данные будут привязаны к конкретному пользователя и его уникальному идентификатору. Для этого перейдите в раздел Посетители, на вкладке Посетители сверху выберите Люди, у которых - Параметры посетителей и найдите параметр посетителя для режима Инкогнито:
Применив сегментацию, вы увидите в таблице профили только пользователей, которые посещали ваш сайт в режиме Инкогнито:
Через некоторое время (по мере сбора данных) таких пользователей с Инкогнито будет становиться больше. Общее количество всех визитов по каждому пользователю будет равен 1, так как в режиме Инкогнито файлы cookie не сохраняются, и при повторном заходе на сайт в аналитике всегда будет создаваться новый профиль. Связать его предыдущие действия с новыми не получится:
Раскрыв профиль пользователя, внизу его карточки вы увидите привязанный к его уникальному идентификатору (Client ID) параметр посетителя с режимом Инкогнито:
Таким образом, теперь вы можете в отчетах Метрики использовать параметр посетителя для сегментации пользователей, зашедших на ваш сайт с помощью режима Инкогнито, сравнивать его с остальными посетителями сайта или исключать этот сегмент из анализа и статистики.
В Google Analytics 4 данные по событиям будут доступны в ваших отчетах и Исследованиях примерно через 24 часа, или на следующий день после настройки. Создайте Исследование в свободной форме, указав в качестве параметров Название события и собственные специальные параметры по режиму и браузеру, а показателем - Количество событий. В полученной таблице найдите событие incognito, и, нажав, правой кнопкой мыши на холсте по этому событию, выберите пункт Включить только выбранное:
В результаты вы увидите таблицу с нужным набором данных по названию браузеру и режиму, который использовал пользователь в момент захода на ваш сайт:
Так можно проанализировать события и его параметры (например, исключить пользователей с режимом false, поскольку они использовали обычный режим, и оставить только true с Инкогнито, ну и т.д.). А можно создать сегмент на уровне пользователей, используя настроенное свойство:
С условием, содержащем значение true:
Тогда в сегмент пользователей попадут только те пользователи, кто был определен с режимом Инкогнито. Далее вы можете посмотреть их карточки пользователей (по аналогии с Яндекс Метрикой). Сделать это можно с помощью Исследования Статистика пользователей.
Даже их этого скриншота по профиля пользователей видно, что один человек за выбранный период приобрел на моем сайте ответы за 500 руб., находясь в Инкогнито. Видимо, желал остаться незаметным 😉 Но мы и его отследили.
Еще в Google Analytics 4 вы можете использовать сравнения, только на уровне стандартных отчетов. С их помощью можно быстро построить срез с Инкогнито и проанализировать его в сравнении с другими критериями.