{% extends "portal_base.html" %}
{% block title %}Analytics · Portal{% endblock %}
{% block topbar_title %}Analytics{% endblock %}
{% block portal_content %}
Views (last 30 days)
{{ pageviews_last_30_days }}
Top pages
Public visits, last 30 days
| Page |
Visits |
{% for row in top_pages %}
| {{ row.path }} |
{{ row.count }} |
{% empty %}
| No public page views in the last 30 days. |
{% endfor %}
UTM landings
{{ total_visits }}
Attributed leads
{{ total_attributed }}
Top source
{{ top_source|default:"—" }}
Top campaign
{{ top_campaign|default:"—" }}
Landing volume by source
{% for row in visits_by_source|slice:":8" %}
{% empty %}
{% endfor %}
UTM landings
From ?utm_* hits
| Source |
Medium |
Campaign |
Landings |
{% for row in visits_by_combo %}
| {{ row.utm_source|default:"(direct)" }} |
{{ row.utm_medium|default:"—" }} |
{{ row.utm_campaign|default:"—" }} |
{{ row.count }} |
{% empty %}
| No UTM landings yet. Open a public URL with ?utm_source=… |
{% endfor %}
Recent landings
| When |
Path |
Source |
Campaign |
{% for visit in recent_visits %}
| {{ visit.created_at|date:"M j, g:i A" }} |
{{ visit.path }} |
{{ visit.utm_source|default:"—" }} |
{{ visit.utm_campaign|default:"—" }} |
{% empty %}
| No visits recorded. |
{% endfor %}
Lead attribution
After contact-form submit
| Source |
Medium |
Campaign |
Leads |
{% for row in leads_by_combo %}
| {{ row.utm_source|default:"(direct)" }} |
{{ row.utm_medium|default:"—" }} |
{{ row.utm_campaign|default:"—" }} |
{{ row.count }} |
{% empty %}
| No attributed leads yet — submit the contact form after a UTM landing. |
{% endfor %}
{% endblock %}