{% extends 'admin/shell.html.twig' %} {% set nav = 'statistics' %} {% block title %}Statistik{% endblock %} {% block heading %}Statistik{% endblock %} {% block lead %}Gezählt wird auf dem Server, ohne Cookie und ohne IP-Adresse – deshalb braucht diese Messung keine Einwilligung. Zeiten in UTC.{% endblock %} {% block actions %} Als CSV {% endblock %} {% block content %}

Seitenaufrufe {{ stats.total }}

ab {{ stats.from|date('d.m.Y') }}{% if stats.total > 0 %} · im Schnitt {{ (stats.total / stats.range)|number_format(stats.total / stats.range < 10 ? 1 : 0, ',', '.') }} am Tag{% endif %}
{% if stats.total == 0 %}

Noch keine Aufrufe in diesem Zeitraum. Gezählt wird erst, wenn eine veröffentlichte Seite tatsächlich abgerufen wird – Aufrufe der Verwaltung und erkennbare Suchmaschinen zählen nicht mit.

{% else %} {# Drawn by the server as an SVG: no chart library, no script, and it prints. The bars are coloured by class, not by a style attribute, because inline styles are forbidden here. The numbers themselves are in the table below, which is what a screen reader reads. #} {% for entry in stats.days %} {% set height = entry.count > 0 ? (entry.count / stats.busiest * 100)|round(1) : 0 %} {% endfor %}

{{ stats.days|first.day|date('d.m.') }}höchster Tag: {{ stats.busiest }}{{ stats.days|last.day|date('d.m.') }}

Zahlen je Tag
{% for entry in stats.days|reverse %} {% endfor %}
Aufrufe je Tag im gewählten Zeitraum
TagAufrufe
{{ entry.day|date('d.m.Y') }}{{ entry.count }}
{% endif %}
{% if stats.total > 0 %}

Tageszeit

Summe je Stunde, nur die letzten {{ compactAfter }} Tage sind stundengenau
{% set busiestHour = max(stats.hours|map(entry => entry.count)|filter(count => count > 0)|default([1])) %} {% for entry in stats.hours %} {% set height = entry.count > 0 ? (entry.count / busiestHour * 100)|round(1) : 0 %} {% endfor %}

0 Uhr12 Uhr23 Uhr

Ältere Tage sind zu einem Tageswert zusammengefasst und erscheinen hier nicht. Das hält die Tabelle klein, kostet aber die Stunde – eine Entscheidung, keine Lücke.

{% endif %}
{% for group in [ {title: 'Seiten', hint: 'Meistaufgerufen', rows: stats.pages, key: 'path', link: true}, {title: 'Verweise von außen', hint: 'Domain, die verlinkt hat', rows: stats.referrers, key: 'referrer_host', link: false}, {title: 'Nicht gefundene Adressen', hint: 'Kandidaten für eine Weiterleitung', rows: stats.missing, key: 'path', link: false} ] %}

{{ group.title }}

{{ group.hint }}
{% if group.rows is empty %}

Keine Daten im Zeitraum.

{% else %}
    {% for row in group.rows %}
  1. {% if group.link %}{{ row[group.key] }}{% else %}{{ row[group.key] }}{% endif %} {{ row.count }}
  2. {% endfor %}
{% endif %}
{% endfor %}

Was diese Zahlen nicht sagen

Ehrlich statt vollständig

Gezählt werden Aufrufe, nicht Besucher: ohne Wiedererkennung lässt sich nicht sagen, ob zehn Aufrufe von zehn Personen oder von einer kommen. Es gibt deshalb auch keine Verweildauer, keine Absprungrate, keinen Klickweg durch die Website und kein Land. All das braucht ein Merkmal, das eine Person wiedererkennbar macht – und damit eine Einwilligung.

Erkennbare Suchmaschinen und Überwachungsdienste werden anhand ihrer Kennung ausgeschlossen. Das ist eine Heuristik: wer sich als Browser ausgibt, wird mitgezählt. Die Zahl ist also „Aufrufe, die sich nicht als Maschine gemeldet haben“, nicht „Menschen“. Erfundene Adressen von Crawlern laufen gesammelt unter (sonstige), damit die Tabelle nicht mit tausenden Zeilen wächst.

Aufbewahrt wird {{ keepDays }} Tage, damit ein Vergleich mit dem Vorjahresmonat möglich bleibt. Danach wird gelöscht.

KantSites · Arbeitsstand

{% endblock %}