Contar los clicks pero con enlaces directos
12 Febrero, 2007 por CarlosSi tienes un directorio te interesará poder contar los clicks que hacen en los links salientes pero también te interesa que esos enlaces cuenten para los buscadores (por que de otra manera no les gustará demasiado a los webmasters que envien sus webs)
Al parecer son dos cosas no compatibles pero mediante javascript podemos conseguirlo y con JQuery de forma fácil. La táctica consiste en tener los links directos, sin pasar por ningun script que cuente los clicks, algo como esto:
<a href="http://www.google.com">Google.com</a>
Por otra parte mediante javascript detectamos cuando se hace click en esos enlaces y redireccionamos el enlace hacía nuestro script contador. Con JQuery es tan simple como esto:
<script type='text/javascript'>
$(window).load( function() {
$('a.link_out').bind("click", function() {
url = $(this).attr("href");
window.location = "/contador.php?url=" + url;
return false;
});
});
</script>
y en los links les ponemos la clase link_out:
<a href="http://www.google.com" class="link_out">Google.com</a>
Y listo, sólo faltaría crear el archivo que cuenta las visitas y hace la redirección pero eso lo dejaremos para vosotros o para otro día.
Otra opción, tal como dice ouyeah en los comentarios sería contabilizar el click mediante ajax y no hacer ninguna redirección:
<script type='text/javascript'>
$(window).load( function() {
$('a.link_out').bind("click", function() {
url = $(this).attr("href");
$.post("go.php",
{ "url": url },
function() {
window.location = url;
} );
return false;
});
});
</script>
Y la verdad es que si parece más elegante y sólo se me ocurre que puede tener algún problema en navegadores antiguos que no soporten ajax aunque tampoco tengo claro si en estos navegadores funcione JQuery.
Vodka comenta que no le funcionaba y ha tenido que modificar algo el código:
En lugar de usar:
$('a.link_out')
ha usado
$(”a”).filter(”.link_out”)
Febrero 13th, 2007 at 10:58 pm
Yo haría una llamada $.post a contador.php y en window.location pondría directamente la url. Así evitaría la redirección de contador.php a la url verdadera.
Queda como más bonito, ¿no? ;)
Febrero 14th, 2007 at 2:35 pm
Pues tienes razón ouyeah, así queda mejor.
Febrero 15th, 2007 at 6:26 pm
Muy bueno el script, aunque he tenido que ponerlo como $(document).ready( function() {
$(”a”).filter(”.link_out”).bind(”click”, function() { para que funcionara y hacerle alguna pequeña modificacion mas para que abriera el link en una nueva ventana. Saludos.
Febrero 15th, 2007 at 6:37 pm
En JQuery se puede usar load y ready, son parecidas pero tendría que funcionar igualmente. Con load hay que esperar a que se carguen las imágenes y con ready sólo es necesario que esté cargado el DOM.
Y por que has puesto el filter? Es más rápido?
Lo de la nueva ventana no lo puse por que no me gusta, prefiero que la gente pueda elegir.
De todas maneras gracias por tu apunte :)
Febrero 16th, 2007 at 7:19 pm
No lo he cambiado por mayor velocidad ni por ningún otro tipo de optimización, como te explicaba más arriba el código que habías puesto no me funcionaba así que me fui a la web del JQuery y busqué ejemplos de código con los que trastear y, tras hacer las modificaciones mencionadas, todo marchó sin problemas con lo que se deduce que alguna diferencia notable sí que hay, ¿eh? Je, je, je.
Si a mí no me ruló probablemente a muchos otros tampoco, así que probando primero a hacerle esos cambios quizá se eviten luego el tener que romperse la cabeza un buen rato ;)
Lo de la nueva ventana es off topic y lo he puesto porque realmente lo necesitaba así: no es igual un sistema de votación por estrellitas que un top web, por no hablar del modo de navegar que tienen muchos usuarios “novatos”… A cada cosa lo suyo.
Lo dicho, gracias a tí por el código, que me vino de perlas para algo que me urgía :)
Febrero 17th, 2007 at 6:19 pm
Es raro que no te funcionase sin el filter, pero lo pondré en el artículo por si a alguien más le pasa lo mismo.
Lo de la ventana nueva lo has hecho con un window.open ?
Febrero 18th, 2007 at 2:31 am
[…] Blog Neurotic: El blog de la empresa de diseño web NeuroticUn artículo: Contar los clicks pero con enlaces directos […]
Febrero 18th, 2007 at 8:36 am
Sí, eso es, Carlos: en un sitio con un window.open (url); y en otro con un window.open(url,parametros); y tira que da gloria verlo en cualquier navegador :) La explicación quizás esté en alguna interferencia con el resto del código de la página, cada sitio web es único y alguno habrá por ahí al que no le sirva ninguna de las dos versiones, fijísimo…
Tú, que eres más entendido en todo esto, si quieres analizar el problemilla ese directamente contáctame y te paso la URL de la página en concreto. Chapó por el post. Saludos!
Marzo 19th, 2007 at 6:45 pm
[…] bien, en este post de Carlos, nos propone una solución similar (se basa en lo mismo), pero mucho más elegante (en el enlace […]
Octubre 12th, 2007 at 12:49 pm
Amigos Vodka, Ouyeah y Carlitos. No soy programador ni mucho menos. Pero me podrian pasar el ejemplo completo con un enlace funcionando que se abra en una ventana aparte? Es decir… Quiero usarlo en mi blog de Wordpress y quiero al poner un enlace ponerle la class y poner el enlace y saber que me servira para contabilizar y donde consigo el archivo “go.php” al que hacen referencia en el codigo?? Y ya que le estoy pidiendo mucho… donde debo implementar el codigo?? No soy muy bruto en esto pero tampoco soy un genio… jejeje… Gracias de antemano por la ayuda. Cuidense
Octubre 12th, 2007 at 10:17 pm
Si alguien me puede ayudar, quiero hacer una portal donde clientes mios puedan anunciarse y cobrarles por cada click que den a sus respectivos sitios.
Ejemplo, un portal con categorias, restaurantes, hoteles, medicos, contructoras, etc., y dentro de cada categoria, los recpectivos clientes, ok, lo que quiero es cobrar en general a los que estan en cada categoria si alguien da click a esa categoria y posteriormente cobrar de nuevo por si lo selecciona a el directamente, el costo por ejemplo, 1 click en cada categoria cobrar a todos los que enten dentro de esa categoria un 10% de lo que se cobra para dar el click al sitio del cliente, si le cobro al cliente $1.00 peso mexicano, el click en la categoria sería de 10 centavos pero a todos los que estan dentro de esa categoría.
Gracias de antemano