javascript - utilizar - ¿Rastrea las campañas con Google Analytics sin parámetros de cadena de consulta?
¿qué etiquetas son parámetros estándar de campaña de google analytics? (9)
¿Existe una forma compatible en Google Analytics para rastrear una campaña sin tener que usar parámetros de cadena de consulta?
En Analytics, puede etiquetar un enlace a su sitio con parámetros de cadena de consulta como utm_campaign
y utm_medium
que contienen información sobre la campaña para que puedan rastrearse.
Google realmente tiene una herramienta en línea para ayudar en la creación de dichos enlaces.
Por ejemplo, si StackOverflow se anunciaba en Experts Exchange, es posible que tengan un enlace como este:
Por muchas razones, no quiero que estos parámetros de apariencia torpe aparezcan en mi URL:
- Quiero animar a twitter, y los enlaces largos desalientan esto
- No quiero que la gente los marque con ID de campaña en
- Quiero que la gente vea una URL limpia
- No quiero que los motores de búsqueda indexen estos enlaces.
- Quiero tener un control total sobre los parámetros que se envían a Google Analytics, y no dejar que mis socios se encarguen de desordenar las URL con las que acceden a mi sitio.
Miré hace un tiempo para intentar encontrar una forma en la que pudieras establecer estos parámetros. Google tiene una página que a primera vista parece la solución, pero en realidad no lo es. Esa página describe cómo puede cambiar los nombres de los parámetros de la cadena de consulta a otra cosa, por ejemplo, para usar src
lugar de utm_source
que ejecutaría:
pageTracker._setCampSourceKey("src");
Parece que no puedo entender por qué no facilitan la configuración explícita del valor de la clave utm_source
, y no solo configurar un nombre de parámetro alternativo para la misma.
Recuerdo que hace un tiempo encontré a alguien que tenía una especie de truco desagradable, pero parece que no puedo encontrar eso ahora. Sin embargo, me parece recordar que quienquiera que fuera, tomó una copia del código analítico y, esencialmente, lo bifurcó y lo hackeó. ¡Esta no es una buena solución para mí!
¿Existe alguna forma oficial de hacerlo sin ningún tipo de redirecciones desagradables?
En pocas palabras, quiero hacer algo como esto (sitio MVC de ASP.NET). Dale a partnet un enlace a mi sitio con una URL como esta:
http://www.example.com/?cid=2dae88a8-66b1-475d-8a35-2978bd1a158c
En el controlador de mi página de MVC, averiguaría con qué campaña se relacionaba este GUID y establecería el estado del modelo. Nota: esto me da la ventaja de que puedo cambiar los parámetros de la campaña sin tener que volver a emitir la URL.
En la propia página entonces haría esto:
var campaignMedium = <%= ViewData.Model.CampaignMedium %>;
var campaignSource = <%= ViewData.Model.CampaignSource %>;
var campaignName = <%= ViewData.Model.CampaignName %>;
pageTracker._setCampaignData({
utm_source: campaignSource,
utm_medium: campaignMedium,
utm_campaignName: campaignName
});
pageTracker._trackPageview();
IMPORTANTE: este método _setCampaignData NO EXISTE REALMENTE. Esto es solo un ''pseudo código'' para lo que idealmente me gustaría poder hacer.
¿Alguien ha logrado con éxito hacer algo como esto?
_set campaignParams de campaña
Su "_setCampaignData" teórico finalmente existe, en forma de ["_set","campaignParams",...]
Si tiene una forma de inyectar por programación los valores que desea configurar (por ejemplo, configurados por una cookie en una redirección, o en el lado del servidor e impresos en la página), puede utilizar la API _set
para codificar. los parámetros de campaña que te gustaría configurar.
El formato para eso es solo:
_gaq.push([''_set'', ''campaignParams'',
''utm_campaign=CAMPAIGN&utm_source=SOURCE&utm_medium=MEDIUM'']);
Entonces, usando tu ejemplo original:
var campaignMedium = <%= ViewData.Model.CampaignMedium %>;
var campaignSource = <%= ViewData.Model.CampaignSource %>;
var campaignName = <%= ViewData.Model.CampaignName %>;
_gaq.push([''_set'', ''campaignParams'',
''utm_campaign='' + campaignName + ''&utm_source='' + campaignSource +''&utm_medium='' + campaignMedium]);
Actualización 2017
Esta respuesta detalla cómo lograr esto con la nueva biblioteca de Google Analytics, analytics.js / Universal Analytics.
A continuación se muestra una forma actualizada de hacerlo utilizando el método Universal de Google Analytics para el seguimiento de eventos en lugar del seguimiento de eventos estándar de GA.
La cadena UTM completa puede extraerse de la cadena de consulta (cuando existe) o extraerse de la cookie de Google (__utmz) y luego pasar a Google Analytics utilizando el siguiente código.
ga(''send'', ''event'', ''queryString'', ''getQueryString'', googleString );
Luego, tras la ejecución de cualquier activador que desee crear (uso una función llamada "widgetTracker"), puede ejecutar el rastreador de eventos GA.
Aquí está el código completo:
/* JavaScript Document */
(function(i,s,o,g,r,a,m){i[''GoogleAnalyticsObject'']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,''script'',''//www.google-analytics.com/analytics.js'',''ga'');
ga(''create'', ''UA-xxxxxxx-xx'', ''xx.xxx'');
ga(''send'', ''pageview'');
var googleString;
var stringArray = [];
var queryStringObject = makeQueryStringObject();
var QUOT = "''";
var EQ = ''='';
var AMP = ''&'';
for ( var v in queryStringObject ) {
var str = v + EQ + queryStringObject[v] ;
stringArray.push(str);
googleString = stringArray.join(AMP);
}
function makeQueryStringObject() {
var obj = [];
var pageURL = window.location.href;
var URLArray = pageURL.split(''?'');
if( URLArray[1] ) {
var argsArray = URLArray[1].split(''&'');
var l = argsArray.length;
for( i=0; i<l; i++ ) {
var individualArg = argsArray[i].split(''='');
if(individualArg[1] && individualArg[1].indexOf(''#'') > -1) {
var dropHashArray = individualArg[1].split(''#'');
individualArg[1] = dropHashArray[0];
}
obj[ individualArg[0] ] = individualArg[1];
console.log("value of queryStringObject: " + individualArg[0] + " :: " + obj[ individualArg[0] ]);
}
} else { /* from http://.com/a/14984832/1013405 */
ga1 = parseGACookie();
if(ga1[''utmcsr'']) {
var utm_source = ga1[''utmcsr''];
}
if(ga1[''utmccn'']) {
var utm_campaign = ga1[''utmccn''];
} if(ga1[''utmcmd'']) {
var utm_medium = ga1[''utmcmd''];
}
if(ga1[''utmctr'']) {
var utm_term = ga1[''utmctr''];
}
if(ga1[''utmcct'']) {
var utm_content = ga1[''utmcct''];
}
}
var googleString2 = "utm_campaign=" + utm_campaign + ''&'' + "utm_medium=" + utm_medium + ''&'' + "utm_term=" + utm_term + ''&'' + "utm_content=" + utm_content;
return obj;
}
function parseGACookie() {
var values = {};
var cookie = readCookie("__utmz");
if (cookie) {
var z = cookie.split(''.'');
if (z.length >= 4) {
var y = z[4].split(''|'');
for (i=0; i<y.length; i++) {
var pair = y[i].split("=");
values[pair[0]] = pair[1];
}
}
}
return values;
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split('';'');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)=='' '') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function widgetTracker() {
/* event tracking order of elements: send (required), event (required), Category, Action, Label, Value */
if (googleString) {
ga(''send'', ''event'', ''queryString'', ''getQueryString'', googleString );
} else {
ga(''send'', ''event'', ''queryString2'', ''getQueryString2'', googleString2 );
}
}
Bueno, no lo probé, pero intenta agregar esos parámetros al método .trackPageview()
, es decir:
pageTracker._trackPageview("?utm_source=...")
De todos modos, tienes que pasar esos parámetros de alguna manera. Y esto significa que siempre tendrás URLs largas con algún tipo de basura de campaña en ellas. No evitará marcar los URL-s incorrectos, los motores de búsqueda indexándolos, etc.
Si desea mantener el control de esos parámetros, configure direcciones URL separadas para los socios, que redireccionan a la URL de destino etiquetada:
http://example.com/campaigns/1 -> http://example.com/?utm_source=...
El nuevo (er) análisis universal le permite especificar estos parámetros; consulte la documentación aquí https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference
Busque la sección "Origen de la campaña" para ver un ejemplo de cómo configurar lo que sería el parámetro utm_source.
Hay una función _setAllowAnchor
en la API de Trackin que le permite especificar las etiquetas en el texto delimitador en lugar de como parámetros de consulta.
pageTracker._setAllowAnchor(true);
Así que puede usar http://www..com/#utm_source=expertexchange
y GA lo entenderá. De esta forma podrás evitar el problema de SEO.
Para el problema de Twitter, le sugiero el método descrito en el seguimiento de Twitter y acortar las URL en Google Analytics .
He publicado esto en el foro de ayuda de Google.
Google por favor lea! Gran oportunidad de mejora! Esto está causando que muchos usuarios no puedan usar los parámetros de publicidad. Permita que los parámetros de publicidad se lean desde la URL utilizada en trackPageview (url).
En cualquier caso, sin esta capacidad, tuve que usar una solución alternativa. En lugar de añadir los parámetros a la URL. Los anexé temporalmente a la URL como un marcador. Luego los quité después de la llamada trackPageview. Al agregarlos como un marcador, la página no se vuelve a cargar. Vea el siguiente ejemplo.
var pageTracker = _gat._getTracker(param);
var orighash = document.location.hash;
if (orighash == "") {
orighash = "none"; // this is done to prevent page scrolling
}
document.location.hash = ''utm_source=''+source+''&utm_campaign=''+campaign+''&utm_medium=''+medium+''&utm_content=''+content;
pageTracker._setAllowAnchor(true);
pageTracker._trackPageview();
document.location.hash = orighash
La solución que utiliza push ([''_ set'', ''campaignParams'', ... parece funcionar solo para la biblioteca heredada ga.js.
Usando analytics.js necesita especificar el parámetro de campaña por separado. P.ej
ga(''set'', ''campaignName'', ''TheCampaignName...'');
ga(''set'', ''campaignSource'', ''someCampaignSource'');
ga(''set'', ''campaignMedium'', ''email'');
Puede usar la API de Google Analytics para personalizar la llamada a _trackPageview en su ejemplo.
pageTracker._trackPageview("/inbound/" + campaignSource + "/" + campaignMedium );
Todos los enlaces entrantes se mostrarán en Google Analytics en el directorio / inbound / "pseudo directory" con un "directorio" separado para Campaign Source y Campaign Medium.
Török Gábor me dio una idea.
// ...
var campaignMedium = <%= ViewData.Model.CampaignMedium %>;
var campaignSource = <%= ViewData.Model.CampaignSource %>;
var campaignName = <%= ViewData.Model.CampaignName %>;
// save the old hash
var oldHash = document.location.hash;
// add campaign data to the hash
document.location.hash = ''utm_source='' + escape(campaignSource) + ...;
pageTracker._setAllowAnchor(true);
pageTracker._trackPageview();
// restore the old hash:
document.location.hash = oldHash;
De esta manera, puede crear los datos de la campaña en el backend, y luego, pasarlos al hash dinámicamente, y luego restaurarlos sin que el usuario se dé cuenta. Es decir, el seguimiento de la campaña es 100% independiente de la URL real.