Suivi des liens sortants avec Javascript et PHP

Je l'ai essayé en utilisant jQuery mais ça ne fonctionne pas.

<script> $("a").click(function () { $.post("http://www.example.com/trackol.php", {result: "click" }, "html"); }); </script> <a href="http://www.google.com">out</a> 

Pour obtenir les meilleurs résultats, vous devriez changer deux choses dans votre approche

  1. Utilisez onmousedown au lieu de click – de cette façon, vous obtenez quelques millisecondes supplémentaires pour compléter la demande de suivi, sinon le navigateur ne peut pas commencer la connexion à votre tracker, car il se déplace déjà loin de la page d'origine. L'inconvénient est que vous pourriez avoir des chiffres faussement positifs, car l'utilisateur cliquant sur le clic pourrait ne pas terminer le clic (par exemple, maintient le bouton de la souris enfoncé et déplace le curseur loin du lien) mais dans l'ensemble, c'est un sacrifice que vous devriez faire, Compte tenu de la meilleure qualité de suivi.
  2. Au lieu d'un appel Ajax ( $.post('...') ), utilisez un pré-chercheur d'image ( new Image().src='...' ). Le fait que le traqueur n'est pas une image n'est pas pertinent dans ce cas parce que vous ne souhaitez pas utiliser l'image résultante de toute façon, vous voulez simplement faire une demande au serveur. L'appel Ajax est une connexion bidirectionnelle, donc il faut un peu plus de temps et pourrait échouer si le navigateur navigue déjà, mais le pré-acheteur d'image vient d'envoyer la requête au serveur et cela n'a pas vraiment d'importance si vous récupérez quelque chose ou ne pas.

Donc, la solution serait quelque chose comme ça:

 <script> $(document).ready(function() { $("a").mousedown(function (){ new Image().src= "http://www.example.com/trackol.php?result=click"; }); }); </script> <a href="http://www.google.com">out</a> 

Au lieu d'utiliser JavaScript pour appeler un script de suivi php, vous pouvez simplement lier directement votre script de suivi et le rediriger à son tour vers la destination finale, quelque chose comme ceci:

 <a href="http://www.example.com/trackol.php?dest=http://www.google.com">out</a> 

Et dans le script PHP, après avoir fait vos trucs de suivi:

 ... header("Location: $dest"); 

Comme mentionné, le problème est que vous n'utilisez pas le script après le chargement du DOM. Vous pouvez résoudre ce problème en enveloppant votre script jQuery à l'intérieur de $(function() { } , de la manière suivante:

Cela marche:

 <!doctype html> <html> <head> <meta charset="utf-8"> <title>Tracking outgoing links with JavaScript and PHP</title> </head> <body> <p><a href="http://www.google.com/">Test link to Google</a></p> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> <script> $(function() { $('a').click(function() { $.post('http://www.example.com/trackol.php', { result: 'click' }, 'html'); }); }); </script> </body> </html> 

Consultez-le en action ici: http://jsbin.com/imomo3