Подтвердить что ты не робот

Отслеживать все исходящие ссылки в Google Analytics

Я использую script для отслеживания исходящих ссылок в течение нескольких месяцев. script WORKS, но в отчете, создаваемом Google Analytics, многие URL-адреса имеют конечный ": 80" (номер порта по умолчанию) в конце. Читайте дальше для более подробной информации.

Возможно, важно отметить, что веб-сайт, отслеживающий эти исходящие ссылки, обладает огромным количеством исходящего трафика (умножьте свою фантазию на ∞).

Цель script

Он отслеживает ВСЕ исходящие ссылки и помещает их как "Исходящие ссылки" в Google Analytics.

script сильно комментируется и содержит несколько экземпляров console.log(), чтобы помочь отладке (они сохраняются в комментариях).

"Исходящие ссылки" показывают на GA хорошо, под:

Контент > События > Топ-события > "Исходящие ссылки" [щелкните по нему] > [отчет, показывающий все URL-адреса нажатыми]

Проблема

В отчете "Исходящие ссылки", где я получаю все ссылки, которые были нажаты, я получаю ": 80" в конце как минимум 2/3 всех сообщений (возможно, больше). GA рассматривает http://example.com и http://example.com:80 как разные ссылки, разделяя их в отчете. Это, конечно, не желательно.

Стоит упомянуть:

Ссылки, которые заканчиваются на ": 80" , всегда имеют больше хитов, чем их эквивалент, без ": 80" , что-либо с 40% до 60% больше.

Требуемое решение

  • Объединить ссылки, которые заканчиваются на ": 80" с теми, у кого нет, OR
  • Избегайте добавления ссылок: "80" к ссылкам, если это возможно.
  • Бонус: Поймите, почему мы получаем ссылки, заканчивающиеся на ": 80" вообще.

script

// Outbound Link Tracking with Google Analytics
// Requires jQuery 1.7 or higher (use .live if using a lower version)
$(function() {
    $("a").on('click',function(e){
        var url = $(this).attr("href");
        // Console logs shows the domain name of the link being clicked and the current window
        // console.log('e.currentTarget.host: ' + e.currentTarget.host);
        // console.log('window.location.host: ' + window.location.host);
        // If the domains names are different, it assumes it is an external link
        // Be careful with this if you use subdomains
        if (e.currentTarget.host != window.location.host) {
            // console.log('external link click');
            // Outbound link! Fires the Google tracker code.
            _gat._getTrackerByName()._trackEvent("Outbound Links", e.currentTarget.host, url, 0);
            // Checks to see if the ctrl or command key is held down
            // which could indicate the link is being opened in a new tab
            if (e.metaKey || e.ctrlKey) {
                // console.log('ctrl or meta key pressed');
                var newtab = true;
            }
            // If it is not a new tab, we need to delay the loading
            // of the new link for a just a second in order to give the
            // Google track event time to fully fire
            if (!newtab) {
                // console.log('default prevented');
                e.preventDefault();
                // console.log('loading link after brief timeout');
                setTimeout('document.location = "' + url + '"', 100);
            }
        }
        /*
        else {
            console.log('internal link click');
        }
        */
    });
});
4b9b3361

Ответ 1

Причина для :80 в вашем выходе связана с e.currentTarget.host

http://www.w3schools.com/jsref/prop_area_host.asp

Я не уверен, почему вы отслеживаете это в дополнение к уже имеющейся функциональной переменной url, но вы всегда можете гарантировать, что :80 не существует с простой заменой строки

_gat._getTrackerByName()._trackEvent("Outbound Links", e.currentTarget.host.replace(':80',''), url, 0);

Ответ 2

Ответ Fresheyeball правильный, но поскольку многие люди просят дать полный ответ, я собираюсь опубликовать окончательный script с вкладкой Fresheyeball.

Краткая версия

