A Practical Privacy-Friendly Analytics Checklist
Start with the smallest useful dataset
A privacy-friendly analytics setup starts with a simple question: which numbers do you actually need to run the site? For most small sites, that is pageviews, top pages, referrers, countries, device types, and a few conversion events. You rarely need a persistent profile for each visitor. If a metric is not going to change a decision, do not collect it.
- Track pageviews and page paths.
- Track referrer and campaign source.
- Track country and browser at an aggregate level.
- Track only the events that map to a signup, purchase, or other action.
- Skip names, email addresses, phone numbers, and any form field values.
Prefer cookieless and storage-free measurement
The easiest way to avoid cookie consent complexity is to use a tool that does not set cookies or use local storage. Some privacy-friendly analytics count visitors using an anonymous identifier that changes daily. That lets you count visits and unique visitors without following a person across days.
- Confirm the script sets no cookies.
- Confirm it uses no localStorage, sessionStorage, or IndexedDB.
- Prefer daily or session-scoped anonymous IDs over long-lived IDs.
- Avoid fingerprinting, cross-site tracking, and third-party advertising identifiers.
Check what the script loads
A lightweight script should not bring a chain of third-party requests with it. Before installing, open the browser developer tools and look at the network panel.
- Load one deferred or async script.
- Watch for requests to advertising or social media domains.
- Keep the script small enough that it does not affect page speed.
- Place it in the head or before the closing body tag according to the vendor's instructions.
Use events without attaching personal data
Click tracking can be useful, but the event names should describe the action, not the person. Use generic values such as signup_click, pricing_view, or download_start. Do not put email addresses, order IDs, or names into event properties unless you have a clear need and a legal basis.
- Use a data attribute on the button or link.
- Keep event names short and consistent.
- Review event values before launch.
- Avoid sending form input values by default.
Build funnels from paths and events only
Funnel analysis should work from page paths and events, not from user profiles. A signup funnel might be /pricing, /signup, signup_complete, and dashboard_view. That gives you a useful conversion view without storing identity.
- Define each funnel step as a page path or event name.
- Use aggregate counts rather than individual visitor journeys.
- Check that redirects and campaign parameters do not break funnel steps.
Track campaigns without PII
UTM parameters are a practical way to see which link or email drove traffic. The values should be broad enough to be useful but not personal. For example, utm_source=newsletter and utm_campaign=april_launch is fine. Using an email address as a campaign value is not.
- Keep UTM values generic.
- Use tracked links that credit later traffic and signups.
- Test redirects to make sure UTM tags survive.
- Document your campaign naming convention.
Set a sensible retention period
Keeping analytics data forever is rarely necessary. Older data can still show seasonal trends, but raw logs may not need to be stored for years. Decide how long you need detailed data and what can be aggregated or deleted.
- Keep aggregate totals as long as they are useful.
- Delete raw event logs when they are no longer needed.
- Review retention settings in your analytics tool.
- Export monthly or quarterly reports if you need a longer record.
Be transparent on the site
A short privacy notice helps visitors understand what you measure. If your analytics tool sets no cookies and stores no personal data, say so in plain language. If you are unsure whether a cookie banner is required, check your own legal position rather than relying on a blog post.
- State what the analytics script collects.
- State whether cookies or local storage are used.
- Link to the privacy notice in the footer.
- Keep the wording specific to your own setup.
Test the full setup before you trust the numbers
A privacy-friendly setup is only useful if the numbers are correct. After installation, spend a few minutes testing.
- Visit the site in a private browsing window.
- Check the browser storage panel for cookies and local storage.
- Check the network panel for unexpected requests.
- Confirm the dashboard records the visit.
- Click a tracked button and confirm the event appears.
- Visit a campaign URL and confirm the source is credited.
Add an agent-friendly layer
If you already use a coding agent such as Claude Code, Cursor, or Codex, analytics data can be more useful when the agent can read it directly. For example, measuremy.site is a hosted cookieless tracker with an MCP server, so an agent can pull the dashboard, create funnels, and manage tracked links without you pasting API calls. This is useful when you want the agent to answer questions like which campaign brought the most signups this week without leaving the project.
Run a final privacy review
Before calling the setup done, go through a short review.
- Does the script set no cookies and use no local storage?
- Does it store a persistent visitor ID?
- Does it collect full IP addresses by default?
- Does it share data with advertisers?
- Can you export and delete data?
- Is the data used only for your own site measurement?
Each unclear answer is a reason to check the vendor's documentation or choose a different approach. The goal is not to collect nothing; it is to collect enough to make decisions while respecting visitors.
Privacy-friendly analytics is not about removing all measurement. It is about reducing collection to what you need, choosing tools that do not rely on long-term identity, and checking the setup before launch. If you keep the checklist short and repeat it when you add a new site or campaign, the privacy risk stays low and the numbers stay useful.
See it on your own site
measuremy.site is cookieless analytics your coding agent can read. 30-day free trial, no card. Plans from $9/month.
Start free trial See the live demoAdd measuremy.site analytics to this project: connect the measuremy.site MCP server at https://a.measuremy.site/mcp for all my projects (claude mcp add --scope user; it signs in with OAuth, no key, and one sign-in covers every site), then tell me how to sign in. Details: measuremy.site/llms.txt
Free tools
- Analytics tag checker: Which analytics and pixels a site runs, plus duplicate and broken tags.
- Free UTM link builder: Add utm_source, medium and campaign to any link.
- Website traffic checker: A site's popularity rank and estimated monthly visits.
More from the blog
- How to calculate your website conversion rate, and what to compare it to
- Is my A/B test result significant? A plain-English guide with a worked example
- What is bounce rate, how is it calculated, and is yours a problem?
- How to add a visitor counter to your website or GitHub README
- How much traffic does a website get? How to estimate any site's visits
- How to track QR code scans: count them, and see which poster worked
- How to see how many people clicked your link (without a paid shortener)
- How to check if your Google Analytics 4 tag is installed (and only counting once)
- Why GA4 shows your campaign traffic as Unassigned (and how to fix the links)
- Does your redirect keep your UTM tags? How to check before a campaign goes out
- How I built a self-hosted analytics MCP server on Cloudflare Workers and D1
- UTM tracking explained: what the parameters mean and how to use them
- Conversion funnel analysis for small sites: a practical guide
- Sudden drop in website traffic? A checklist for finding the cause
- What is an MCP server? A plain-English guide for people who run websites
- Adding an MCP server to Claude Code
- How long should you keep analytics data?
- How to Build a Small MCP Server That Actually Helps
- How to Find the Biggest Drop Off in a Funnel
- What Is the Urchin Tracking Module?
- What Microsoft MCP servers actually do
- UTM parameters for email newsletters
- Track Button Clicks Without Google Tag Manager
- How to track the results of a social media post without cookies
- How to track traffic from a GitHub README
- How to measure a product launch without guessing