Esto es para el más nuevo código de seguimiento de Universal.
Recientemente, tuve que volver a visitar mi propia respuesta para un nuevo proyecto. Noté algunos problemas que debo limpiar.
Para enviar una página vista programáticamente, solo desea enviar la ruta de acceso y la consulta, por ejemplo. para http://example.com/path/to/resource?param=1
enviaremos /path/to/resource?param=1
.
Algunos SPA utilizan HashBangs (#!
) para sus direcciones URL. Entonces, tenemos que enviar algo después del Hashbang. p.ej. http://example.com#!path/to/resource
enviaremos /path/to/resource?param=1
.
La versión anterior de mi solución era errónea y fallaba en todas las URL que tenían un hash en la url. Además, como estaba usando el plugin jQuery + History.js, mi solución fue escuchar statechange
desde allí.
Utilice este nuevo código para enviar una vista de página. Es más resistente y atiende tanto a hashbangs como a historia.
var loc = window.location,
hashbang = "#!",
bangIndex = location.href.indexOf(hashbang),
page = bangIndex != -1 ? loc.href.substring(bangIndex).replace(hashbang, "/") : loc.pathname + loc.search;
ga('send', 'pageview', page);
Si no se utiliza Hashbangs específicamente, sólo tiene que cambiar para que coincida con hashbang = "#!",
por ejemplo, hashbang = "#@",
La segunda parte de este está detectando cuando cambia la URL. Para esto, necesitará averiguar de los documentos de la biblioteca que esté utilizando.
para jQuery + History.js plug-in, el código de abajo funciona
$(window).on('statechange', function() {
//put code here
});
Más información se puede encontrar en https://developers.google.com/analytics/devguides/collection/analyticsjs/single-page-applications
$(window).on('statechange', function() {
var loc = window.location,
page = loc.hash ? loc.hash.substring(1) : loc.pathname + loc.search;
ga('send', 'pageview', page);
});
¿Cómo puedo llamar esto cada vez que se carga el contenido? ¿Recargo todo el script con la nueva URL reemplazando '/ new/content' en lo que se devuelve a través de AJAX? – paulruescher
solo llámelo en window.popstate como se describe aquí https://developer.mozilla.org/en-US/docs/DOM/window.onpopstate - si usa history.js https://github.com/balupton/History .js/(recomendado) pones en tu devolución de llamada de evento 'statechange'. Google ha implementado su propio método 'push', que llama a una página en google en segundo plano para transmitir sus datos personalizados – con