// Outbound Link Tracking with Google Analytics
// Wallace Sidhrée - http://dreamyguy.com/
// Requires jQuery 1.7 or higher (use .live if using a lower version)
$(function() {
    $("a").on('click',function(e){
        var url = $(this).attr("href");
        if (e.currentTarget.host != window.location.host) {
            _gat._getTrackerByName()._trackEvent("Outbound Links", e.currentTarget.host.replace(':80',''), url, 0);
            if (e.metaKey || e.ctrlKey || this.target == "_blank") {
                var newtab = true;
            }
            if (!newtab) {
                e.preventDefault();
                setTimeout('document.location = "' + url + '"', 100);
            }
        }
    });
});

Полная версия (прокомментированная и "отладочная" )

// Outbound Link Tracking with Google Analytics
// Wallace Sidhrée - http://dreamyguy.com/
// Requires jQuery 1.7 or higher (use .live if using a lower version)
$(function() {
    $("a").on('click',function(e){
        var url = $(this).attr("href");
        // Console logs shows the domain name of the link being clicked and the current window
        // console.log('e.currentTarget.host: ' + e.currentTarget.host);
        // console.log('window.location.host: ' + window.location.host);
        // If the domains names are different, it assumes it is an external link
        // Be careful with this if you use subdomains
        if (e.currentTarget.host != window.location.host) {
            // console.log('external link click');
            // Outbound link! Fires the Google tracker code.
            _gat._getTrackerByName()._trackEvent("Outbound Links", e.currentTarget.host.replace(':80',''), url, 0);
            // Checks to see if the ctrl or command key is held down
            // which could indicate the link is being opened in a new tab
            // Also checks if target="_blank" on the link tag which indicates it should always be opened in a new tab
            if (e.metaKey || e.ctrlKey || this.target == "_blank")) {
                // console.log('ctrl or meta key pressed');
                var newtab = true;
            }
            // If it is not a new tab, we need to delay the loading
            // of the new link for a just a second in order to give the
            // Google track event time to fully fire
            if (!newtab) {
                // console.log('default prevented');
                e.preventDefault();
                // console.log('loading link after brief timeout');
                setTimeout('document.location = "' + url + '"', 100);
            }
        }
        /*
        else {
            console.log('internal link click');
        }
        */
    });
});

Ответ 3

Проблема с window.open заключается в том, что реферер будет потерян. Лучшим решением является использование onmousedown вместо onclick. Проделав некоторые тесты, я знаю, что эта работа лучше работает с использованием window.open или с помощью setTimeout. У вас есть ложный позитив от людей, которые нажимают правую кнопку мыши, а не выбирают "Открыть в новой вкладке" или "Открыть в новом окне", но onclick не всегда срабатывает для среднего и правого клика по всему браузеру. Это выбор между меньшим количеством двух зол здесь.

jQuery(function($){
  $('a:not([href*="' + document.domain + '"])').mousedown(function(event){
    // Just in case, be safe and don't do anything
    if (typeof _gat == 'undefined') {
      return;
    }

    var link = $(this);
    var href = link.attr('href');
    var noProtocol = href.replace(/http[s]?:\/\//, '');

    // Track the event
    _gat._getTrackerByName()._trackEvent('Outbound Links', noProtocol);
   });
});

Ответ 4

используйте location.hostname вместо location.host. hostname не включает порт.

Ответ 5

Этот небольшой кусок кода работал у меня:

    var hostname = window.location.hostname; 

    jQuery("body a").click(function(){

          if(jQuery(this).attr("href").indexOf(hostname)== -1){

               ga('send', 'event', {'eventCategory': "Outbound Links", 'eventAction': "OnClick", 'eventLabel': jQuery(this).attr("href")});

          }
    });

Ответ 6

У Google есть официально поддерживаемая библиотека, которая делает это для вас.

https://github.com/googleanalytics/autotrack

Таким образом, весь ваш фрагмент аналитики будет выглядеть примерно так:

<script>
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-XXXXX-Y', 'auto');

// Replace the following lines with the plugins you want to use.
ga('require', 'eventTracker');
ga('require', 'outboundLinkTracker');
ga('require', 'urlChangeTracker');
// ...

ga('send', 'pageview');
</script>
<script async src="https://www.google-analytics.com/analytics.js"></script>
<script async src="path/to/autotrack.js"></script>