Contador de clicks en links salientes compatibles con buscadores
- EL
problema de la transmisión de PageRank en los
intercambios de links - La
solución al problema: una técnica
inédita - Anatomía de un sencillo sitio web que
implementa esta solución - Conclusión
Un link desde nuestras páginas no sólo
envía visitas al sitio web al que apunta. Desde la
aparición del sistema de posicionamiento por popularidad
(introducido por Google con su mecanismo de
PageRank), un link del tipo "<A HREF=…" se considera como un
"voto" al sitio que recibe el enlace, lo que ayuda a mejorar su
posición en los resultados de las búsquedas.
Sin embargo, en muchos sitios de Internet resulta prioritario contabilizar
los clicks que hacen los usuarios en los enlaces salientes (como
se acostumbra hacer en los programas de intercambio de links
por efectividad, también conocidos como "tops"). En estos
programas los links salientes no son "verdaderos links hacia el
sitio destino", sino que toman la forma <a href="out.php?URL=www.sitiodestino.com">. Este enlace,
para Google es un link a una página interior de nuestro
sitio (en este caso out.php), que toma como parámetro una
dirección destino para
ejecutar una redirección. Pero Google ignorará el
parámetro recibido por el script, por no ser el destino del
link "real".
Este artículo describe una técnica para
generar links verdaderos, capaces de ser seguidos por Google y
transmitir pagerank, pero que también permiten a nuestros
programas realizar un seguimiento de cuántos usuarios hacen
click sobre estos links. A la fecha de publicación del
presente artículo (setiembre del 2004) ningún programa hace uso de este
mecanismo. Esperemos que a partir de este artículo los
desarrolladores incorporen esta tecnología para beneficio de todos los
webmasters.
EL problema de la
transmisión de PageRank en los intercambios de
links
Según la propia documentación de Google
(http://www.google.es/bot.html), el googlebot (el robot de
Google que periódicamente explora la web) es capaz de seguir
sólo enlaces de dos tipos: anchors (<A HREF=… >) e
imágenes (<IMG SRC=…
>). La misma documentación también aclara que Google
es incapaz de seguir enlaces desde flash, javascript y parámetros en
los enlaces a otras URLs.
En sus intercambios de enlaces muchos webmasters
prefieren usar enlaces "manuales", que son links comunes
que transmiten pagerank pero no permiten a los programas
contabilizar cuántos clicks se hicieron sobre ellos. Con
este mecanismo el webmaster no sabe si el intercambio es
productivo (las estadísticas nos muestran
las visitas que recibimos desde ese intercambio, pero no podemos
saber las visitas que estamos enviando).
Otros webmasters optan por tener un mayor control del intercambio, e
instalan programas de gestión de intercambios
(como ser AWG Trade, Traffic Drive, CJ-Ultra, TM3, etc). Pero al
instalar estos programas, los enlaces desde sus sitios web dejan
de ser seguidos por los robots de los buscadores (también
llamados crawlers).
La solución al problema:
una técnica inédita
La solución consiste en incluír en nuestro
sitio enlaces reales tipo anchor (<A
HREF="http://www.sitiodestino.com">). Sin hacer trampas. Tal
cual están programados para seguir todos los robots de
indexación de páginas. Pero usando un código especial de DHTML
que nos permite contar cuántas veces se hace click en el
enlace, sin necesidad de poner en el propio enlace nada
especial…
Anatomía de un sencillo
sitio web que implementa esta solución
Desarrollaremos una implementación de ejemplo
sumamente básica para demostrar el uso de esta técnica.
Para el ejemplo hemos elegido usar PHP y javascript, aunque es
posible hacerlo con cualquier otro lenguaje de programación.
Nuestro pequeño ejemplo se divide en dos partes:
1) Un sencillo script (un contador sumamente
básico) que nos permite llevar la cuenta de los
clicks.
Este script de ejemplo mantiene la cuenta de los
clicks en un archivo de texto plano (cont.txt), como
los contadores de visitas más básicos.
El sólo hecho de abrir este script con un browser
hace que el número guardado en el archivo "cont.txt" se
incremente en uno.
Archivo: contador.php
<?php
// archivo que guarda el numero de hits
$cont = "cont.txt";
$fp = fopen($cont,rw);
$num = fgets($fp,9999);
fclose($fp);
$fp = fopen($cont,w);
$num += 1;
fputs($fp, $num);
fclose($fp);
?>
2) Una página web conteniendo los
links salientes sobre los cuales queremos controlar la
actividad de los usuarios.
Archivo: links.html
<html>
<head>
<title>Página de
Ejemplo</title>
<script language="javascript"
TYPE="text/javascript">
<!–
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// (C) 2004, Eduardo Gonzalez Gonzalez
(www.estadisticasweb.com) //
// Este código y scripts adjuntos son cedidos al
dominio público
//
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
var TRACKfrObj; function TRACKlink(CounterScript) { if
(!document.createElement) {return true};
var TRACKfrDoc; if (!TRACKfrObj &&
document.createElement) {
try {var TRACKfrtemp=document.createElement('iframe');
TRACKfrtemp.setAttribute('id','TRACKframe');
TRACKfrtemp.style.border='0px';
TRACKfrtemp.style.width='0px';
TRACKfrtemp.style.height='0px'; TRACKfrObj =
document.body.appendChild(TRACKfrtemp);
if (document.frames) {TRACKfrObj =
document.frames['TRACKframe']; }}
catch(exception) {TRACKhf='<iframe id=" TRACKframe"
style="'; TRACKhf+='border:0px;';
TRACKhf+='width:0px;'; TRACKhf+='height:0px;';
TRACKhf+='"></iframe>';
document.body.innerHTML+= TRACKhf; TRACKfrObj = new
Object();
TRACKfrObj.document = new Object();
TRACKfrObj.document.location = new Object();
TRACKfrObj.document.location.iframe =
document.getElementById('TRACKframe');
TRACKfrObj.document.location.replace =
function(location) { this.iframe.src = location; }}}
if (navigator.userAgent.indexOf('Gecko') !=-1 &&
! TRACKfrObj.contentDocument)
{setTimeout(' TRACKtrack()',10); return
false;}
// Browser tipo/version NS6
if (TRACKfrObj.contentDocument) {TRACKfrDoc =
TRACKfrObj.contentDocument;}
// Browser tipo/version IE5.5 & IE6
else if (TRACKfrObj.contentWindow) {TRACKfrDoc =
TRACKfrObj.contentWindow.document;}
// Browser tipo/version IE5
else if (TRACKfrObj.document) {TRACKfrDoc =
TRACKfrObj.document;}
else { return true; }
TRACKfrDoc.location.replace(CounterScript); return
false;
}
//–>
</script>
</head>
<body bgcolor="#ffffff">
<br><br><br>
Un link de ejemplo:
<span onClick="TRACKlink('contador.php')"><a
href="http://www.estadisticasweb.com" target="_blank">Visite
EstadisticasWeb.com!</a></span>
<br><br><br>
En el archivo "cont.txt" alojado en el servidor se encuentra una cifra
que indica el número de veces que se accedió a este
link. <br> El link contenido en esta página es
compatible con los crawlers, y especialmente con Googlebot. Por
lo tanto sirve para transmitir Pagerank.
<br><br><br>
</body>
</html>
Explicación del proceso
EL link utilizado es completamente simple:
<a href="http://www.estadisticasweb.com"
target="_blank">Visite
EstadisticasWeb.com!</a>
Es precisamente el tipo de link que Googlebot (y otros
robots) quieren ver en nuestras páginas web.
Pero este link html a su vez está "envuelto" por un
tag tipo <span>. Este es un elemento "en línea" del
html (ver manual de html), que no tiene
significación estructural propia, y se usa comunmente para
aplicar estilos CSS. Pero en nuestro caso utilizamos el método "onClick" asociado a
este elemento <span>, para invocar un javascript, que
realiza la tarea de activar nuestro script contador de clicks
salientes:
<span onClick="TRACKlink('contador.php')">
¿Es esto un link? No parece… ¿verdad? Pruébalo
</span>
La invocación del método "onClick" del
elemento <span> ocurre paralelamente al funcionamiento
normal que tiene el link <a> comprendido dentro del bloque
<span>. Las dos aperturas de documento ocurren al mismo
tiempo e independientemente
una de otra. La página invocada desde el <a> la
veremos cargarse en nuestra pantalla. El script (contador.php) se
abre en una ventana invisible, por lo que no muestra ningún contenido, no
obstante realiza la función deseada: incrementa
el contador correspondiente.
En cuanto al código javascript, su misión es generar
momentáneamente un iframe en el cual se abre el script
(contador.php en nuestro caso) que le es pasado como
parámetro desde el propio link en el cual deseamos contar
las visitas salientes. El código javascript en este ejemplo
está muy completo, y prevee varias situaciones de error. A
su vez es compatible con diferentes modelos de browser. No
obstente, también es posible realizar esta tarea mediante
algún código javascript más sencillo (pero con el
riesgo de perder
compatibilidad con varios modelos de browsers).
En este artículo me he limitado a describir esta
técnica de cómputo de clicks en enlaces salientes. La
misma está probada y funciona perfectamente bien,
permitiendo computar los clicks salientes desde enlaces que a su
vez son compatibles con Google (transmiten Pagerank).
También suministré un ejemplo de código
completo y absolutamente probado y funcional.
Con estos elementos los programadores estarán en
condiciones de desarrollar sus programas basados en esta
tecnología, pero adecuando el mecanismo de conteo según
las necesidades de cada programa: posiblemente usando bases de datos, pasando al script
parámetros que permitan computar paralelamente los clicks
desde muchos enlaces, etc.
Ing. Eduardo González González
(*)
(*) Consultor en Sistemas de Seguridad