Skip to content

Instantly share code, notes, and snippets.

@er1c
Forked from andyed/SEOPositionPlus.js
Created December 22, 2010 17:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save er1c/751781 to your computer and use it in GitHub Desktop.
Save er1c/751781 to your computer and use it in GitHub Desktop.
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is the the SEOPosition library.
*
* The Initial Developer of the Original Code is
* Andy Edmonds <andyed@gmail.com>
*
* Portions created by the Initial Developer are Copyright (C) 2008
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Jim MacKay <jim@jagvent.com> ; Generalized, Added More SEs, Google TLD,3LD,Images,Page,Position
*
* Learn more at http://alwaysbetesting.com/abtest/index.cfm/2009/4/22/Log-Your-Exact-Google-Rank-with-Google-Analytics
* ***** END LICENSE BLOCK ***** */
var seoposition = {
ref: document.referrer.toString(),
init: function () {
/* Google Page */
this.ssGetPageNum ("SEO Google Page",".google.","q=","start=",0,10);
/* Google Position */
this.ssGetPosition ("SEO Google Position",".google.com/url","q=","cd=");
/* Yahoo */
this.ssGetPageNum ("SEO Yahoo Page",".yahoo.","p=","b=",1,10);
/* MSN */
this.ssGetPageNum ("SEO MSN Page",".msn.","q=","first=",1,10);
/* Live */
this.ssGetPageNum ("SEO Live Page",".live.","q=","first=",1,10);
/* Bing */
this.ssGetPageNum ("SEO Bing Page",".bing.","q=","first=",1,10);
/* AOL */
this.ssGetPageNum ("SEO AOL Page",".aol.","query=","page=",1,1);
/* Google TLD */
this.ssGetTld ("SEO Google TLD",".google.","q=","start=",0,10);
/* Google 3LD */
this.ssGet3ld ("SEO Google Site",".google.");
/* Google Images */
this.ssGetGoogleImages ("SEO Google Images","images.google.");
}
}
// source = engine name for report
// domain = 2nd Level of Domain; i.e. "images.google." including the "."
seoposition.ssGetGoogleImages = function(source,domain) {
if(seoposition.ref.indexOf(domain) > -1) {
var ssImageNum = seoposition.ssGetParam("start",seoposition.ref);
var ssKeyword = unescape(seoposition.ssGetParam("prev",seoposition.ref));
ssKeyword = unescape(seoposition.ssGetParam("q",ssKeyword));
ssKeyword = ssKeyword.replace(/\+/g, " ");
if(pageTracker != 'undefined') {
pageTracker._trackEvent(source, ssKeyword, document.location.pathname, parseInt(ssImageNum));
}
}
}
// source = engine name for report
// domain = 2nd Level of Domain; i.e. ".google." including the "."
seoposition.ssGet3ld = function(source,domain) {
if(seoposition.ref.indexOf(domain) > -1) {
var ss3ld = seoposition.ref.slice(seoposition.ref.indexOf("//") + 2, seoposition.ref.indexOf(domain) + domain.length - 1);
if(pageTracker != 'undefined') pageTracker._trackEvent(source, ss3ld, document.location.pathname, 1);
}
}
// source = engine name for report
// domain = 2nd Level of Domain; i.e. ".google." including the "."
// qParam = query parameter name for the engine
// pParam = page parameter name for the engine
// offset & divisor are used to calculate page properly
// so {page reported} = 1 + ( {pParam Value} - {offset} ) / {divisor}
seoposition.ssGetTld = function(source,domain,qParam,pParam,offset,divisor) {
if(seoposition.ref.indexOf(domain) > -1) {
var ssTld = seoposition.ref.substring(seoposition.ref.indexOf(domain) + domain.length - 1);
ssTld = ssTld.substring(0,ssTld.indexOf("/"));
var ssPage = seoposition.ssCalcPageNum(pParam,offset,divisor);
if(pageTracker != 'undefined') pageTracker._trackEvent(source, ssTld, document.location.pathname, ssPage);
}
}
// source = engine name for report
// qParam = query parameter name for the engine
// pParam = page parameter name for the engine
// offset & divisor are used to calculate page properly
// so {page reported} = 1 + ( {pParam Value} - {offset} ) / {divisor}
seoposition.ssGetPageNum = function (source,domain,qParam,pParam,offset,divisor) {
if(seoposition.ref.indexOf(domain) > -1 && seoposition.ref.indexOf(qParam) > -1 ) {
var page = seoposition.ssCalcPageNum(pParam,offset,divisor);
if(pageTracker != 'undefined') pageTracker._trackEvent(source, "Page" + page, document.location.pathname, page);
}
}
// source = engine name for report
// qParam = query parameter name for the engine
// pParam = page parameter name for the engine
// so {position reported} = {pParam Value}
seoposition.ssGetPosition = function (source,domain,qParam,pParam) {
if(seoposition.ref.indexOf(domain) > -1 && seoposition.ref.indexOf(qParam) && seoposition.ref.indexOf(pParam) > -1 ) {
var position = seoposition.ssGetParam(pParam,seoposition.ref) * 1;
var position_text = "Position-" + ((position < 10)?"0":"") + position;
if(pageTracker != 'undefined') pageTracker._trackEvent(source, position_text, document.location.pathname, position);
}
}
// pParam = page parameter name for the engine
// offset & divisor are used to calculate page properly
// so {page returned} = 1 + ( {pParam Value} - {offset} ) / {divisor}
seoposition.ssCalcPageNum = function (pParam,offset,divisor) {
if(seoposition.ref.indexOf(pParam) > -1) {
if(seoposition.ref.split("?").length) {
return 1+(seoposition.ssGetParam(pParam,seoposition.ref)-offset)/divisor;
}
} else {
return 1;
}
}
// ssGetParam retreives a parameter value from a string
seoposition.ssGetParam = function (sParam,sString) {
var arParams = sString.split("?")[1];
arParams = arParams.split("&");
for(var i=0;i<arParams.length;i++) {
if(arParams[i].indexOf(sParam) > -1 ) {
return arParams[i].split("=")[1];
}
}
}
seoposition.init();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment