Как узнать, откуда пришли посетители
Понимание источников трафика помогает оптимизировать сайт и повышать конверсии. Даже простые методы анализа дают ценную информацию о поведении посетителей и их интересах.
Ниже вы найдете проверенные способы отслеживания трафика и разберетесь, какие инструменты подходят для разных задач. Вы сможете быстро определять, откуда приходят посетители, и применять эти данные, чтобы усиливать каналы, повышать конверсии и развивать сайт.
Страница, с которой пришли
Итак, получить страницу, с которой пользователь попал на эту, - легче лёгкого. Её адрес по умолчанию передаётся в заголовке HTTP-запроса пользователя в строке "Referrer:". Получить её значение из PHP можно, вызвав соответствующую функцию следующим образом:
getenv("HTTP_REFERER")Так что, в принципе, можно просто взять и написать отдельную функцию, которая:
$H=getenv("HTTP_REFERER"); // получает URL, с которого пришёл посетитель
$f=fopen("mylog.log",'a'); // открывает файл с логами на добавление
flock ($f,2); // запрещает к нему доступ до тех пор,
//пока он не будет закрыт (на случай, если два
//скрипта захотят одновременно записать что-то
//в файл, одному из них придётся подождать)
fwrite($f,"$Hn"); // пишет в файл полученный тремя строчками выше URL
fclose($f); // закрывает файлПотом эту функцию можно вызывать в начале какждого php-скрипта страничек сайта.
Как узнать ip, свою судьбу и точное время
Но! Раз уж мы тут, можно немного доработать функцию, чтобы узнать IP посетителя (по нему можно примерно прикинуть область, где он находится физически), его браузер (интересно же) и страничку, куда он, собственно пришёл (звучит немного странно - мы ж и так знаем, что пришёл он на нашу страничку; но представьте, что у вас эту функция вызывается в участке заголовочного кода, который одинаково вставляется во все ваши странички, - а так, пожалуй, вы и сделаете). Также неплохо бы иметь время, когда чел пришёл к нам на сайт - потом можно будет проанализировать активность пользователей и т.п.
Так что, функция примет следующий вид:
$er_time=date("H:i:s d M Y"); // записываем текущее время в строку,
//используя заданный формат
$U=getenv("HTTP_USER_AGENT"); // получаем данные о софте,
//который испольует пользователь
$H=getenv("HTTP_REFERER"); // получаем URL, с которого пришёл посетитель
$R=getenv("REMOTE_ADDR"); // получаем IP посетителя
$W=getenv("REQUEST_URI"); // получаем относительный адрес странички,
//которую запросил посетитель
$f=fopen("logs/visits.log",'a'); // дальше - понятно, пишем всё это в файл
flock ($f,2);
fwrite($f,"$er_timen Br: $Un Rf: $Hn IP: $Rn Rq: $Wn");
fclose($f);Но и эта функция далека от совершенства! Дело в том, что русских символов вы в этих урлах не увидите - их будут заменять их 16-ричные представления (предваряемые знаком "%"). Поэтому неплохо бы, чтобы скрипт самостоятельно приводил их к удобочитаемому виду: заменял всякие
http://www.yandex.ru/yandsearch?text=%E9%EE%E6%FB%E3+%F4%F2%F3%EC%E0%ED%E5&stype=wwwна
http://www.yandex.ru/yandsearch?text=йожыг+фтумане&stype=wwwДелать мы это будем следующим куском кода с использованием регулярных выражений:
while (ereg('%([0-9A-F]{2})',$H)){ // пока в строке $H будет хоть одно
//сочетание знака % и двух символов из диапазонов 0-9 и A-F
//(шестнадцатиричные цифры)
$val=ereg_replace('.*%([0-9A-F]{2}).*','1',$H);
// присваиваем $val результат замены выражения,
//содержащего процент и два символа из означенных выше интервалов,
//на эти самые два символа
// короче говоря, теперь в $val у нас очередные 2 символа,
//перед которыми в исходном выражении стоял процент
$newval=chr(hexdec($val)); // получаем сивол с номером,
//полученным переведением полученного в $val
//шестнадцатиричного числа в "нормальное"
$H=str_replace('%'.$val,$newval,$H);
//стандартная строковая функция замены -
//заменяет подстроку, состоящую из процента и друх символов
//из переменной $var на символ, который эти два
//шестнадцатиричных символа кодировали
}// конец цикла :)Итого:
$er_time=date("H:i:s d M Y"); // записываем текущее время в строку,
//используя заданный формат
$U=getenv("HTTP_USER_AGENT"); // получаем данные о софте,
//который испольует пользователь
$H=getenv("HTTP_REFERER"); // получаем URL, с которого пришёл посетитель
$R=getenv("REMOTE_ADDR"); // получаем IP посетителя
$W=getenv("REQUEST_URI"); // получаем относительный адрес странички,
//которую запросил посетитель
while (ereg('%([0-9A-F]{2})',$H)){ // пока в строке $H будет хоть одно
//сочетание знака % и двух символов из диапазонов 0-9 и A-F
//(шестнадцатиричные цифры)
$val=ereg_replace('.*%([0-9A-F]{2}).*','1',$H);
// присваиваем $val результат замены выражения,
//содержащего процент и два символа из означенных выше интервалов,
//на эти самые два символа
// короче говоря, теперь в $val у нас очередные 2 символа,
//перед которыми в исходном выражении стоял процент
$newval=chr(hexdec($val)); // получаем сивол с номером,
//полученным переведением полученного в $val
//шестнадцатиричного числа в "нормальное"
$H=str_replace('%'.$val,$newval,$H);
//стандартная строковая функция замены -
//заменяет подстроку, состоящую из процента и друх символов
//из переменной $var на символ, который эти два
//шестнадцатиричных символа кодировали
}// конец цикла :)
$f=fopen("logs/visits.log",'a'); // дальше - понятно, пишем всё это в файл
flock ($f,2);
fwrite($f,"$er_timen Br: $Un Rf: $Hn IP: $Rn Rq: $Wn");
fclose($f);Уже по логам этого скрипта можно судить, откуда пришёл посетитель, по каким страничкам он прошёл и на какой страничке покинул сайт. Да, безусловно, можно было это сделать и сессиями - но нам лень. А так - 2 минуты, и можно наслаждаться! 🙂
Ты узнаешь её из тысячи
Это - основа. Дальше можно много чего придумать: например, из строк, содержащих "http://www.yandex.ru/yandsearch", вырезать ту часть, в которой, собственно, содержится запрос, и записывать в какой-нибудь файл типа "yandex.log". В общем, на что фантазии хватит - всё можно забабахать!
Удачи!
Комментарии
И гугл и яндекс при нажатии на сайт перенаправляет через какую-то страницу, которая никак не может определить запрос
А как же смотреть запросы то? Яндекс тот же через прокладку перенаправляет и запрос там шифрованный..
а можно чтобы например вот зарегистрировался юзер и в анкете выходило пришел с google.com....
Не понял как этот код ставить и куда ставить его подскажите мне.
Поставил, все работает. Вот только в некоторых ссылках вообще кракозябры вместо руских букв в ссылке. Кто нибудь знает, в как исправить?
Похоже я буду частым гостем у вас.
Либо я гдето туплю, либо в коде чёта не так(( потому-что ошибок не выдаёт, но в файл ничё не пишеццо!(((
Да жирненько и действительно просто!! спс за труды!!
У меня вот такая ошибка при считывании скрипта - Deprecated: Function ereg() is deprecated in /home/*/********/WWW/****.php on line 16
Как это исправит..скажите плиз...
звездочки сам поставил)))
А чем не нравится urldecode?