Contador de clicks en enlaces salientes compatible con buscadores

Cortesía de estadisticasweb.com.

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 (septiembre 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 (NOTA: Programación en Castellano lo hará en breve).

El problema de la transmisión de PageRank en los intercambios de links

Según la propia documentación de Google, 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).

Conclusión

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.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP