Отслеживаем реферальные ссылки

Во многих случаях маркетологу, при получении заявки с сайта, интересно знать, откуда пришел посетитель? Также для отслеживания объявлений используются специальные utm метки.

Рассмотрим пример, при котором пользователь приходит на одностраничный сайт и заполняет на нем форму.

<form method="POST">
    <input type="text" name="name" placeholder="Ваше имя"><br>
    <input type="text" name="phone" placeholder="Ваш телефон"><br>
    <button type="submit">Отправить</button>
</form>

А обрабатывается форма скриптом на языке PHP:

<?php
if (isset($_POST['name']) && isset($_POST['phone'])) {
    $to      = 'nobody@example.com';
    $subject = 'Запрос с сайта';
    $message = "Имя: {$_POST['name']}\nТелефон: {$_POST['phone']}";
    $headers = "From: {$to}\r\n" . "Reply-To: {$to}\r\n" . 'X-Mailer: PHP' . phpversion();

    mail($to, $subject, $message, $headers);
}
?>

Определяем реферала

В PHP для того, чтобы определить, с какой страницы перешел посетитель, можно использовать значение переменной $_SERVER['HTTP_REFERER']. Но, тут есть проблема! Если мы отправим форму, то значение этой переменной будет равно адресу той странице, на которой нажали кнопку "Отправить"!

Обойти это можно простым путем: При первом заходе человека на сайт, нам нужно запомнить значение в сookie - не вдаваясь в детали - это механизм отслеживания пользователя через его браузер. Установить сookie просто. В начале скрипта, который создает наш лендинг, достаточно вставить слудующий код:

<?php
// если мы не знаем реферала
if (!isset($_COOKIE['referer'])) {
     // то запоминаем его
     setcookie('referer', $_SERVER['HTTP_REFERER'], mktime(0, 0, 0, 1, 1, 2020));
}
?>

По этой же схеме запоминаем и utm-метки:

<?php
// запоминаем utm-метки
if (isset($_GET['utm_source']) && !isset($_COOKIE['utm_source'])) {
    foreach ($_GET as $key => $val) {
        if (0 === strpos($key, 'utm')) {
            setcookie($key, $val, mktime(0, 0, 0, 1, 1, 2020));
        }
    }
}
?>

Теперь нам нужно вставить этот код в наш лендинг, на который приходят посетители.

Итоги

Тогда итоговый скрипт лендинга будет иметь примерно следующий вид:

<?php
// если мы не знаем реферала
if (!isset($_COOKIE['referer'])) {
     // то запоминаем его
     setcookie('referer', $_SERVER['HTTP_REFERER'], mktime(0, 0, 0, 1, 1, 2020));
}
// запоминаем utm-метки
if (isset($_GET['utm_source']) && !isset($_COOKIE['utm_source'])) {
    foreach ($_GET as $key => $val) {
        if (0 === strpos($key, 'utm')) {
            setcookie($key, $val, mktime(0, 0, 0, 1, 1, 2020));
        }
    }
}
?>
<form method="POST">
    <input type="text" name="name" placeholder="Ваше имя"><br>
    <input type="text" name="phone" placeholder="Ваш телефон"><br>
    <button type="submit">Отправить</button>
</form>
<?php
if (isset($_POST['name']) && isset($_POST['phone'])) {
    $to      = 'nobody@example.com';
    $subject = 'Запрос с сайта';
    $message = "Имя: {$_POST['name']}\n"
        . "Телефон: {$_POST['phone']}\n"
        . "Реферал: {$_COOKIE['referer']}\n";
    foreach ($_COOKIE as $key => $val) {
        if (0 === strpos($key, 'utm')) {
            $message .= "$key: $val\n";
        }
    }
    $headers = "From: {$to}\r\n" 
        . "Reply-To: {$to}\r\n" 
        . 'X-Mailer: PHP' . phpversion();

    if (@mail($to, $subject, $message, $headers)) {
        print "<p>Сообщение отправлено успешно</p>";
    } else {
        print "<p>При отправке произошла ошибка</p>";
    }
}
?>

Удачи!


Создано:
Автор:
« Назад на главную

comments powered by Disqus
Fork me on GitHub