Узнать с какого сайта запрос

Бесплатная консультация юриста

+7 (800) 301-07-30

Реклама jurik.ru

Определение источника трафика, одна из базовых задач веб-разработки и аналитики. Зная, откуда пришёл посетитель, можно персонализировать контент, оценивать эффективность рекламных каналов и строить собственные CRM-системы. В этой статье разберём все основные способы узнать, с какого сайта или страницы пришёл пользователь.

Что такое HTTP Referer

Когда пользователь переходит по ссылке с одной страницы на другую, браузер автоматически отправляет в HTTP-запросе заголовок Referer (от англ. referrer — «источник перехода»). Этот заголовок содержит URL предыдущей страницы, с которой был совершён переход.

Важно понимать ограничения:

  • Если пользователь ввёл адрес вручную или открыл закладку — заголовок будет пустым;
  • При переходе с HTTPS на HTTP заголовок обычно не передаётся;
  • Некоторые браузеры и расширения блокируют или обрезают Referer из соображений приватности;
  • Современные политики Referrer-Policy могут передавать только домен без полного пути.

Способ 1: PHP и переменная $_SERVER[‘HTTP_REFERER’]

Самый распространённый серверный метод — использование суперглобального массива $_SERVER:

Базовый пример:

<?php
if (isset($_SERVER['HTTP_REFERER'])) {
 $referer = $_SERVER['HTTP_REFERER'];} else {
 echo "Источник перехода неизвестен (прямой заход)";
}
?>

Извлечение только домена источника:

<?php
$referer = $_SERVER['HTTP_REFERER'] ?? '';
if (!empty($referer)) {
 $host = parse_url($referer, PHP_URL_HOST);
 echo "Домен источника: " . $host;
}
?>

Проверка, пришёл ли пользователь с поисковика:

<?php
$referer = $_SERVER['HTTP_REFERER'] ?? '';
$searchEngines = ['google.', 'yandex.', 'bing.', 'mail.ru'];

$fromSearch = false;
foreach ($searchEngines as $engine) {
 if (stripos($referer, $engine) !== false) {
 $fromSearch = true;
 break;
 }
}

if ($fromSearch) {
 // Показываем специальный контент для посетителей из поиска
}
?>

Способ 2: JavaScript и document.referrer

На клиентской стороне аналогом служит свойство document.referrer:

<script>
const referrer = document.referrer;

if (referrer) {
 console.log('Пользователь пришёл с:', referrer);
 
 // Отправляем данные на сервер (например, в CRM)
 fetch('/save-referer.php', {
 method: 'POST',
 headers: {'Content-Type': 'application/json'},
 body: JSON.stringify({referer: referrer})
 });
} else {
 console.log('Прямой заход или Referer скрыт');
}
</script>

Этот способ удобен для самописных CRM: данные собираются на клиенте и отправляются на сервер вместе с другой информацией о посетителе (разрешение экрана, язык браузера, часовой пояс).

Способ 3: UTM-метки — самый надёжный вариант

Поскольку Referer ненадёжен, профессионалы используют UTM-метки — специальные параметры в URL:

https://example.com/page?utm_source=google&utm_medium=cpc&utm_campaign=sale

Обработка на PHP:

<?php
$utmSource = $_GET['utm_source'] ?? 'не указан';
$utmMedium = $_GET['utm_medium'] ?? 'не указан';
$utmCampaign = $_GET['utm_campaign'] ?? 'не указана';

// Сохраняем в сессию, чтобы не потерять при переходах по сайту
session_start;
$_SESSION['utm'] = [
 'source' => $utmSource,
 'medium' => $utmMedium,
 'campaign' => $utmCampaign
];
?>

Как узнать поисковый запрос

Частый вопрос: можно ли узнать, по какому поисковому запросу пришёл пользователь? К сожалению, в большинстве случаев — нет. Современные поисковые системы (Google, Яндекс) шифруют поисковые запросы и не передают их в Referer. Из заголовка вы получите только адрес поисковика, но не сам запрос.

Альтернативные решения:

  • Яндекс.Метрика и Google Analytics — показывают поисковые фразы в агрегированном виде;
  • Вебмастер-панели (Яндекс.Вебмастер, Google Search Console) — данные о запросах, по которым сайт показывался в поиске;
  • UTM-метки в рекламе — в контекстной рекламе можно передавать ключевое слово через параметр (например, {keyword} в Яндекс.Директе).

Сохранение источника при навигации по сайту

Проблема: когда пользователь переходит по внутренним страницам, Referer меняется на адрес вашего же сайта. Решение — сохранять первоначальный источник в сессии или cookie:

<?php
session_start;

if (!isset($_SESSION['original_referer'])) {
 $referer = $_SERVER['HTTP_REFERER'] ?? '';
 $myHost = $_SERVER['HTTP_HOST'];
 
 // Сохраняем только если переход был с внешнего сайта
 if (!empty($referer) && strpos($referer, $myHost) === false) {
 $_SESSION['original_referer'] = $referer;
 }}
echo "Первоначальный источник: " ; ($_SESSION['original_referer'] ?? 'прямой заход');
?>

Дополнительная информация о посетителе

Помимо источника перехода, для CRM полезно собирать:

  • $_SERVER[‘REMOTE_ADDR’] — IP-адрес посетителя;
  • $_SERVER[‘HTTP_USER_AGENT’] — браузер и операционная система;
  • $_SERVER[‘REQUEST_METHOD’] — метод запроса (GET, POST и т.д.);
  • $_SERVER[‘REQUEST_URI’] — запрошенная страница;
  • $_SERVER[‘HTTP_ACCEPT_LANGUAGE’] — предпочитаемый язык.

Для определения источника перехода используйте комбинацию методов: $_SERVER[‘HTTP_REFERER’] на сервере, document.referrer на клиенте и UTM-метки для рекламных кампаний. Помните, что Referer может отсутствовать или быть обрезанным, поэтому не стройте критическую логику сайта только на этом заголовке. Для полноценной аналитики подключите Яндекс.Метрику или Google Analytics — они дадут гораздо больше данных, чем ручной сбор.