Tracking email opens in Google Analytics

后端 未结 6 1020
广开言路
广开言路 2020-12-04 15:53

We have tracking in our emails to track clicks back to our site through Google Analytics. But is there a way to track opens? I would imagine I have to add a google trackin

6条回答
  •  心在旅途
    2020-12-04 16:23

    I better post this to save everyone the trouble of trying to construct that monstrous UTM gif URL.

    You can now use the new Measurement Protocol API to send a POST request and easily record events, page views, hits, or almost any other type of measurement. It's super easy!

    POST /collect HTTP/1.1
    Host: www.google-analytics.com
    
    payload_data
    

    For example, here's a code snippet to send an event in C# (using SSL endpoint):

    public void SendEvent(string eventCategory = null, string eventAction = null, string eventLabel = null, int? eventValue = null)
    {
        using(var httpClient = new HttpClient() {BaseAddress = new Uri("https://ssl.google-analytics.com/")}) {
            var payload = new Dictionary();
    
            // Required Data
            payload.Add("v", "1"); // Version
            payload.Add("tid", "UA-XXX"); // UA account
            payload.Add("aip", "1"); // Anonymize IP
            payload.Add("cid", Guid.NewGuid().ToString()); // ClientID
            payload.Add("t", "event"); // Hit Type
    
            // Optional Data
            payload.Add("ni", "1"); // Non-interactive hit
    
            // Event Data
            if (eventCategory != null)
            {
                payload.Add("ec", eventCategory);
            }
            if (eventAction != null)
            {
                payload.Add("ea", eventAction);
            }
            if (eventLabel != null)
            {
                payload.Add("el", eventLabel);
            }
            if (eventValue != null)
            {
                payload.Add("ev", eventValue.Value.ToString(CultureInfo.InvariantCulture));
            }
    
            using (var postData = new FormUrlEncodedContent(payload))
            {
                var response = httpClient.PostAsync("collect?z=" + DateTime.Now.Ticks, postData).Result;
    
                if (!response.IsSuccessStatusCode)
                {
                    throw new Exception("Could not send event data to GA");
                }
            }
        }
    }
    

    Way easier than the hack with the __utm gif.

    Helpful Example

    You can easily add this to emails by doing this:

    In an email:

    
    

    In your MVC site, for example, NewsletterController:

    public ActionResult Track(string newsletterName) {
        using(var ga = new AnalyticsFacade()) {
           ga.TrackEmailOpen(newsletterName);
        }
    
        return Content("~/images/pixel.gif", "image/gif");
    }
    

    In your Global.asax or RouteConfig:

    routes.MapRoute(
        "newsletteropen",
        "newsletter/track.gif",
        new
        {
            controller = "Newsletter",
            action = "Track"
        });
    

    BOOM, done, son. You can now track email opens using a much nicer API that's supported and documented.

提交回复
热议问题