Analítica web con Matomo como alternativa a Google Analytics

Escrito por picodotdev el .
planeta-codigo web
Enlace permanente Comentarios

Matomo es una alternativa a Google Analytics con funciones similares que cubren las necesidades de la mayoría de sitios web. Es software libre con algunas funciones premium que requieren comprar una licencia anual de uso. Matomo se puede hospedar on-premise que requiere administrar esa infraestructura o en la nube ofrecida por la propia Matomo. En el artículo muestro en un ejemplo como empezar a usar Matomo en un sitio web con Docker.

Matomo

La analítica web permite obtener valiosa información y datos de un sitio web, de los usuarios y de su comportamiento. Estos datos e información sirven para tomar decisiones basadas en parte datos en vez de únicamente en opiniones e intuiciones. Cuantas son las visitas de un sitio web, qué páginas son las más visitadas, cuánto tiempo permanecen los usuarios en una página, que días de la semana y a que horas hay más visitas, que navegador, sistema operativo y dispositivo usan los usuarios, un ordenador o dispositivo móvil, cuáles son los sitios de referencia y mucha otra información.

La herramienta de analítica web más utilizada es Google Analytics. En el artículo Analítica web en el servidor sin JavaScript en el cliente con GoAccess comentaba algunos motivos para usar o no usar Google Analytics.

Los motivos para usar Google Analytics están en que es gratuita, fácil de instalar en un sitio web, tiene gran cantidad de funcionalidades básicas y avanzadas que cubren las necesidades de cualesquiera usuarios y no requiere mantener infraestructura propia. Los motivos en contra de usar Google Analytics están en que los datos de un sitio web y de los usuarios es recogido por una tercera parte que establece su propia licencia al servicio y los datos, lo que afecta a la privacidad de los usuarios.

Matomo, una alternativa a Google Analytics

Matomo es una de las herramientas como alternativa a Google Analytics. Tiene funciones equivalentes a las de Google Analytics, tiene una licencia software libre y es posible instalarlo en infraestructura propia para controlar los datos de los sitios web sin depender de una tercera parte. Matomo también ofrece la posibilidad de usarlo hospedado y administrado en su modelo cloud ofrecido por Matomo.

Algunas funciones de Matomo son métricas en tiempo real, seguimiento con eventos y de contenido, informes personalizados, dimensiones y variables personalizadas, geolocalización, segmentación de usuarios, transiciones de páginas y estadísticas sobre la página, velocidad el sitio web y páginas, seguimiento de campañas, tracking de eventos y tag manager entre otras

Aunque Matomo es software libre con las funciones anteriores incorporadas para tener acceso a otras funciones requieren una suscripción para usu uso. Algunas de las funciones premium son mapas de calor o heatmaps en la interacción en una página, pruebas A/B, informes personalizados, analítica de formularios y medios, funnels, flujo de usuarios o autenticación con SAML. Al igual que Google Analytics para realizar la analítica web Matomo requiere insertar un pequeño script de JavaScript en el HTML de todas las páginas de los sitios sitio web. El script es proporcionado por Matomo al crear el sitio web.

Las funciones premium se pueden adquirir de forma individual las que se usen o todas en forma de paquete en la tienda de Matomo. El paquete de funciones premium tienen un coste de algo más de 1K €/año para 4 usuarios. El coste de la versión cloud varía en función del número de visitas partiendo de los 29 €/mes hasta las 50K páginas vistas a los 239 €/mes para 1M de páginas vistas. Hay precios para webs con más tráfico y se ofrece casi un 20% de descuento al pagar de forma anual.

Ejemplo de sitio web con Matomo

Matomo requiere una base de datos MySQL o MariaDB para persistir los datos de analítica. En este ejemplo uso Docker con un archivo de Docker Compose para iniciar los contenedores de una base de datos MySQL, el servidor de Matomo y un servidor proxy con Nginx. La versión de MySQL con la que es compatible Matomo es la 5.7 o superior.

En el archivo de Docker Compose se define los tres servicios, se configuran unos volúmenes de datos compartidos entre el servidor web y el servidor de Matomo y dos archivos donde se definen algunas variables de entorno tanto para la base de datos MySQL como para la configuración de Matomo.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
version: '3'

services:
  mysql:
    image: mysql:5.7
    command: --max-allowed-packet=64MB
    volumes:
      - mysql:/var/lib/mysql
    env_file:
      - ${PWD}/database-mysql.env

  matomo:
    image: matomo:fpm-alpine
    links:
      - mysql
    volumes:
      - ${PWD}/config:/usr/share/nginx/config:rw
      - matomo:/var/www/html
    env_file:
      - ${PWD}/database-matomo.env

  nginx:
    image: nginx
    volumes:
      - ${PWD}/matomo.127.0.0.1.xip.io.conf:/etc/nginx/conf.d/matomo.127.0.0.1.xip.io.conf:ro
      - ${PWD}/www.127.0.0.1.xip.io.conf:/etc/nginx/conf.d/www.127.0.0.1.xip.io.conf:ro
      - matomo:/var/www/html:ro
      - ${PWD}/www:/var/nginx/html/www
    ports:
      - 80:80
    depends_on:
      - matomo

volumes:
  mysql:
  matomo:

