Web Analytics
seo is the discipline of getting people to a page; web analytics is the discipline of finding out whether it worked. Not "how many visits" — that number is free and mostly useless on its own — but which acquisition effort produced the visits, what visitors did once they arrived, and whether they did the thing the site exists to make happen. Analytics tooling ships a dozen report types with product-marketing names (funnels, cohorts, attribution), which obscures that they are a small set of techniques answering three questions: where did people come from, what did they do, and did they come back. Each technique has a cost — instrumentation effort, review attention, or visitor privacy — and the failure mode of analytics is turning everything on, reviewing nothing, and mistaking the dashboard for the work.
Provenance: formalizing an analytics review process across SFI web properties (self-hosted umami v3), as the measurement counterpart to the seo work that came out of the symbology URL redesign. Umami is the concrete implementation throughout; the techniques predate it and transfer.
The loop: acquire, act, return
Every technique below serves one stage of a loop. Acquisition is how a visitor arrived — search, a link you posted, a campaign. Action is what they did on the site, and specifically whether they did what you wanted. Return is whether they came back. The stages matter because they fail independently and are fixed by different work: an acquisition problem is marketing and SEO work, an action problem is content and UX work, a return problem is product work. Diagnosing "the site isn't working" starts with locating the failing stage — exactly as SEO diagnosis starts with locating the failing pipeline step.
One prerequisite comes before any of it: define success per property. A docs site succeeds when readers reach reference pages; a product site succeeds when someone clicks contact or signup; a content site succeeds on depth and return visits. Until success is named, every report is vanity — traffic went up, and nobody can say whether that mattered.
Events and goals: naming success
Pageviews arrive free with the tracker script. Everything sharper requires custom events — explicit instrumentation calls at the moments that matter:
<button data-umami-event="contact-click" data-umami-event-plan="consulting">
or from code, umami.track('signup', { plan: 'pro' }). The instrumentation decision is the analytics decision: an event you didn't record is a question you can't answer later, and events are not retroactive. Instrument the success moments first, sparingly — five meaningful events beat fifty noisy ones.
A goal is a declared target on top of that data: "visits to /docs/*", "the contact-click event", optionally with a count. Goals convert the traffic report into a conversion report — sessions that did the thing versus sessions that didn't — and give every other technique its denominator. This is the single highest-leverage configuration step: one to three goals per property, matching that property's definition of success.
Acquisition: UTM discipline and attribution
The referrer header tells you which site a visitor came from; it cannot tell you which effort. Two links to the same page from the same platform — one in a launch post, one in a profile bio — are indistinguishable. UTM parameters fix this by making the link itself carry provenance:
https://streetfortress.com/?utm_source=github&utm_medium=readme&utm_campaign=symbology-launch
The reports are only as good as the tagging discipline. The rule: every outbound link you control gets tagged — READMEs, social profiles, newsletters, launch posts — with a small, consistent vocabulary (pick source = platform, medium = link type, campaign = initiative, and stop). Untagged links degrade silently into "Direct / unknown", and the degradation is invisible until you need the report. Never tag internal links — a UTM on an internal link overwrites the visitor's real acquisition data mid-session.
Attribution is the follow-on question: when a visitor touched several campaigns before converting, which gets credit? First-touch models credit discovery; last-touch models credit the closer. At SFI traffic volumes the honest answer is that model choice doesn't matter yet — what matters is that goals and UTM tagging exist, so the attribution report has conversions and sources to join. Channels (search, social, referral, direct) are the zero-configuration version of this report, useful as the weekly glance before drilling into UTM detail.
Action: journeys and funnels
Journeys (path analysis) show the actual sequences of pages visitors traverse — exploratory, no configuration, answering "how do people really move through this site?" Expect the humbling result: most sessions are one page deep, and the paths people take are not the paths you designed. Journeys are where you discover which pages act as real entry points (compare against the seo long-tail landing pages) and where sessions end.
Funnels are the confirmatory counterpart: you declare an ordered sequence of steps — landing page → pricing → contact — and get the drop-off rate at each transition. A funnel is only meaningful where a genuine multi-step flow exists and each step is a page or event you record; forcing a funnel onto a browse-shaped content site produces numbers without meaning. Use journeys to discover the flows that actually occur, then encode the important one as a funnel to watch its conversion over time.
Return: retention and cohorts
Raw traffic can grow while the underlying property decays — new visitors replacing departed ones. Retention separates the two by grouping visitors into cohorts by first-seen week and reporting what fraction of each cohort returns in subsequent weeks. The signal is the shape: a curve that flattens above zero means some content or utility pulls people back; a curve that hits zero means the site is pure drive-by acquisition. Neither is wrong — a reference site can thrive on drive-by search traffic — but the retention curve tells you which game a property is playing, and whether a change moved it. Retention is a weekly-scale metric for returning-use products; checking it daily on a content site is noise-reading.
Segments: saved questions
A segment is a saved filter — organic-search visitors, mobile sessions, visitors who hit /docs — applied across every other report. Segments are how aggregate numbers become answers: "did the launch traffic behave differently from organic?" is the organic segment versus the campaign segment on the same goal report. Like events, keep few and purposeful; each segment should correspond to a question you actually ask during review.
Diagnostics: replays and heatmaps
Session replays reconstruct individual visits from DOM recordings; heatmaps aggregate clicks and scroll depth onto a page screenshot. They answer the question the quantitative reports raise but can't resolve: the funnel says visitors abandon on the pricing page — a replay or heatmap shows what they did there.
These are diagnostic instruments, not standing telemetry. Recording costs tracker weight on every page load and carries the highest privacy exposure of anything here (a replay is a recording of a person, even with input masking on). The pattern: enable on the specific pages under investigation, gather two weeks of sessions, conclude, disable. A permanently-on replay archive nobody watches is pure liability.
The review process
Instrumentation without review is storage. The process that makes the techniques pay is a recurring pass — monthly per property is sustainable — over three questions, one per loop stage:
- Where did people come from? Channels and UTM versus last period. Did the SEO and campaign work move acquisition?
- Did they do what we wanted? Goal conversions, by segment. Is organic traffic converting differently than campaign traffic?
- Where did they leak? Journeys, entry/exit pages, funnel drop-offs. Which single page most underperforms its traffic?
Each review ends in one concrete action — a content fix, a page redesign, a new campaign, a noindex decision — captured as a gitea issue, and at most one diagnostic investigation (a heatmap or replay window on the page question 3 surfaced). One action per site per month, actually shipped, outperforms a quarterly deep-dive that produces a document.
Things That Go Wrong
Vanity reading. Traffic charts reviewed without goals defined. Every number goes up and to the right eventually; without a success definition there is no way to be wrong, which means there is no information.
Untagged campaigns. The launch got posted in six places, none tagged; acquisition reads "Direct 70%" and the report can never be reconstructed. UTM discipline is cheap prevention for an unrecoverable loss.
UTM on internal links. Tagging a homepage banner link with utm_campaign restamps the session's acquisition, destroying the real source. UTM is for inbound edges only.
Small-sample conclusions. On a low-traffic property, "conversion doubled" may be three visits versus six. Before acting on a delta, ask whether the absolute counts could plausibly be noise; weekly numbers on small sites usually are, monthly sometimes, quarterly trends are where the signal lives.
Standing replays. Recording every session on every page indefinitely: tracker weight for all visitors, privacy exposure growing in the database, and nobody watching the archive. Replays are scoped investigations with an end date.
Adblock blindness. Tracker scripts are blocked by extensions and some browsers; the technical audience SFI properties attract blocks at well above the general-population rate. First-party hosting reduces list-based blocking but doesn't eliminate it. Treat absolute counts as a floor, trends and ratios as the real data — a ratio is unbiased if blocking is uniform across the compared groups.
Dashboard sprawl. Every report enabled, every metric charted, review paralysis. The loop questions bound what's worth looking at; a report that doesn't feed one of the three isn't part of the process.
References
- umami documentation — tracker setup, event API, and each report type
- Google — Collect campaign data with custom URLs — the origin and semantics of UTM parameters
- umami PR #4056 — the open multi-website aggregate dashboard; context for why cross-property overview currently requires boards or external tooling
- SFI artifact: the analytics review formalization accompanying the proactive SEO push across properties (2026-08); sister document to seo