javascript - page - googleanalyticsobject para que sirve
Rastrea todos los enlaces salientes en Google Analytics (7)
Aquí está mi solución usando el código sugerido por Google
Coloca esto justo después de tu código de seguimiento de GA (probablemente en <head>
)
// TRACK OUTBOUND LINKS
document.addEventListener("DOMContentLoaded", function() {
var trackOutboundLink = function(url) {
ga(''send'', ''event'', ''outbound'', ''click'', url, {
''transport'': ''beacon'',
''hitCallback'': function(){document.location = url;}
});
}
var a = document.getElementsByTagName(''a'');
for(i = 0; i < a.length; i++){
if (a[i].href.indexOf(location.host) == -1 && a[i].href.match(/^http?s://///i)){
a[i].onclick = function(){
trackOutboundLink(this.href);
}
}
}
});
// END
He estado usando un script para rastrear enlaces salientes durante un par de meses. El script FUNCIONA , pero en el informe generado por Google Analytics muchas URL tienen un final ": 80" (número de puerto predeterminado) al final. Siga leyendo para más detalles.
Quizás sea importante mencionar que el sitio web que realiza el seguimiento de estos enlaces salientes tiene una cantidad tremenda de tráfico saliente (multiplique su fantasía por).
El propósito del guión.
Rastrea TODOS los enlaces salientes y los etiqueta como "Enlaces salientes" en Google Analytics.
La secuencia de comandos está muy comentada y tiene algunas instancias de console.log () para ayudar a la depuración (se mantienen comentadas).
Los "enlaces salientes" se muestran en GA bien, bajo:
Contenido> Eventos> Eventos principales> "Enlaces salientes" [haga clic en él]> [informe que muestra todas las direcciones URL pulsadas]
El problema
Bajo el informe "Enlaces salientes", donde obtengo todos los enlaces en los que se hizo clic, obtengo ": 80" al final de al menos 2/3 de todos los enlaces informados (probablemente más). GA trata a http://example.com y http://example.com:80 como enlaces diferentes, separándolos en el informe. Eso, por supuesto, no es deseado.
Vale la pena mencionar:
Los enlaces que terminan con ": 80" siempre tienen más hits que sus equivalentes sin ": 80", entre 40% y 60% más de hits.
La solucion deseada
- Combina los enlaces que terminan con ": 80" con los que no lo tienen, O
- Evite añadir ": 80" a los enlaces, si es posible.
- Bonificación: entienda por qué obtenemos enlaces que terminan con ": 80".
La secuencia de comandos
// 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'');
}
*/
});
});
El problema con window.open es que la referencia se perderá. Una mejor solución es usar onmousedown en lugar de onclick. Después de realizar algunas pruebas, sé que este trabajo es mejor que usar window.open o usar setTimeout. Obtuvo algún falso positivo de las personas que hicieron clic con el botón derecho del mouse y no seleccionó "Abrir en una nueva pestaña" o "Abrir en una ventana nueva", pero onclick no siempre se dispara con el botón central y el botón derecho en todos los navegadores. Es una elección entre el menor de los dos males aquí.
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);
});
});
Este pequeño código me funcionó:
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")});
}
});
Google tiene una biblioteca con soporte oficial que hace esto por ti.
https://github.com/googleanalytics/autotrack
Entonces, todo tu fragmento de Analytics sería algo como:
<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>
La razón para el :80
en su salida es debido a e.currentTarget.host
http://www.w3schools.com/jsref/prop_area_host.asp
No estoy seguro de por qué está rastreando eso además de su variable url
ya funcional, pero siempre puede asegurarse de que :80
no esté allí con un simple reemplazo de cadena
_gat._getTrackerByName()._trackEvent("Outbound Links", e.currentTarget.host.replace('':80'',''''), url, 0);
La respuesta de Fresheyeball es la correcta, pero como muchas personas han pedido una respuesta completa , publicaré el guión final con la contribución de Fresheyeball.
La versión corta
// 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);
}
}
});
});
La versión completa (comentada y ''debug-able'')
// 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'');
}
*/
});
});
use location.hostname en lugar de location.host. El nombre de host no incluye el puerto.