edgi-govdata-archiving / EEW-Website

EEW Static Website
https://environmentalenforcementwatch.org/
1 stars 3 forks source link

Analytics for outbound links to learn what external resources are used #329

Open Frijol opened 2 years ago

Frijol commented 2 years ago

It would be interesting to know if/which links people click on the External Resources page (https://environmentalenforcementwatch.org/data/resources/). If we add the following to our footer, I think they'll show up in Google Analytics.

(h/t https://www.joehessert.com/seo/google-analytics-external-link-tracking which has some other good ideas too)

//Track Outbound Link Clicks

(function trackOutbounds() {

        var hitCallbackHandler = function(url,win) {
            if (win) {
                    window.open(url, win);
            } else {
                window.location.href = url;
        }
    };

    var addEvent = function(el, eventName, handler) {

                if (el.addEventListener) {
                        el.addEventListener(eventName, handler);
                        } else {
                        el.attachEvent('on' + eventName, function(){
                                handler.call(el);
                    });
                }
        }

        if (document.getElementsByTagName) {
                var el = document.getElementsByTagName('a');
                var getDomain = document.domain.split('.').reverse()[1] + '.' + document.domain.split('.').reverse()[0];

                // Look thru each a element
                for (var i=0; i < el.length;i++) {

                        // Extract it's href attribute
                        var href = (typeof(el[i].getAttribute('href')) == 'string' ) ? el[i].getAttribute('href') : '';

                        // Query the href for the top level domain (xxxxx.com)
                        var myDomain = href.match(getDomain);

                        // If link is outbound and is not to this domain        
                        if ((href.match(/^(https?:|\/\/)/i)  && !myDomain) || href.match(/^mailto\:/i)) {

                                // Add an event to click
                                addEvent(el[i],'click', function(e) {
                                        var url = this.getAttribute('href'), win = (typeof(this.getAttribute('target')) == 'string') ? this.getAttribute('target') : '';

                                                        console.log ("add event", url);
                                        // Log even to Analytics, once done, go to the link
                                        ga('send', 'event', 'outbound', 'click', url,
                                                {'hitCallback': hitCallbackHandler(url,win)},
                                                {'nonInteraction': 1}
                                        );

                                        e.preventDefault();
                                });
                        }
                }
        }
})();
Frijol commented 2 years ago

build error, hotfixing in https://github.com/edgi-govdata-archiving/EEW-Website/pull/335