При настройке небольшой сетки из трех сайтов у меня возникла необходимость, чтобы на сайтах происходили разные сценарии для посетителей из Гугл и для посетителей из Яндекс. Вкратце объясню эти сценарии. Условно обозначим основной сайт номером #1, а два дополнительных сайта #2 и #3 соответственно.
- Если посетитель пришел из Google, то сайт #3 должен сделать переадресацию на сайт #2. А сайт #2 должен сделать переадресацию на сайт #1. Как делать переадресацию с помощью php я уже ранее описывал здесь. Сама переадресация происходит за доли секунды. Поэтому посетитель попадая на сайт #3 или #2 из Google тут же перебрасывается на сайт #1.
- Если посетитель пришел не из Яндекс и не из Google (зашел на сайт с другого сайта или напрямую, в общем - не через поиск), то сценарий такой же, как если посетитель пришел из Google.
- Если посетитель пришел из Яндекс, то сайт #3 и #2 должны показывать клиенту обычные страницы, в которых вшиты сквозные ссылки на сайт #1.
Немного погуглив я принял решение, что буду делать это на php. Поскольку сайты работают на MOD-X и Wordpress (php язык программирования, на котором написаны эти CMS).
Также это можно было сделать на JavaScript (js).
И возможно с помощью файла .htaccess, который обычно лежит в корне сайта отвечает за локальное управление настройками веб сервера.
Далее рабочий код на php, который и будет определять откуда появился посетитель на нашем сайте. Будем использовать функцию.
<?php
//откуда пришел клиент
function UserFromSearch() {
//массив с перечеслением интересующих поисковых систем
$crawlerList=array("yandex.","google.","yahoo.");
//В элементе $_SERVER['HTTP_REFERER'] содержится адрес страницы,
//с которой посетитель пришёл на данную страницу.
//если $_SERVER['HTTP_REFERER'] была установлена и не равна NULL
if (isset($_SERVER['HTTP_REFERER'])) {
//Разбираем значение URL ( $_SERVER['HTTP_REFERER'] )
$referringPage = parse_url( $_SERVER['HTTP_REFERER'] );
//если $referringPage['host'] была установлена и не равна NULL
if (isset( $referringPage['host'] )) {
//присваиваем $referringHost значение $referringPage['host']
$referringHost = $referringPage['host'];
//перебираем все варианты поисковиков из массива и ищем совпадение
foreach ($crawlerList as $crawler) {
if (strpos (strtolower ($referringHost),$crawler) !== FALSE ) {
//если совпадение есть, возвращаем название поисковика
return $crawler;
}
}
}
}
return FALSE;
}
?>
То есть, наша функция проверяет $_SERVER['HTTP_REFERER'] - в нем хранится значение URL с которого пришел посетитель. Мы разбиваем URL с помощью parse_url и берем оттуда элемент "host". Если значение "host" совпадет с каким-то из заранее указанных нами в массиве значений, то функция вернет это значение. И таким образом мы поймем, из какого поисковика пришел посетитель.
Вот такая классная функция получилась. Если немного поразмыслить и переписать ее, то можно получать название любого источника, откуда пришел клиента. Но задача нашей функции именно определять поисковики. Скачать код функции можно здесь
Ну а дальше присваиваем какой-либо переменной результат работы нашей функции. И в зависимости от возвращаемого результата функции выполняем какие-то действия.
<?php
$user_from = UserFromSearch();
if ($user_from && $user_from == "google"){
echo "Вы пришли из google";
}
?>
В дополнении, хочется отметить, что в суперглобальном массиве $_SERVER содержится множество важных и полезных элементов. Чтобы посмотреть их можно выполнить код:
<?php
echo "<pre>";
print_r ($_SERVER);
echo "</pre>";
?>
Если прямо сейчас хотите посмотреть как срабатывает эта функция, то это можно сделать прямо на Добросайте. Просто наберите в поиске Google Добросайт и перейдите на dobrosayt.ru. Вы увидите на главной в верхнем правом углу добросайта иконку с вопросом. Нажмите на иконку и увидите информацию, откуда вы пришли. То же самое можно проделать и с Яндекса. Наберите добросайт в яндекс, перейдите на сайт, нажмите на значок вопроса в правом верхнем углу сайта.
На этом статья подходит к логическому окончанию. Спасибо за внимание! На связи был Радмир - "Добросайт".