PHP: Seguimiento de estadisticas de un sitio web (Tracking)
24 diciembre 2012 28 comentarios
¿Que es el tracking?
El tracking (rastreo) se refiere a llevar el seguimiento de los visitantes de tu sitio web. Aunque también puedes llevar tracking de los boletines de emails enviados a tus visitantes registrados, obvio, si es que mandas boletines en tu sitio web. El tracking se logra guardando en la base de datos ciertos datos del visitante.
Después de un tiempo se irán generando datos de los visitantes (o de los clicks) y con ellos podemos llevar algunas estadísticas como; las paginas mas visitadas, cuantos visitantes tenemos por día, mes o año, etc.
Los datos a guardar en el tracking
En este ejemplo aplicaremos tracking a un sitio web y los datos que guardaremos serán los siguientes:
- El nombre de la pagina web.
- El nombre de la pagina de donde viene el usuario.
- la dirección IP.
- El nombre del navegador.
- Fecha y hora de la visita.
Cada vez que el visitante navegue por una pagina se guardaran en una tabla de mysql los datos anteriores. Esto lo lograremos incrustando un sencillo script en cada pagina que deseemos darle seguimiento. Los primeros cuatro datos los tomaremos del array global $_SERVER[ ]. Este arreglo contiene información muy interesante acerca del servidor y de la computadora del usuario. El quinto dato lo conseguiremos con la funcion now() de MySQL.
Para que entiendas mejor el ejemplo a continuacion te muestro una imagen con la estructura de los principales archivos que utilizare:
El archivo index.html unicamente contiene los links a cada una de las paginas a las que se les desea dar seguimiento y un enlace al resumen del tracking.
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <link REL="SHORTCUT ICON" href="img/tux_icon.ico"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Test Tracking Sitio Web :: Inicio</title> <link rel="stylesheet" href="css/estilos.css" type="text/css" /> </head> <body> <h2>Prueba de Tracking</h2> <p><a href="pagina1.php">Visitar Pagina1</a></p> <p><a href="pagina2.php">Visitar Pagina2</a></p> <p><a href="pagina3.php">Visitar Pagina3</a><br/><br/></p> <p><a href="tracking_paginas.php">Ver Estadisticas</a></p> </body> </html>
Diseño de la Base de datos
/* Crear BD */ CREATE DATABASE prueba; /* Crear la tabla */ CREATE TABLE `tbl_tracking` ( `id_tracking` int(11) NOT NULL auto_increment, `tx_pagina` varchar(70) NOT NULL default '', `tx_paginaOrigen` varchar(200) NOT NULL default '', `tx_ipRemota` varchar(15) NOT NULL default '', `tx_navegador` varchar(255) NOT NULL default '', `dt_fechaVisita` date NOT NULL default '0000-00-00', PRIMARY KEY (`id_tracking`) ) AUTO_INCREMENT=1 ;
Como vez únicamente se usara una tabla (tbl_tracking) para guardar el tracking de todas las paginas, esto lo hago así para mantener sencillo y fácil de entender este ejemplo. A mi parecer el nombre de cada campo es lo suficientemente descriptivo como para no tener que explicarte que dato guardara, déjame un comentario si no es así.
El script que guarda el tracking
guardaTracking.php
<?php /* Script que se conecta a la BD y guarda informacion de la pagina que se esta visitando e informacion del visitante. Debe insertarse en cada pagina que se desea darle seguimiento. Author: Gonzalo Silverio gonzasilve@gmail.com Fuente: https://gonzasilve.wordpress.com Archivo: guardaTracking.php */ //conectar la BD include("conectar_bd.php"); conectar_bd(); //Recuperar informacion del visitante $tx_pagina = $_SERVER['PHP_SELF']; //nombre de la pagina web actual $tx_paginaOrigen = $_SERVER['HTTP_REFERER'];// Pagina web de donde viene el visitante $tx_paginaActual = $_SERVER['PHP_SELF']; //nombre de la pagina web actual $i_direccionIp = $_SERVER['REMOTE_ADDR']; // Direccion Ip del visitante $tx_navegador = $_SERVER['HTTP_USER_AGENT']; // Nombre del navegador //Insertar los datos del visitante... $tx_qryInsert ="INSERT INTO tbl_tracking (tx_pagina,tx_paginaOrigen,tx_ipRemota,tx_navegador,dt_fechaVisita) VALUES('$tx_pagina','$tx_paginaOrigen','$i_direccionIp','$tx_navegador',now()) ;" ; $res = mysql_query ( $tx_qryInsert); //Mostrar descripcion del error en caso de //que no se haya insertado el tracking if(!$res){ die(mysql_error()); } <?
Cada linea del script anterior esta comentada por lo que me tomare la libertad de omitir la explicacion. Pero como ves principalmente se realizan dos cosas; recolectar los datos a guardar e insertarlos en la tabla creada para ese proposito.
Si observas en la linea 2 del archivo anterior, estoy insertando un archivo llamado conectar_bd.php con la funcion include de php.
conectar_bd.php
Este archivo se encarga de conectarse con el DBMS y dejar disponible un enlace a la base de datos creada anteriormente.
<?php /* Realiza una conexion al DBMS MySql y selecciona una BD. Author: Gonzalo Silverio gonzasilve@gmail.com Fuente: https://gonzasilve.wordpress.com Archivo: conectar_bd.php */ $conexio; function conectar_bd() { global $conexio; //Definir datos de conexion con el servidor MySQL $elUsr = "root"; $elPw = "12345"; $elServer ="localhost"; $laBd = "prueba"; $conexio = mysql_connect($elServer, $elUsr , $elPw) or die (mysql_error()); mysql_select_db($laBd, $conexio ) or die (mysql_error()); } ?>
Espero que no te sea dificil entender este codigo, pues ya lo he usado y explicado anteriormente en otras entradas del blog.
Paginas con tracking
pagina1.php
He creado 3 paginas de ejemplo a las que se insertara el script que guarda el tracking, solo mostrare el codigo de dos ya que la tercera contiene exactamente el mismo codigo.
<?php /* Pagina 1 de ejemplo de la cual se desea llevar su seguimiento de visitas. Author: Gonzalo Silverio gonzasilve@gmail.com Fuente: https://gonzasilve.wordpress.com Archivo: pagina1.php */ //Insertar el tracking a esta pagina del sitio include "guardaTracking.php"; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <link REL="SHORTCUT ICON" href="img/tux_icon.ico"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Test Tracking Sitio Web :: Pagina 1</title> <link rel="stylesheet" href="css/estilos.css" type="text/css" /> </head> <body> <h2>Pagina 1 -Test Tracking</h2> <p><a href="index.html">Volver</a></p> <p><a href="tracking_paginas.php">Ver Estadisticas</a></p> </body> </html>
Si observas en la linea 10 es donde se inserta el script del tracking con ayuda de la directiva include de PHP, todo lo demas es HTML y basicamente crea dos enlaces, uno al inicio del sitio web y otro a la tabla de resumen del tracking.
pagina2.php
<?php /* Pagina 2 de ejemplo de la cual se desea llevar su seguimiento de visitas. Author: Gonzalo Silverio gonzasilve@gmail.com Fuente: https://gonzasilve.wordpress.com Archivo: pagina2.php */ //Insertar el tracking a esta pagina del sitio include "guardaTracking.php"; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <link REL="SHORTCUT ICON" href="img/tux_icon.ico"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Test Tracking Sitio Web :: Pagina 2</title> <link rel="stylesheet" href="css/estilos.css" type="text/css" /> </head> <body> <h2>Pagina 2 -Test Tracking</h2> <p><a href="index.html">Volver</a></p> <p><a href="tracking_paginas.php">Ver Estadisticas</a></p> </body> </html>
Como decia anteriormente despues de que transcurra el tiempo se iran acumulando datos de todas las paginas trackeadas con los cuales se llevaran las estadisticas del sitio web.
tracking_paginas.php
Esta pagina despliega parte de la informacion del tracking organizada en 3 secciones; informacion del sitio web, de los visitantes y estadisticas de cada pagina web. En este caso e organizado la informacion en base a las paginas web, pero la informacion del tracking se podria analizar, por ejemplo, en base a la fecha de visita.
<?php /* Pagina que muestra la informacion del tracking. Author: Gonzalo Silverio gonzasilve@gmail.com Fuente: https://gonzasilve.wordpress.com Archivo: tracking_paginas.php */ //conectar BD include("conectar_bd.php"); conectar_bd(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <link REL="SHORTCUT ICON" href="img/tux_icon.ico"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Gonzalo Silverio :: Test Tracking Sitio Web</title> <link rel="stylesheet" href="css/estilos.css" type="text/css" /> <style> /*.{ font-size:12px; } */ </style> </head> <body> <table width="100%" border="1" cellspacing="1" bordercolor="#0000FF" id ="tbl_estadisticas"> <thead> <tr> <th colspan="4"><h2>Estadisticas del sitio</h2></th> </tr> <tr> <th width="16%"><strong>Total de Visitantes </strong></th> <th width="24%"><strong>Total de Visitas </strong></th> <th width="25%"><strong>Navegadores usados </strong></th> <th width="35%"><strong>Pagina mas visitada </strong></th> </tr> </thead> <?php $query = "SELECT COUNT( DISTINCT (tx_ipRemota) ) AS i_total FROM tbl_tracking"; $result = mysql_query($query); $i_totalVisitantes = mysql_num_rows($result); $query = "SELECT COUNT(*) as i_total FROM tbl_tracking;"; $result = mysql_query($query); $i_totalVisitas = mysql_result($result,0,'i_total'); $query = "SELECT COUNT(distinct(tx_navegador)) as i_total FROM tbl_tracking"; $result = mysql_query($query); $i_totalNavegadores = mysql_result($result,0,'i_total'); $query = "SELECT tx_pagina, COUNT( tx_pagina ) AS i_total FROM tbl_tracking group by tx_pagina order by i_total DESC;"; $result = mysql_query($query); $i_masVisitada = mysql_result($result,0,'tx_pagina').", ".mysql_result($result,0,'i_total')." visitas"; if($i_totalVisitas>0) { ?> <tr valign="top" > <td><?php echo $i_totalVisitantes; ?></td> <td><?php echo $i_totalVisitas; ?></td> <td><?php echo $i_totalNavegadores; ?></td> <td><?php echo $i_masVisitada; ?></td> </tr> <?php } else { ?> <tr><td colspan="4"><p>No hay datos!</p></td></tr> <?php } ?> </table> <table width="100%" border="1" cellspacing="1" bordercolor="#0000FF" id ="tbl_estadisticas"> <thead> <tr> <th colspan="4"><h2>Estadisticas de visitantes</h2></th> </tr> <tr> <th width="10%"><strong>Direccion Ip</strong></th> <th width="15%"><strong>Fecha</strong></th> <th width="40%"><strong>Navegador usado</strong></th> <th width="35%"><strong>Paginas visitadas</strong></th> </tr> </thead> <?php $queryV = "SELECT * FROM tbl_tracking GROUP by tx_pagina ORDER BY dt_fechaVisita DESC"; $resultV=mysql_query($queryV); $visitors = mysql_num_rows($resultV); if($visitors>0){ $i=1; while ($rowV =mysql_fetch_assoc($resultV)) { $estilo =(($i%2)==0) ? "class='even'":""; ?> <tr valign="top" <?php echo $estilo; ?> > <td><?php echo $rowV['tx_ipRemota']; ?></td> <td><?php echo $rowV['dt_fechaVisita']; ?></td> <td><?php echo $rowV['tx_navegador']; ?></td> <td><a href="<?php echo "http://".$_SERVER['SERVER_NAME'].$rowV['tx_pagina']; ?>" target="_blank"><?php echo $_SERVER['SERVER_NAME'].$rowV['tx_pagina']; ?></a></td> </tr> <?php $i++; } }else{ ?> <tr><td colspan="4"><p>No hay datos!</p></td></tr> <?php } ?> </table> <table width="100%" border="1" cellspacing="1" bordercolor="#0000FF" id ="tbl_estadisticas"> <thead> <tr> <th width="16%" colspan="4"><h2>Estadisticas de paginas</h2></th> </tr> <tr> <th width="16%"><strong>Nombre de la pagina</strong></th> <th width="24%"><strong>Numero de visitas </strong></th> <th width="25%"><strong>Visitado por </strong></th> <th width="35%"><strong>Pagina de donde venia</strong></th> </tr> </thead> <?php $queryP = "SELECT *,count(*) as i_total_visitas FROM tbl_tracking WHERE tx_ipRemota = '".$_SERVER['REMOTE_ADDR']."' GROUP BY tx_pagina"; $resultP=mysql_query($queryP); if($visitors>0){ $i=1; while ($rowP =mysql_fetch_assoc($resultP)) { $estilo =(($i%2)==0) ? "class='even'":""; ?> <tr valign="top" <?php echo $estilo; ?> > <td><?php echo $rowP['tx_pagina']; ?></td> <td><?php echo $rowP['i_total_visitas']; ?></td> <td><?php echo $rowP['tx_ipRemota']; ?></td> <td><a href="<?php echo $rowP['tx_paginaOrigen']; ?>" target="_blank"><?php echo $rowP['tx_paginaOrigen']; ?></a> </td> </tr> <?php $i++; } }else{ ?> <tr><td colspan="4"><p>No hay datos!</p></td></tr> <?php }?> </table> <p align="center"><a href="index.html">Volver</a></p> <br/><br/> </body> </html>
Lo interesante del archivo anterior son las consultas (querys) que se utilizan para obtener los datos, pues hay tantas cosas que se puede hacer con la informacion recolectada. Incluso si asi se necesitara podria utilizarse alguna libreria (como jpGraph) para mostrar la informacion en forma grafica. Pero eso ya depende de las necesidades de cada sitio web. A continuacion muestro un pantallazo de la tabla k muestra el traking del sitio web del ejemplo (click aqui para ampliar):
A continuacion pongo algunos otros querys que obtienen mas informacion estadistica:
//Total de visitas del sitio SELECT count(*) FROM tbl_tracking; //Numero de veces que un navegador a sido usado para visitar el sitio SELECT *, count(*) FROM tbl_tracking GROUP by tx_navegador; //Numero de veces que un usuario en particular nos ha visitado SELECT count(*) FROM tbl_tracking WHERE tx_ipRemota = '127.0.0.1'; //navegador que ha usado un usuario en particular para visitarnos "SELECT *,count(*) FROM tbl_tracking WHERE tx_ipRemota = '127.0.0.1' GROUP BY tx_navegador //Numero de visitas de un usuario en los ultimos 30 dias SELECT *,COUNT(*) FROM tbl_tracking WHERE tx_ipRemota = '127.0.0.1'; //Numero de veces que una pagina ha sido visitada SELECT count(*) FROM tbl_tracking WHERE tx_pagina = '/pagina1.php' //Usuarios que han visitado una pagina en particular SELECT *,count(*) FROM stattracker WHERE tx_pagina = '/pagina1.php' GROUP BY tx_ipRemota
Demo
Hemos llegado al fin del articulo, si deseas ver el ejemplo funcionando da click aqui para ver un demo. Recuerda visitar varias paginas para que veas como se va guardando la informacion, por ultimo entra a la pagina de estadisticas para ver los resultados del tracking.
Si gustas tener los fuentes, ya sabes solo dejame tu email en un comentario y te los hago llegar en un zip. Reviso a diario mi email y por lo tanto, igualmente si tienes dudas con toda confianza me puedes preguntar en un comentario, en cuanto vea tu pregunta la estare contestando.
Espero que te haya gustado el articulo y sobre todo que hojala te sirva de algo en algun momento.
Saludos cordiales.
Hasta pronto y gracias por tu visita.
Comentarios recientes