From efe967389d2e0b0723c3a5b737ff87a520ef487b Mon Sep 17 00:00:00 2001 From: Serreau Jovann Date: Thu, 26 Mar 2026 12:13:08 +0100 Subject: [PATCH] Add bounce rate to admin Analytics dashboard Bounce rate = visitors with only 1 pageview / total visitors. Color-coded: green <40%, yellow <60%, red >=60%. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/Controller/AdminController.php | 13 +++++++++++++ templates/admin/analytics.html.twig | 4 ++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/Controller/AdminController.php b/src/Controller/AdminController.php index f0182e2..49c76a5 100644 --- a/src/Controller/AdminController.php +++ b/src/Controller/AdminController.php @@ -695,6 +695,18 @@ class AdminController extends AbstractController ->getQuery() ->getSingleScalarResult(); + // Bounce rate: visitors with only 1 pageview + $bouncedVisitors = (int) $em->createQueryBuilder() + ->select('COUNT(v.id)') + ->from(AnalyticsUniqId::class, 'v') + ->where('v.createdAt >= :since') + ->andWhere('(SELECT COUNT(e2.id) FROM '.AnalyticsEvent::class.' e2 WHERE e2.visitor = v.id) = 1') + ->setParameter('since', $since) + ->getQuery() + ->getSingleScalarResult(); + + $bounceRate = $visitors > 0 ? round($bouncedVisitors / $visitors * 100, 1) : 0; + $topPages = $em->createQueryBuilder() ->select('e.url, COUNT(e.id) AS hits') ->from(AnalyticsEvent::class, 'e') @@ -755,6 +767,7 @@ class AdminController extends AbstractController 'period' => $period, 'visitors' => $visitors, 'pageviews' => $pageviews, + 'bounce_rate' => $bounceRate, 'top_pages' => $topPages, 'top_referrers' => $topReferrers, 'devices' => $devices, diff --git a/templates/admin/analytics.html.twig b/templates/admin/analytics.html.twig index 521329b..e5aef0e 100644 --- a/templates/admin/analytics.html.twig +++ b/templates/admin/analytics.html.twig @@ -30,8 +30,8 @@

{{ visitors > 0 ? (pageviews / visitors)|number_format(1) : '0' }}

-

Periode

-

{{ {today: "Aujourd'hui", '7d': '7 derniers jours', '30d': '30 derniers jours', all: 'Depuis le debut'}[period] }}

+

Bounce Rate

+

{{ bounce_rate }}%