Script zum tracken von externen Links

Google Analytics Script zum Tracken von externen Links

/*
 * The basic Google Analytics configuration only tracks clicks on internal links
 *
 * In order to track clicks on links that lead away from your site, you need to add an onClick event
 * handler to that link.
 *
 * This script will find external links automatically for you and add the relevant GA code
 *
 * Requires:
 *  Google Analytics
 *  jQuery
 *
 * parseUri code orignally by Steven Levithan <stevenlevithan.com>, used under MIT License
 * and modified for simplification
 *
 * This code free to all users for any use. Just don't be a jackass and pretend that you wrote it
 *
 * Dan Rumney <dancrumb@danrumney.co.uk>
 */

/*
 * Implementing is easy
 *
 * Add the <script> element pulling in this .js file after the <script> element calling in jQuery
 * Wherever you include your Google Analytics code, add the line:
 *
 *   var ega = new EnableGA(pageTracker,mappings);
 *
 * where 'pageTracker' is the variable that hold the response from _getTracker("GA code");
 * and 'mappings' is explained below.
 * Changelog: @author Andreas Grundner. Now pageTracker is a bool and is set to true when we want to track with GA
 *
 * Optionally, you can add a third parameter, true, if you want to track all external links, even those without
 * as explicitly defined pseudo location.
 *
 * Optionally, you can add a fourth parameter, true, if you want to test the pseudo location mappings that
 * you've created. Instead of following external links, this will display the pseudo locations in the console or
 * in an alert box
 *
 * Mappings
 * --------
 * The mappings are simple an object (or associative array, if you prefer) of pseudo-locations and matching regular expressions:
 *
 * {
 *	ABC: new RegExp("abc\.com"),
 *  XYZ: new RegExp("xyz\.co.")
 *  }
 */
function EnableGA(tracker,mappings,trackUnknownLinks,testing)
{
	this.tracker = tracker;
	this.mappings = mappings;
	this.trackUnknown = (typeof(trackUnknownLinks) != "undefined")?trackUnknownLinks:false;
	this.testing = (typeof(testing) != "undefined")?testing:false;

	this.parseOptions = {
		key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
		q:   {
			name:   "queryKey",
			parser: /(?:^|&)([^&=]*)=?([^&]*)/g
		},
		parser: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/
	};

	var oThis = this;
    $(document).ready(function(){oThis.enable();});
}

/*
 * enable
 *
 * Enables GA tracking of external links
 */
EnableGA.prototype.enable = function()
{
	if(this.tracker || this.testing)
	{
		var oThis = this;
		$("a").each(function()
		{
			var target = $(this).attr("href");
			if((target != null) && (target != ""))
			{
				var URL = oThis.parseUri(target);
				if ((URL.host == "") || (URL.host.search(window.location.hostname)>=0))
				{
					// Do nothing. Google Analytics already tracks local files
				}
				else
				{
					var pseudoLoc = oThis.getPseudoLoc(URL);
					if(pseudoLoc)
					{
						$(this).bind('click',function(evt)
						{
							if(oThis.testing)
							{
								if((typeof(console) != 'undefined') && (typeof(console.log) != 'undefined'))
								{
									console.log(pseudoLoc);
								}
								else
								{
									alert(pseudoLoc);
								}
								evt.preventDefault();
							}
							else
							{
							//	pageTracker._trackPageview(pseudoLoc);
								_gaq.push(['_trackEvent', 'external', pseudoLoc]);
							}
						});
					}
				}
			}
		});
	}
};

/*
 * getPseudoLoc
 *
 * Gets a pseudo-location for the purposes of GA tracking for the provided
 * URL of an external link
 */
EnableGA.prototype.getPseudoLoc = function(url)
{
	var response = this.trackUnknown?"/external/"+[url.host,url.directory,url.file].join(''):null;

	jQuery.each(this.mappings, function(plDir,regExp)
			{
				if(regExp.test(url.host))
				{
					if(((url.path == "") || (url.path == "/")) && (url.file == ""))
					{
						response = "/"+plDir+"/root";
					}
					else
					{
					//	response = "/"+plDir+"/"+[url.directory,url.file].join('/');
						response = "/"+plDir+url.directory + url.file;
					}
				}
			});

	return response;
};

/*
 * parseURI
 *
 * Takes a URI and splits it into its constituent parts
 */
EnableGA.prototype.parseUri = function(str)
{
	var	o   = this.parseOptions,
		m   = o.parser.exec(str),
		uri = {},
		i   = 14;

	while (i--) uri[o.key[i]] = m[i] || "";

	uri[o.q.name] = {};
	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
		if ($1) uri[o.q.name][$1] = $2;
	});

	return uri;
};

Sei sozial und teile

Über den Autor Andreas Grundner

Ich bin Wordpress, Joomla, Typo3 Integrator, Unix Rootserver Administrator und Webanwendungsprogrammierer. Mittlerweile habe ich über 70 Webprojekte weitgehend selbstständig mit enger Kundenabsprache realisiert. Ich bin auf One Page Websites auf Wordpress-Basis spezialisiert, biete aber auch Suchmaschinenoptimierung (SEO), Blogs, Facebook, Youtube und Google+ Seiten an. Meine Verpflichtung gilt dem Datenschutz, meine Leidenschaft dem Finden und Aufzeigen von Sicherheitslücken in Webanwendungen.

Meinung sagen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.