Оповещения о переходах с пиратских сайтов в Telegram
Личный кейс по оперативному мониторингу и отслеживанию переходов пользователей с пиратских сайтов в Telegram с использованием Google Tag Manager.
Начало
Это третья статья в моем блоге, посвященная аналитике пиратов. С другими публикациями вы можете ознакомиться ниже:
Что на этот раз? Я уже неоднократно делился своим мнением относительно "пиратов" и пиратского контента, и много раз ловил их с поличным, как организаторов складчин, так и тех, кто записывался в качестве участников. Не все случаи были освещены публично. Благо с развитием технологий, разведке по открытым источникам (OSINT), теневому Интернету (Даркнету) и слитым базам данных в сеть можно всего за пару кликов установить личность злоумышленника. Деанонимизация верхнего порядка, с персональными данными и фотографиями. А далее - составление актов о правовой защите интеллектуальной собственности, Московский городской суд, Роскомнадзор и удаление пиратских ссылок.
Чем больше уделяют внимание мне, тем больше я уделяю внимания этому вопросу. Разумеется, многие из организаторов складчин находятся за пределами России, поэтому на них не распространяются законы Российской Федерации. Тоже самое касается и пиратских сайтов - стоит только одному порталу выложить ссылку на продукт, как она тут же распространяется по всем доступным ресурсам Интернета. Отрубишь одну голову, две другие займут ее место (с). Да и защита интеллектуальной собственности в нашей стране находится в зачаточном состоянии, поэтому какой-либо помощи ждать не приходится. Что там говорить - не только в стране, это общемировая проблема.
Да, существуют различные способы защиты авторского контента от нелегального копирования и распространения в Интернете, как в техническом плане (водяные знаки на видео, дробление его на отдельные фрагменты по примеру Vimeo, невозможность копирования или скачивания, и т.д. и т.п.), так и в правовом. Например, самостоятельное написание владельцам платформ с пиратским контентом. Некоторые из них удаляют ссылки после соответствующего запроса, а некоторые игнорируют просьбы. Тот же Яндекс игнорирует жалобы на рекламу и контент пиратских ресурсов, аргументируя это тем, что компания не влияет на органическую выдачу и не удаляет сайты из поиска, и что нужно лично писать владельцу площадки. Google в этом плане более гибок и отзывчив. Но все это дает краткосрочный эффект или не дает его вовсе. Этим и пользуются владельцы пиратских платформ.
Еще на рынке есть компании, которые занимаются оперативным удалением пиратского контента. По их заявлениям, они выполняют регулярный мониторинг подобных сайтов, выявляют нарушителей, отправляют претензии администраторам сайтов, хостинг-провайдеру и доменному регистратору, осуществляют контроль удаления нарушений, а также взаимодействуют с ФАС, прокуратурой и прочими надзорными органами. Но и здесь нельзя быть полностью уверенным в честности таких контор, поскольку есть мнения, что они сами могут создавать темы на пиратских сайтах, а потом уже оповещать об этом авторов контента. Чтобы продвигать свои услуги, сами создают проблему и потом ее решают.
Судиться? Не могу сказать, что моя деятельность сильно страдает от их действий, но и пройти мимо я тоже не могу. Не такие обороты и не такие репутационные потери, которые бывают у крупных онлайн-школ, когда их продукт сливают в сеть. Скорее, здесь больше теряет злоумышленник (=организатор), потому что у него появляется уникальная возможность "увековечить" себя на моем сайте и попасть в черный список работодателей интернет-маркетинга.
Для каждого найдется место в моем блоге
Как вы думаете, если станет известно, что человек занимается незаконным распространением чужой интеллектуальной собственности и нарушает закон, многие digital-агентства захотят сотрудничать с ним, доверять ему внутренние дела компании, базу знаний, документы? Конечно нет.
Для меня - это очередной инфоповод, возможность получить широкую огласку в определенных слоях общества, а также выпустить новый материал в блоге. Если бы я переживал за распространение, то вряд ли так бы открыто это обсуждал в своем блоге. Наоборот, имело смысл бороться с этим без всякой огласки, не создавать эффект Барбары Стрейзанд.
Тем более, что большинство слитых курсов размещены бесплатно на моих каналах YouTube и Rutube. И очень часто такие складчины создаются некомпетентными людьми, которые плохо мониторят актуальность материалов, выдавая старый контент за новый. Участники складчин не перепроверяют информацию и покупают то, что уже и так находится у меня в свободном доступе.
Поскольку полностью избавиться от этой проблемы невозможно, мне стало интересно, а что я сам могу сделать такого, что позволило бы мне оперативно находить новые складчины и мониторить переходы с пиратских сайтов. Ведь перед тем, как человек становится участником складчины, он подробно изучает материал автора, в том числе и переходит на оригинальный сайт, с которого ведется продажа онлайн-продукта. Организатор делает то же самое. Некоторые переходят с сайта складчины и осуществляют покупку. Таким образом, они оставляют след перехода с конкретного пиратского сайта (как referral):
После этого я могу найти транзакцию пользователя по его идентификатору (благодаря настроенной электронной торговле), а затем посмотреть личные данные покупателя в администраторской панели или CRM - его e-mail, телефон, которые он ввел в процессе оформления заказа, страну, IP-адрес, реквизиты банка и многое другое. Я буду знать дату оплаты курса и его активность на платформе GetCourse (там размещены материалы моих онлайн-курсов). С этого момента я начну наблюдать за этим человеком и смотреть насколько осознанно и полноценно он проходит обучение.
Особенность моего обучения состоит в том, что каждый следующий урок открывается после сдачи и проверки домашнего задания предыдущего урока. Таким образом, организатор складчины ни при каких обстоятельствах не сможет получить полный доступ ко всем материалам курса после его оплаты. Ему еще нужно будет пройти курс и даже чему-то научиться.
Да, все же это не гарантия того, что человек не выложит материалы в сеть. Но как я писал выше, оказаться в черном списке и быть раскрытым публично заставляет некоторых одуматься и не совершать подобных ошибок. Бывает такое, что организатор складчины вообще никакого отношения не имеет к интернет-маркетингу, и попасть в black-list - это для него ерунда.
Но тут срабатывает другой фактор - ему придется пройти мой курс от начала и до конца, иначе он не получит все материалы и не сможет поделиться ими со всеми участниками раздачи. Такое уже было - на одной из складчин собралось более 100 человек, но организатор не смог пройти мой курс, и складчина сорвалась. Обязательства не были выполнены, а мой онлайн-курс так и не выложили в открытом доступе.
Некоторые авторы онлайн-курсов борются с таким распространением посредством установления высокой цены за свой продукт. Чем дороже курс, тем дольше будет собираться складчина, тем больше нужно участников и больше денег на выкуп.
Как разоблачить мошенника? Самое простое - это посмотреть отчет В реальном времени в Google Analytics 4:
Если в источнике трафика числится реферальный переход с одного из пиратских сайтов, значит за таким пользователем нужно установить персональное наблюдение. А добавив сравнение, еще и посмотреть на какую конкретно страницу перешел человек и что он еще делал, какие события на сайте совершал:
Если не в реальном времени, то можно посмотреть статистику в стандартных отчетах и различных Исследованиях, построить путь пользователя и воронку событий.
Другой способ - настроить в Google Analytics 4 подсказки с ежедневным мониторингом изменений показателей. Например, рост числа активных пользователей с определенных источников (пиратских площадок):
Но как это поможет в борьбе с пиратами? Полностью искоренить такую сложную проблему не получится. Да и со 100% вероятностью нельзя сказать о том, что человек, даже перешедший с пиратского сайта, после покупки будет распространять материал в Интернете. Вполне вероятно, что он покупает для личного пользования, или просто впервые познакомился с нами и нашей деятельностью на складчине. И мы настолько понравились человеку, что он перешел с пиратского сайта и совершил официальную покупку. И тогда это уже не нарушение, а скрытая реклама (спасибо складчинам за бесплатное продвижение) в нашу пользу!
Представляете, если сразу такому пользователю, перешедшему с пиратского сайта, показывать устрашающий баннер, при клике на который открывалась бы эта статья, какой был бы WOW-эффект!
Но для собственного спокойствия и дополнительной осведомленности мы можем настроить мониторинг переходов с пиратских сайтов в Telegram со всеми подробными данными о сеансе пользователя (источник трафика, время перехода, URL-адреса просмотренных страниц, IP-адрес посетителя, был ли визит через VPN и в режиме Инкогнито, данные о покупке, включая личную информацию и все совершенные действия/события), чтобы:
- тщательнее контролировать ситуацию;
- оперативнее реагировать на "пиратский трафик";
- понять, в какой момент была создана складчина (хотя бы приблизительно);
- узнать, когда началось распространение продукта;
- определить, когда завершился сбор средств на выкуп, и кто потенциально его может приобрести.
Как только я узнаю о новой складчине, то сам становлюсь участником раздачи. Это дает мне возможность:
- сократить период анализа и круг подозреваемых;
- целенаправленно наблюдать за активностью пользователей, проявляющих интерес к тому или иному онлайн-курсу после перехода с пиратского сайта;
- сохранить всю информацию о сессии такого пользователя. Если он обращается в онлайн-чат и задает наводящие вопросы по обучению, оплате, условиях прохождения и т.д. - все это дополнительно фиксировать в log-файле;
- к такому человеку проявить дополнительное внимание после покупки - задавать больше вопросов после каждого урока, открывать уроки медленнее, если человек торопится и хочет быстро завершить курс, прометить лично такому слушателю материалы онлайн-курса (водяным знаком, зашитым кодом в какой-нибудь файл и т.д.).
Человек думает, что ему открыли точно такой же курс, как и всем, а на самом деле нет. И когда копия онлайн-продукта попадает в сеть, можно со 100% вероятностью сказать кто его распространил.
А если вы используете еще и Яндекс Метрику, то посмотреть визит такого пользователя в Вебвизоре на предмет нехарактерного движения мыши, копирования каких-то абзацев на странице сайта и прочее. Как это было в другой складчине.
И все это я покажу как настраивать далее с использованием диспетчера тегов Google. Пример оповещения "пиратского перехода" в Telegram выглядит так:
Приступаем?
Сразу же хочу отметить, что нижеприведенный способ отслеживания таких переходов не является 100% надежным, поскольку сайты умеют скрывать Referer (URL исходной страницы, с которой был осуществлен переход на текущую страницу). А именно благодаря этому функционалу мы бы отделяли переходы с пиратских сайтов от всех остальных переходов, чтобы затем отправлять такие уведомления в Telegram. Так же можно опционально запрещать/разрешать передавать реферер или делать несколько редиректов для того, чтобы реферер терялся. Некоторые владельцы пиратских площадок знают об этом и успешно пользуются.
Настройка в Google Tag Manager
В самом начале нужно определиться с итоговым результатом, какие конкретно данные вы хотите отслеживать и какие уведомления планируете отправлять в Telegram. Все события пользователя, все просмотренные страницы или только общую информацию один раз за сеанс? Нужен ли будет IP-адрес, время перехода, URL-адрес страницы входа, Client ID, географические данные, технические характеристики (браузер, модель устройства и т.д.)? Обо всех этих отслеживаниях я подробно писал в других материалах моего блога. Здесь я лишь обобщаю весь накопленный опыт и предоставляю окончательное решение.
Итак, в моем примере я буду отслеживать:
- начало "пиратской сессии";
- IP-адрес пользователя;
- файлы cookie Яндекс Метрики (_ym_uid) и Google Analytics 4 (_ga). Это даст мне возможность детальнее проанализировать статистику в счетчиках аналитики, а также просмотреть визит пользователя в Вебвизоре;
- источник перехода - откуда пользователь перешел, с какого "пиратского сайта";
- время совершения события;
- номер сеанса - был ли он первым, вторым, третьим или человек уже многократно посещает мой сайт;
- страница входа (первая страница в сеансе);
- использовал ли пользователь режим Инкогнито;
- User-Agent;
- географические данные (страна, город);
- технические данные браузера и тип устройства пользователя.
Думаю, что этого будет достаточно. Вы же можете создать свою собственную конфигурацию для отправки.
Отслеживание Client ID
Дополнительные материалы по этой теме:
- ClientID в Яндекс Метрике
- 3 способа получения ClientID Яндекс Метрики с помощью Google Tag Manager
- Сквозная аналитика в Яндекс Метрике
- Кейс по настройке сквозной аналитики
- 1 Client ID - 2 разных профиля посетителя в Яндекс.Метрике. Как?
- Почему дата первого визита не равна метке ClientID в Яндекс Метрике?
- Отслеживание Client ID в Google Analytics 4
- "Мы входим в эру, в которой существуют две модели аналитики"
- Файлы cookie в Google Analytics
- Передача Client ID через Google Tag Manager
- Способы идентификации в Google Analytics 4
Самый простой способ извлечь уникальные идентификаторы пользователя для нашей системы мониторинга - создать две пользовательские переменные типа Собственный файл cookie. Одна будет иметь название _ym_uid, а другая _ga. Для Яндекс Метрики и Google Analytics 4 соответственно.
Сохраните две переменные.
Время совершения события
Дополнительные материалы по этой теме:
Для отслеживания времени совершения нужного нам события проще всего использовать нижеприведенный код и пользовательскую переменную типа Собственный код JavaScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
function() { var now = new Date(); var tzo = -now.getTimezoneOffset(); var dif = tzo >= 0 ? '+' : '-'; var pad = function(num) { var norm = Math.abs(Math.floor(num)); return (norm < 10 ? '0' : '') + norm; }; return 'Дата: ' + now.getDate() + '.' + pad(now.getMonth()+1) + '.' + pad(now.getFullYear()) + ' ' + '|' + " " + 'Время: ' + pad(now.getHours()) + ':' + pad(now.getMinutes()) + ':' + pad(now.getSeconds()) + ' ' +'|' + ' ' + 'UTC ' + dif + pad(tzo / 60) + ':' + pad(tzo % 60); } |
В Google Tag Manager это будет выглядеть так:
Сохраните переменную.
Или еще проще код:
1 2 3 4 5 6 7 8 |
function () { var Data = new Date(); var Hour = Data.getHours(); var Minutes = Data.getMinutes(); var Seconds = Data.getSeconds(); var Time = Hour + ":" + Minutes + ":" + Seconds; return Time; } |
Номер сеанса пользователя
Дополнительные материалы по этой теме:
Номер сеанса легко определить с помощью кода ниже, который вам необходимо добавить в новую переменную типа Собственный код JavaScript:
1 2 3 4 |
function () { var users = document.cookie.match('(^|;)\\s*_ga_BMPB32GC7T\\s*=\\s*([^;]+)').pop().split('.')[3]; return users; } |
В Google Tag Manager это будет выглядеть так:
Сохраните переменную.
Отслеживание User-Agent
Дополнительные материалы по этой теме:
Настройка с помощью GTM еще проще, потому что нужно создать пользовательскую переменную типа Переменная JavaScript и добавить только navigator.userAgent в качестве имени глобальной переменной:
Сохраните переменную.
Режим Инкогнито
Для определения режима Инкогнито воспользуйтесь этим руководством. В нем подробно описаны все шаги настройки. Краткая настройка:
- создается тег типа Пользовательский HTML с подключением DetectIncognito.js
В качестве триггера активации можно задать Инициализация (Initialization). Сохраните тег.
- создаются две пользовательские переменные типа Переменная уровня данных - isPrivate (был ли заход из Инкогнито или нет) и browserName (название браузера).
Сохраните переменные.
Определение IP-адреса
Дополнительные материалы по этой теме:
- Передача IP-адреса в Google Analytics 4
- Передача IP-адреса в Яндекс Метрику
- IP-адрес с помощью Google Tag Manager
- Передача IP-адреса посетителя в Universal Analytics
- Определение геолокации пользователя с помощью GTM
Современные браузеры по соображениям безопасности запрещают веб-сайтам напрямую доступ к IP-адресу пользователя. Это сделано для защиты конфиденциальности пользователей. В связи с этим невозможно напрямую отслеживать IP-адрес пользователя только с помощью JavaScript на стороне клиента. Альтернативные решения - использовать сторонние API или отслеживать IP-адрес на стороне сервера. Об этих примерах как раз и описывается в вышеприведенных статьях.
Но вы можете попробовать обратиться за помощью к нейросети (ChatGPT, Gemini, YandexGPT, DeepSeek, Google AI Studio, GigaChat и др.). В этой статье своего блога я как раз просил у Gemini и ChatGPT написать мне код для Google Tag Manager по определению IP-адреса пользователя. Вопрос звучал так: Напиши мне JavaScript код на ECMAScript ниже 2015, который бы позволил отслеживать IP-адрес пользователя на сайте, и чтобы это значение сохранялось в глобальной переменной JavaScript.
DeepSeek мне ответил очень похоже:
Поэтому можно воспользоваться текущим решением и добавить в отдельный тег типа Пользовательский HTML нижеприведенный код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<script> // Создаем функцию для получения IP-адреса function getIP() { var xhr = new XMLHttpRequest(); xhr.open("GET", "https://api.ipify.org?format=json", false); xhr.send(); if (xhr.status === 200) { var response = JSON.parse(xhr.responseText); return response.ip; } } // Получаем IP-адрес пользователя и сохраняем его в глобальной переменной window.userIP = getIP(); </script> |
В Google Tag Manager это будет выглядеть так:
В качестве триггера активации задайте Инициализация (Initialization). Сохраните тег.
Значение IP-адреса будет храниться в глобальной переменной userIP. Для его извлечения и передачи в Google Analytics 4 создайте пользовательскую переменную типа Переменная JavaScript с этим именем:
Сохраните переменную.
Географические данные (страна, город)
Дополнительные материалы по этой теме:
Для определения географических данных пользователя на сайте можно воспользоваться несколькими способами:
- API геолокации (cовременные браузеры поддерживают API геолокации, который позволяет получить координаты пользователя (широту и долготу);
- сторонние сервисы (API от ipinfo.io, ipapi.com или других провайдеров, в моем блоге есть статья по сервису ipgeolocation.io);
- библиотека GeoIP (если вы хотите использовать серверное решение, можно интегрировать библиотеку GeoIP, которая определяет местоположение по IP-адресу. Это может быть более надежным и не требует разрешения от пользователя на доступ к геолокации).
Примечание: определение географических данных всегда является приблизительным, поэтому не ждите от такой настройки точности.
К сожалению, ни я, ни нейросети не знают бесплатных решений, где бы не требовалась регистрация и получение токенов. Все обращения к API являются платными, такие SaaS-решения стоят денег. Поэтому вы можете пропустить этот шаг и не повторять за мной текущее отслеживание, а можете создать аккаунт на ipgeolocation.io, получить ключ API и воспользоваться готовым шаблоном тега Симо Ахавы (Simo Ahava).
В результате вы должны получить тег примерно с такими настройками:
В качестве триггера активации задайте Инициализация (Initialization) и конкретизируйте его дополнительным условием. Поскольку мы будем отслеживать только переходы пользователей с пиратских сайтов, мы можем активировать тег когда встроенная переменная Referrer содержит один из представленных вариантов:
1 |
sklad|sliv|sharewood|freekurses|kursstore|kursstore|kurshub |
Вы можете составить свой список и перечислить домены пиратских сайтов с использованием регулярного выражения и указав лишь часть URL-адреса, а не весь домен или ссылку. И поможет вам в этом ваши Яндекс Метрика или Google Analytics 4. Просто посмотрите статистику за предыдущие периоды. Вероятно, ваш счетчик аналитики уже зарегистрировал различные источники трафика с пиратских сайтов. Возьмите этот список за основу.
Сохраните тег.
Создайте две пользовательских переменных типа Переменные уровня данных. Одна - geoData.city (для определения города), а другая - geoData.country_name (для определения страны):
Если вы будете использовать сервис IP Geolocation, то он также определяет IP-адрес пользователя, поэтому отдельную настройку выше можно не выполнять. Просто создайте еще одну переменную уровня данных с именем переменной уровня данных geoData.ip.
На бесплатном тарифе ipgeolocation.io предоставляет 1000 запросов к API ежедневно (в месяц - 30 000). Этого должно хватить для нашей задачи.
Тип устройства пользователя
Дополнительные материалы по этой теме:
Для определения типа устройства пользователя (desktop, tv, mobile, tablet) можно использовать библиотеку UAParser.js, которая анализирует User-Agent строку браузера. Эта библиотека бесплатна, не требует регистрации или токенов, и работает на чистом JavaScript.
Создайте еще один тег типа Пользовательский 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 |
<script> // Глобальная переменная для хранения типа устройства var userDeviceType = null; // Функция для определения типа устройства function detectDeviceType() { // Создаем экземпляр парсера var parser = new UAParser(); var result = parser.getResult(); // Определяем тип устройства if (result.device.type === 'mobile') { userDeviceType = 'mobile'; } else if (result.device.type === 'tablet') { userDeviceType = 'tablet'; } else if (result.device.type === 'smarttv') { userDeviceType = 'tv'; } else { userDeviceType = 'desktop'; // По умолчанию, если тип не определен } console.log('Device type:', userDeviceType); } // Подключаем библиотеку UAParser.js var script = document.createElement('script'); script.src = 'https://cdn.jsdelivr.net/npm/ua-parser-js/dist/ua-parser.min.js'; script.onload = detectDeviceType; // Вызываем функцию после загрузки библиотеки document.head.appendChild(script); </script> |
К слову, скрипт выше любезно предоставил все тот же DeepSeek. В Google Tag Manager это будет выглядеть так:
В качестве триггера активации задайте Инициализация (Initialization). Сохраните тег.
После этого создайте пользовательскую переменную типа Переменная JavaScript. Задайте имя глобальной переменной userDeviceType:
Если вы не хотите использовать стороннюю библиотеку, можно анализировать User-Agent вручную. Однако это менее надежно и требует больше кода: