Osfonder's blog Just another wd weblog

16Мар/103

Техническая сторона: отслеживание перехода по внешним ссылкам.

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

Теперь коснемся его технической стороны.

Указанный раньше способ, довольно прост и, как следствие, имеет ряд недочетов. Дело в том, подмена адреса ссылки происходит во время перехода по ней, при этом учитывается, как клик левой клавишей мыши, так и средней(по колёсику), что в большинстве случаев приводит к открытию её в новой вкладке.

Текущая же вкладка, остается открытой, с измененным адресом ссылки, неприглядного вида. Её копирование или добавление в закладки приведет к не ожидаемому результату.

Кроме того, в некоторых браузерах клик средней кнопкой мыши не вызывает события onclick и подмены адреса, а значит переходы этой части пользователей зафиксированы не будут.

Обратимся к способу, используемому в поисковой выдаче Google.

В этом способе используется событие onmousedown, то бишь реакция на нажатие любой клавиши мыши, в том числе и правой.

Заключается он в загрузке с помощью JavaScript'a изображения в момент клика. Путь к изображению — есть наш собирающий статистику скрипт с передаваемым ему адресом перехода. Ссылка же продолжает работу, как любая другая, не изменяя своего адреса.

Код, дополняемый jQuery, выглядит следующим образом:

$('a.out').mousedown(function() {
    if(document.images) {
        $('<img>').attr('src', '/tests/out.php?'+$(this).attr('href'));
    }
    return true;
});

В указанном коде скрипту-счетчику,  передается всего один показатель — адрес перехода. Хотя можно усилить статистику, передавая и другие данные. Например время пребывания на странице, до перехода по ссылке и т.п.

Ну и пара слов о способе используемом яндексом. Заключается он в том, что адрес ссылки подменяется в момент клика, но возвращает прежний вид через пол секунды. Таким образом для глаза посетителя ссылка остается оригинальной. Его узкое место в том, что большинство браузеров при копировании ссылки в буфер обмена через контекстное меню, скопируют именно подмененный адрес.

Ну и в дополнение:

Чтобы перехватывать все внешние ссылки, без необходимости присвоения им класса, нужно заменить $('a.out') выражением:
$('a[href^=http://]:not([href*=osfonder.ru])')
где osfonder.ru домен вашего сайта.

Посты по теме

  1. Статистика и анализ: отслеживание переходов посетителя на внешние ресурсы