docker-compose.yml
1
2
3
4
MYSQL_ROOT_PASSWORD=mysql
MYSQL_DATABASE=matomo
MYSQL_USER=matomo
MYSQL_PASSWORD=matomo
database-mysql.env
1
2
3
4
5
6
MATOMO_DATABASE_HOST=mysql
MATOMO_DATABASE_DBNAME=matomo
MATOMO_DATABASE_USERNAME=matomo
MATOMO_DATABASE_PASSWORD=matomo
MATOMO_DATABASE_ADAPTER=mysql
MATOMO_DATABASE_TABLES_PREFIX=matomo_
database-matomo.env

En Nginx se configuran dos sitios web virtuales, un sitio web en el que realizar la analítica web y otro para el sitio web para la herramienta Matomo.

1
2
3
4
5
6
7
8
9
server {
    listen 80;
    server_name www.127.0.0.1.xip.io;

    location / {
        root   /var/nginx/html/www;
        index  index.html index.htm;
    }
}
www.127.0.0.1.xip.io.conf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
upstream php-handler {
	server matomo:9000;
}

server {
	listen 80;
	server_name matomo.127.0.0.1.xip.io;

	add_header Referrer-Policy origin; # make sure outgoing links don't show the URL to the Matomo instance
	root /var/www/html; # replace with path to your matomo instance
	index index.php;
	try_files $uri $uri/ =404;

	## only allow accessing the following php files
	location ~ ^/(index|matomo|piwik|js/index|plugins/HeatmapSessionRecording/configs).php {
		# regex to split $uri to $fastcgi_script_name and $fastcgi_path
		fastcgi_split_path_info ^(.+\.php)(/.+)$;

		# Check that the PHP script exists before passing it
		try_files $fastcgi_script_name =404;

		include fastcgi_params;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		fastcgi_param PATH_INFO $fastcgi_path_info;
		fastcgi_param HTTP_PROXY ""; # prohibit httpoxy: https://httpoxy.org/
		fastcgi_pass php-handler;
	}

	## deny access to all other .php files
	location ~* ^.+\.php$ {
		deny all;
		return 403;
	}

	## disable all access to the following directories
	location ~ /(config|tmp|core|lang) {
		deny all;
		return 403; # replace with 404 to not show these directories exist
	}
	location ~ /\.ht {
		deny all;
		return 403;
	}

	location ~ js/container_.*_preview\.js$ {
		expires off;
		add_header Cache-Control 'private, no-cache, no-store';
	}

	location ~ \.(gif|ico|jpg|png|svg|js|css|htm|html|mp3|mp4|wav|ogg|avi|ttf|eot|woff|woff2|json)$ {
		allow all;
		## Cache images,CSS,JS and webfonts for an hour
		## Increasing the duration may improve the load-time, but may cause old files to show after an Matomo upgrade
		expires 1h;
		add_header Pragma public;
		add_header Cache-Control "public";
	}

	location ~ /(libs|vendor|plugins|misc/user) {
		deny all;
		return 403;
	}

	## properly display textfiles in root directory
	location ~/(.*\.md|LEGALNOTICE|LICENSE) {
		default_type text/plain;
	}
}

matomo.127.0.0.1.xip.io.conf

Matomo requiere una configuración inicial, en el ejemplo se accede a Matomo en la dirección http://matomo.127.0.0.1.xip.io. En la configuración se solicita configurar un sitio web y se proporciona el script a insertar en las páginas del sitio web.

Configuración inicial de Matomo

Configuración inicial de Matomo

Para que tome los datos de analítica del sitio web hay que insertar el script proporcionado en todas la páginas devueltas por el sitio web. Este es la página HTML de ejemplo mínima con el script insertado y el envío de un evento cuando se pulsa un botón.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Index</title>

    <!-- Matomo -->
    <script type="text/javascript">
      var _paq = window._paq = window._paq || [];
      /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
      _paq.push(['trackPageView']);
      _paq.push(['enableLinkTracking']);
      (function() {
        var u="//matomo.127.0.0.1.xip.io/";
        _paq.push(['setTrackerUrl', u+'matomo.php']);
        _paq.push(['setSiteId', '1']);
        var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
        g.type='text/javascript'; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
      })();
    </script>
    <!-- End Matomo Code -->

    <script type="text/javascript">
      function onClickButton() {
        _paq.push(['trackEvent', 'Index', 'Click', 'Send Event']);
      }
    </script>
  </head>
  <body>
    <p>Hello Matomo!</p>
    <p><a href="#" title="Send event" onclick="onClickButton();">Send event</a></p>
  </body>
</html>
index.html

Web con analítica de Matomo

Web con analítica de Matomo

Matomo recibe los datos de analítica de las páginas desde el navegador de los usuarios cuando las páginas web son accedidas. Entre las funciones incluidas en Matomo están los paneles de Visitantes, Adquisición, Comportamiento, Objetivos y Mercado.

Analítica web con Matomo Analítica web con Matomo

Analítica web con Matomo Analítica web con Matomo

Analítica web con Matomo
Terminal

El código fuente completo del ejemplo puedes descargarlo del repositorio de ejemplos de Blog Bitix alojado en GitHub y probarlo en tu equipo ejecutando siguiente comando:
docker-compose up


Comparte el artículo: