Aller au contenu

Analytics

ArtisanCMS integre un systeme d’analytics entierement cote serveur. Aucun script de suivi externe n’est injecte dans les pages, ce qui garantit la conformite RGPD et le respect de la vie privee des visiteurs.

Le systeme d’analytics repose sur plusieurs composants :

ComposantRole
TrackPageViewMiddleware qui intercepte les requetes entrantes
TrackPageViewJobJob asynchrone qui enregistre la vue
PageViewModele pour les vues individuelles brutes
PageViewDailyModele pour les donnees agregees par jour
AnalyticsServiceService d’interrogation et de calcul des statistiques
AnalyticsControllerControleur admin pour l’affichage du tableau de bord

Le middleware TrackPageView est applique aux routes publiques du site. A chaque requete, il dispatche un job asynchrone pour eviter tout impact sur le temps de reponse :

class TrackPageView
{
public function handle(Request $request, Closure $next)
{
$response = $next($request);
TrackPageViewJob::dispatch([
'url' => $request->fullUrl(),
'referrer' => $request->header('referer'),
'user_agent' => $request->userAgent(),
'ip_hash' => hash('sha256', $request->ip()),
'site_id' => current_site_id(),
]);
return $response;
}
}

Le job TrackPageViewJob traite l’enregistrement en arriere-plan via la file d’attente. Il cree une entree dans la table page_views avec les informations collectees.

Le modele PageView stocke chaque vue individuelle :

ChampTypeDescription
urlstringURL de la page visitee
referrerstringPage d’origine (nullable)
user_agentstringAgent utilisateur du navigateur
ip_hashstringHash SHA-256 de l’adresse IP
site_idintegerIdentifiant du site
created_attimestampDate et heure de la visite

Le modele PageViewDaily contient les donnees agregees par jour et par URL, utilisees pour le tableau de bord analytique.

La commande AggregatePageViewsCommand consolide les vues brutes en statistiques journalieres :

Fenêtre de terminal
php artisan analytics:aggregate

Cette commande est prevue pour etre executee quotidiennement via le planificateur Laravel. Elle calcule pour chaque URL et chaque jour : le nombre total de vues, le nombre de visiteurs uniques (base sur ip_hash) et les referents principaux.

La commande PurgeOldPageViewsCommand supprime les donnees brutes anciennes tout en conservant les agregats :

Fenêtre de terminal
# Supprime les vues brutes de plus de 90 jours (valeur par defaut)
php artisan analytics:purge
# Duree de retention personnalisee
php artisan analytics:purge --days=60

Les donnees agregees dans PageViewDaily sont conservees indefiniment pour l’historique.

Le systeme d’analytics respecte les exigences du RGPD :

  • Pas de cookies : aucun cookie de suivi n’est depose.
  • Pas de scripts externes : aucune donnee n’est transmise a des tiers.
  • Do Not Track : l’en-tete DNT du navigateur est respecte. Si le visiteur a active DNT, aucune vue n’est enregistree.
  • Adresses IP hashees : seul un hash SHA-256 de l’IP est stocke, rendant l’identification impossible.
  • Vues admin exclues : les visites des utilisateurs connectes a l’administration ne sont pas comptabilisees.
  • Retention limitee : les donnees brutes sont purgees apres 90 jours.

L’AnalyticsController expose un tableau de bord accessible depuis l’administration :

Graphique en courbes affichant l’evolution des pages vues sur une periode configurable (7, 30 ou 90 jours).

Classement des pages les plus visitees avec le nombre de vues et de visiteurs uniques.

Liste des sources de trafic principales (moteurs de recherche, reseaux sociaux, liens directs).

Nombre de visiteurs uniques par jour, calcule a partir des hash d’adresses IP.

Le modele SearchLog enregistre les requetes de recherche effectuees par les visiteurs sur le site. Cela permet d’identifier les contenus recherches et d’adapter la strategie editoriale.

SearchLog::create([
'query' => $searchTerm,
'results' => $resultCount,
'site_id' => current_site_id(),
]);