Seguimiento de campañas con Google Analytics sin parameters de cadena de consulta

¿Existe alguna forma admitida en Google Analytics para rastrear una campaña sin tener que usar parameters de cadena de consulta?

En Analytics puede labelr un enlace a su sitio con parameters de cadena de consulta como utm_campaign y utm_medium que transmiten información sobre la campaña para que pueda rastrearse.

Google en realidad tiene una herramienta en línea para ayudar en la creación de dichos enlaces.

Por ejemplo, si StackOverflow anunciaba en Experts Exchange, puede tener un enlace como este:

http://www.stackoverflow.com/?utm_source=expertexchange&utm_medium=banner&utm_campaign=a-better-expert-exchange

Por muchas razones, no quiero que aparezcan estos parameters torpes en mi URLS:

  • Quiero fomentar el twittering, y los enlaces largos desalientan esto
  • No quiero que la gente los marque con ID de campaña en
  • Quiero que las personas vean una URL limpia
  • No quiero que los motores de búsqueda indexen estos enlaces.
  • Quiero un control total sobre los parameters que se envían a Google Analytics, y no dejar que mis socios confundan las URL a las que acceden a mi sitio con

Miré hace un time para tratar de encontrar una manera en la que pudiera establecer estos parameters. 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 parameters de cadena de consulta por otra cosa, por ejemplo, para usar src lugar de utm_source que ejecutaría:

  pageTracker._setCampSourceKey("src"); 

Realmente no puedo entender por qué no hacen que sea fácil establecer explícitamente el valor de la key utm_source , y no solo configurar un nombre de parámetro alternativo para ella.

Recuerdo hace un time que encontré a alguien que tenía una especie de truco desagradable, pero ni siquiera puedo encontrarlo ahora. Sin embargo, parece recordar que quien quiera que sea tomó una copy del código analítico y esencialmente lo bifurcó y lo pirateó. ¡Esta no es una buena solución para mí!

¿Hay alguna manera oficialmente aceptada de hacer esto en absoluto, sin algún tipo de networkingirecciones desagradables?

En pocas palabras, quiero hacer algo como esto (sitio ASP.NET MVC). Dale a una partnet un enlace a mi sitio con una URL como esta:

  http://www.example.com/?cid=2dae88a8-66b1-475d-8a35-2978bd1a158c 

En el controller de mi página de MVC averiguaría con qué campaña se relaciona este GUID y estableceré el estado del model. Nota: esto me da la ventaja de que puedo cambiar los parameters de la campaña sin tener que volver a publicar la URL.

En la página misma, yo 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 quisiera poder hacer.

¿Alguien ha logrado hacer algo como esto con éxito?

_set campaignParams

Tu teoría "_setCampaignData" finalmente existe, en la forma de ["_set","campaignParams",...]

Si tiene una forma de inyectar los valores que desea establecer mediante progtwigción (por ejemplo, configurar una cookie en una networkingirección, o en el lado del server e imprimir en la página), puede usar la API _set para codificar los parameters de campaña que te gustaría establecer

El formatting para eso es simplemente:

 _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 biblioteca más reciente de Google Analytics, analytics.js / Universal Analytics.

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(); // restre the old hash: document.location.hash = oldHash; 

De esta forma, podría crear los datos de la campaña en el backend y luego pasarlos al hash dinámicamente y luego restaurarlos sin que el usuario lo note. Es decir, el seguimiento de la campaña es 100% independiente de la URL real.

Hay una function _setAllowAnchor en la API de Trackin que le permite especificar las tags en el text de anclaje en lugar de como parameters de consulta.

 pageTracker._setAllowAnchor(true); 

Entonces puede usar http://www.stackoverflow.com/#utm_source=expertexchange y GA lo entenderá. De esta manera puedes evitar el problema de SEO.

Para el problema de Twitter, te sugiero el método descrito en la publicación de seguimiento de Twitter y abreviar las URL en Google Analytics .

Lo publiqué 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 parameters de publicidad. Permita que los parameters 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 agregar los parameters a la URL. Los agregué temporalmente a la URL como un marcador. Luego los eliminé 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 

A continuación se muestra una forma actualizada de hacerlo mediante el método universal de Google Analytics para el seguimiento de events en lugar del seguimiento de events estándar de GA.

Toda la cadena UTM puede extraerse de queryString (cuando existe) o extraerse de la cookie de Google (__utmz) y luego pasar a Google Analytics usando el código siguiente.

 ga('send', 'event', 'queryString', 'getQueryString', googleString ); 

Luego, con la ejecución del disparador que quiera crear (utilizo una function llamada "widgetTracker"), puede ejecutar el rastreador de events de 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://stackoverflow.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 (requinetworking), event (requinetworking), Category, Action, Label, Value */ if (googleString) { ga('send', 'event', 'queryString', 'getQueryString', googleString ); } else { ga('send', 'event', 'queryString2', 'getQueryString2', googleString2 ); } } 

La solución que usa push (['_ set', 'campaignParams'] … parece funcionar solo para la biblioteca henetworkingada ga.js.

Al utilizar analytics.js, debe especificar el parámetro de la campaña por separado. P.ej

 ga('set', 'campaignName', 'TheCampaignName...'); ga('set', 'campaignSource', 'someCampaignSource'); ga('set', 'campaignMedium', 'email'); 

https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#campaignName

Bueno, no lo probé, pero trato de agregar esos parameters al método .trackPageview() , es decir:

 pageTracker._trackPageview("?utm_source=...") 

De todos modos, tienes que pasar esos parameters de alguna forma. Y esto significa que siempre tendrás URL largas con algún tipo de basura de campaña en ellas. No impedirá marcar las URL incorrectas, los motores de búsqueda que las indexan, etc.

Si desea mantener el control de esos parameters, configure URL-s separadas para los socios, que networkingirijan a la URL objective labelda:

 http://example.com/campaigns/1 -> http://example.com/?utm_source=... 

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 aparecerán en Google Analytics en el / pseudo directory / inbound con un "directory" separado para Campaign Source y Campaign Medium.

El nuevo (a) análisis universal le permite especificar estos parameters: consulte la documentation aquí https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference

Busque la sección "Origen de campaña" para ver un ejemplo de cómo definir el param utm_source.