Повышаем качество трафика, отсекаем дубли лидов

Повышаем качество трафика, отсекаем дубли лидов Скрипты и боты

Одна из моих любимых рубрик: Полезности.

Сегодня рассмотрим несколько скриптов, которые я использую в команде.

Не устану повторять, что задача разработчика в любой команде не только делать интеграции и дальше передавать дело байерам, но и максимально быть включенным в процессы команды. Он должен делать все возможное для оптимизации и повышения качества трафика. Если байер не может особо повлиять на качество лидов со своей стороны, то технарь – это тот человек, который должен всеми средствами повысить этот показатель. И хотя об этом в основном в команде особо никто не знает, такой путь мы выбрали сами. Будем называть себя Бэтменами! 🦇

отсекаем дубли лидов

Сегодня хочу рассмотреть несколько способов отсеивания дубликатов лидов, а также бороться с нежелательными пользователями, которые пытаются поднасрать в формах на наших лендингах.

1. Запрещаем отправлять более 2-х лидов за 24 часа с одного устройства.

Этот код предназначен для предотвращения множественных отправок формы пользователем в течение 24 часов. Давайте разберем его пошагово:

  • Прослушивание события загрузки DOM:
document.addEventListener("DOMContentLoaded", function () {

Этот код ждет, пока вся структура HTML страницы полностью загрузится и проанализируется браузером перед выполнением скрипта.

  • Нахождение формы на странице:
const form = document.querySelector("form");

Этот код ищет первый элемент <form> на странице и сохраняет его в переменную form.

  • Прослушивание события отправки формы:
form.addEventListener("submit", function (event) {

Этот код добавляет обработчик события submit к форме. Это означает, что когда форма отправляется, вызывается данная функция.

  • Отмена стандартного поведения формы:
event.preventDefault();

При вызове event.preventDefault() браузер не выполняет стандартное поведение отправки формы, что позволяет обработать данные формы программно.

  • Получение текущего времени:
const now = Date.now();

Получает текущее время в миллисекундах с 1 января 1970 года (начало эпохи Unix).

  • Получение логов запросов из localStorage:
const requestLogs = JSON.parse(localStorage.getItem('requestLogs')) || [];

Этот код получает лог запросов из localStorage (если он существует) и парсит его в объект JavaScript. Если логов нет, создается пустой массив.

  • Фильтрация логов старше 24 часов:
const filteredLogs = requestLogs.filter(log => (now - log.timestamp) < 24 * 60 * 60 * 1000);

Этот код фильтрует логи, оставляя только те, которые были созданы за последние 24 часа. Для этого проверяется разница между текущим временем и временем каждого лога.

  • Проверка количества запросов за 24 часа:
if (filteredLogs.length >= 2) {
    window.location.href = 'error.php';
} else {

Если за последние 24 часа было больше двух попыток отправки формы (включая текущую), пользователь перенаправляется на страницу error.php.

  • Добавление текущей попытки в логи и сохранение их в localStorage:
filteredLogs.push({ timestamp: now });
localStorage.setItem('requestLogs', JSON.stringify(filteredLogs));

Если количество запросов за 24 часа меньше двух, текущая попытка добавляется в массив логов, который затем сохраняется в localStorage.

  • Отправка формы:
form.submit();
  1. После обновления логов форма отправляется как обычно.

Зачем нужен этот код на сайте?

Этот код предназначен для защиты от многократной отправки формы пользователем в течение 24 часов. Это может быть полезно, например, для предотвращения спама или перегрузки сервера многократными запросами.

  1. Защита от спама: Ограничивает количество раз, когда форма может быть отправлена, что препятствует злоупотреблению.
  2. Предотвращение ошибок пользователя: Если пользователь случайно пытается отправить форму несколько раз, это предотвратит многократные отправки.
  3. Снижение нагрузки на сервер: Уменьшает количество запросов к серверу, особенно если форма отправляет данные, требующие обработки на сервере.

Таким образом, этот скрипт помогает поддерживать стабильность и безопасность вашего веб-сайта.

Полный код скрипта ниже. Подключать на страницу index, перед закрывающим тегом head.

        <script>
            document.addEventListener("DOMContentLoaded", function () {
                const form = document.querySelector("form");

                form.addEventListener("submit", function (event) {
                    event.preventDefault();
                    const now = Date.now();
                    const requestLogs = JSON.parse(localStorage.getItem('requestLogs')) || [];

                    const filteredLogs = requestLogs.filter(log => (now - log.timestamp) < 24 * 60 * 60 * 1000);

                    if (filteredLogs.length >= 2) {
                        window.location.href = 'error.php';
                    } else {
                        filteredLogs.push({ timestamp: now });
                        localStorage.setItem('requestLogs', JSON.stringify(filteredLogs));
                        form.submit();
                    }
                });
            });
        </script>

2. Запрещаем отправлять лиды с одинаковыми номерами телефонов и ведем логирование данных.

Этот код состоит из двух функций и логики, предназначенной для предотвращения дублирования телефонных номеров в системе заявок. Давайте разберем его подробно:

Функция isDuplicateLead

function isDuplicateLead($phone)
{
    $file = 'leads.txt';

    if (!file_exists($file)) {
        file_put_contents($file, '');
    }

    $leads = file_get_contents($file);
    $escapedPhone = preg_quote($phone, '/');
    $phonePattern = '/' . $escapedPhone . "\n/";

    if (preg_match($phonePattern, $leads)) {
        return true;
    } else {
        file_put_contents($file, $phone . "\n", FILE_APPEND);
        return false;
    }
}
  • Проверка наличия файла:
$file = 'leads.txt';
if (!file_exists($file)) {
    file_put_contents($file, '');
}

Определяется имя файла leads.txt, в котором будут храниться номера телефонов. Если файл не существует, он создается.

  • Чтение содержимого файла:
$leads = file_get_contents($file);

Содержимое файла leads.txt считывается и сохраняется в переменной $leads.

  • Экранирование специального символа в номере телефона:
$escapedPhone = preg_quote($phone, '/');

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

  • Создание шаблона для поиска номера телефона:
$phonePattern = '/' . $escapedPhone . "\n/";

Создается шаблон регулярного выражения, который будет искать номер телефона, за которым следует символ новой строки.

  • Поиск номера телефона в файле:
if (preg_match($phonePattern, $leads)) {
    return true;
}

Если номер телефона найден в файле, функция возвращает true.

  • Добавление номера телефона в файл:
else {
    file_put_contents($file, $phone . "\n", FILE_APPEND);
    return false;
}
  1. Если номер телефона не найден, он добавляется в файл, и функция возвращает false.

Функция cleanPhoneNumber

function cleanPhoneNumber($phoneNumber)
{
    return preg_replace('/[^0-9]/', '', $phoneNumber);
}
  • Очистка номера телефона:
return preg_replace('/[^0-9]/', '', $phoneNumber);

Функция cleanPhoneNumber удаляет все символы, кроме цифр, из номера телефона. Это полезно для унификации формата телефонных номеров и предотвращения ошибок при сравнении.

    Основная логика

    $cleanedPhone = cleanPhoneNumber($_POST['phone']);
    
    if (isDuplicateLead($cleanedPhone)) {
        header('Location: error.php');
        exit;
    }
    
    • Очистка номера телефона, полученного из формы:
    $cleanedPhone = cleanPhoneNumber($_POST['phone']);
    

    Номер телефона, полученный из формы, очищается с помощью функции cleanPhoneNumber.

    • Проверка на дублирование:
    if (isDuplicateLead($cleanedPhone)) {
        header('Location: error.php');
        exit;
    }
    

    Если функция isDuplicateLead возвращает true, это означает, что номер телефона уже существует в файле leads.txt. Пользователь перенаправляется на страницу error.php, и выполнение скрипта прекращается с помощью exit.

      Зачем нужен этот код на сайте?

      1. Предотвращение дублирования заявок: Код предотвращает многократное добавление одного и того же номера телефона в систему, что может быть полезно для избежания спама или ошибочных повторных заявок.
      2. Упрощение управления заявками: Хранение номеров телефонов в файле leads.txt позволяет легко проверять, были ли уже добавлены определенные номера.
      3. Улучшение пользовательского опыта: Если пользователь пытается отправить заявку с уже существующим номером телефона, его перенаправляют на страницу ошибки, что позволяет ему понять, что его заявка уже была получена.

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

      Данный код необходимо использовать на странице api.php, сразу после открывающего тега <?php. Полный код:

      function isDuplicateLead($phone)
      {
          $file = 'leads.txt';
      
          if (!file_exists($file)) {
              file_put_contents($file, '');
          }
      
          $leads = file_get_contents($file);
          $escapedPhone = preg_quote($phone, '/');
          $phonePattern = '/' . $escapedPhone . "\n/";
      
          if (preg_match($phonePattern, $leads)) {
              return true;
          } else {
              file_put_contents($file, $phone . "\n", FILE_APPEND);
              return false;
          }
      }
      
      function cleanPhoneNumber($phoneNumber)
      {
          return preg_replace('/[^0-9]/', '', $phoneNumber);
      }
      
      $cleanedPhone = cleanPhoneNumber($_POST['phone']);
      
      if (isDuplicateLead($cleanedPhone)) {
          header('Location: error.php');
          exit;
      }
      

      Подводя итог, использование скриптов для отсечения дубликатов лидов и ограничения числа отправок заявок помогает существенно повысить качество трафика. Это делает вашу работу более эффективной и приносит пользу всей команде. Внедряйте эти методы и делитесь своими результатами в нашем телеграмм канале. Ваша обратная связь очень важна!

      И по традиции для тех кому весь этот разбор по большому счету боком, прикрепляю файл с обеими функциями внутри)

      Оцените статью
      BoostClicks