how do search engines treat javascript links
By Herve le turdu

Can Google decrypt base64 encoded links?

The Set up:

In a page, we embed a javascript code able to decode a couple of encoded base64 links.
I wondered:

  • Is Google able to run the complex JS code we are giving?
  • If the links are discovered, are the target pages going to be indexed?
  • Is any page rank going to be flowed though the Javascript links?

I am joining the code I use to decode the links:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
<script type="text/javascript">
var Base64 = {
 
		// private property
		_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
 
		// public method for encoding
		encode : function (input) {
			var output = "";
			var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
			var i = 0;
 
			input = Base64._utf8_encode(input);
 
			while (i < input.length) {
 
				chr1 = input.charCodeAt(i++);
				chr2 = input.charCodeAt(i++);
				chr3 = input.charCodeAt(i++);
 
				enc1 = chr1 >> 2;
				enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
				enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
				enc4 = chr3 & 63;
 
				if (isNaN(chr2)) {
					enc3 = enc4 = 64;
				} else if (isNaN(chr3)) {
					enc4 = 64;
				}
 
				output = output +
				this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
				this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
 
			}
 
			return output;
		},
 
		// public method for decoding
		decode : function (input) {
			var output = "";
			var chr1, chr2, chr3;
			var enc1, enc2, enc3, enc4;
			var i = 0;
 
			input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
 
			while (i < input.length) {
 
				enc1 = this._keyStr.indexOf(input.charAt(i++));
				enc2 = this._keyStr.indexOf(input.charAt(i++));
				enc3 = this._keyStr.indexOf(input.charAt(i++));
				enc4 = this._keyStr.indexOf(input.charAt(i++));
 
				chr1 = (enc1 << 2) | (enc2 >> 4);
				chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
				chr3 = ((enc3 & 3) << 6) | enc4;
 
				output = output + String.fromCharCode(chr1);
 
				if (enc3 != 64) {
					output = output + String.fromCharCode(chr2);
				}
				if (enc4 != 64) {
					output = output + String.fromCharCode(chr3);
				}
 
			}
 
			output = Base64._utf8_decode(output);
 
			return output;
 
		},
 
		// private method for UTF-8 encoding
		_utf8_encode : function (string) {
			string = string.replace(/\r\n/g,"\n");
			var utftext = "";
 
			for (var n = 0; n < string.length; n++) {
 
				var c = string.charCodeAt(n);
 
				if (c < 128) {
					utftext += String.fromCharCode(c);
				}
				else if((c > 127) && (c < 2048)) {
					utftext += String.fromCharCode((c >> 6) | 192);
					utftext += String.fromCharCode((c & 63) | 128);
				}
				else {
					utftext += String.fromCharCode((c >> 12) | 224);
					utftext += String.fromCharCode(((c >> 6) & 63) | 128);
					utftext += String.fromCharCode((c & 63) | 128);
				}
 
			}
 
			return utftext;
		},
 
		// private method for UTF-8 decoding
		_utf8_decode : function (utftext) {
			var string = "";
			var i = 0;
			var c = c1 = c2 = 0;
 
			while ( i < utftext.length ) {
 
				c = utftext.charCodeAt(i);
 
				if (c < 128) {
					string += String.fromCharCode(c);
					i++;
				}
				else if((c > 191) && (c < 224)) {
					c2 = utftext.charCodeAt(i+1);
					string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
					i += 2;
				}
				else {
					c2 = utftext.charCodeAt(i+1);
					c3 = utftext.charCodeAt(i+2);
					string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
					i += 3;
				}
 
			}
 
			return string;
		}
 
	}
 
 
</script>

The links I used looked like:

1
 <a href="javascript:location=Base64.decode('aHR0cDovL3d3dy5sZXR1cmR1LmNvbS9saW5rLWpzLw==')"> Click here to reach my test page that was not indexed and had no pagerank</a>

The results:

YES, Google can run the script and decode the encoded links. It doesn’t come as a surprise but it is always good to check for yourself. Now more surprising:

  • Yes google index the link.
  • Yes google pass linkjuice. The page has a unique backlink to and had no PR.

pr-javscript-test

Complementary informations can be found here:
http://www.blogstorm.co.uk/javascript-links-now-passing-pagerank-anchor-text/
and Google running Jquery:
http://www.seomoz.org/ugc/new-reality-google-follows-links-in-javascript-4930
http://swapped.tumblr.com/post/23133779276/google-bot-now-crawls-arbitrary-javascript-sites

Get the best prices on the web



RECENTLY BLOGGED ABT

TWEETS

  • My twitter:

Test of NS:

I will try to insert different elements into it:

Broken TWiTTs :(

  •  

AUTHOR

  • Hervé Le TurduMy name is Herve Le Turdu.
    I am a 32 years old french* man with an inquiring mind and an enthusiastic personality. Get to know me better !

    *Pardon my English tainted with a strong accent and of many mistakes

Projects & Work

LINKS - BeCause they deserve it!

I Love SEOgadget ----------------------------------------------------
Testing stuff:
http://leturdu.com/2012/03/how-search-engines-treat-javascript-links/

Test 1 // show post ID: 384

Test 2 // show category page: SEO