<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Tidemark blog</title><link>https://hellotidemark.com/blog/</link><description>Guides, release notes and ideas from the people building Tidemark.</description><language>en</language><item><title>What’s new in Tidemark Analytics 0.38</title><link>https://hellotidemark.com/blog/tidemark-0-38-whats-new/</link><guid>https://hellotidemark.com/blog/tidemark-0-38-whats-new/</guid><pubDate>Wed, 04 Nov 2026 00:00:00 GMT</pubDate><category>Release</category><description>An official WordPress plugin, plus an Install on menu in the dashboard with ready-to-paste code for WordPress, Shopify, Next.js, Nuxt, Astro, SvelteKit and Laravel.</description><content:encoded><![CDATA[<p>Tidemark Analytics 0.38 is out, together with an official WordPress plugin. Both are about getting Tidemark Analytics onto a site, whatever the site runs on.</p>
<h2 id="an-official-wordpress-plugin">An official WordPress plugin</h2>
<p><a href="https://wordpress.org/plugins/tidemark-analytics/">Tidemark Analytics</a> is now in the WordPress.org plugin directory. Install it, activate it, open <strong>Settings → Tidemark Analytics</strong>, enter the address of your Tidemark Analytics and save.</p>
<ul>
<li><strong>No cookies, and nothing stored in WordPress.</strong> The plugin keeps its settings and nothing else. Your statistics stay in Tidemark Analytics.</li>
<li><strong>It leaves you out.</strong> Signed-in administrators are not counted by default, you can choose other roles, and page previews are never counted.</li>
<li><strong>A separate script file.</strong> The script is a deferred file of its own, and the tag asks the common caching and speed plugins not to combine or delay it.</li>
<li><strong>The extras are one tick away.</strong> Outbound link clicks, file downloads, form submissions, and scroll depth and time on page.</li>
<li><strong>Custom events from your theme.</strong> Call <code>plausible('Signup')</code> from your theme or another plugin to record your own events.</li>
</ul>
<p>The address is your own Tidemark Analytics install. The plugin is free and open source. The code is on <a href="https://github.com/tidemark-apps/wordpress-plugin">GitHub</a>.</p>
<h2 id="an-install-on-menu">An Install on menu</h2>
<p>The snippet you copy from the dashboard, on the install page and in a site’s <strong>Settings → Tracking</strong>, now starts with an <strong>Install on</strong> menu: HTML, WordPress, Shopify, Next.js, Nuxt, Astro, SvelteKit and Laravel. Pick yours and it shows the file to open and the code to paste, already filled in with your site’s domain and script file. For WordPress it shows the address to enter in the plugin, with a link to the plugin page.</p>
<p>Tidemark Analytics remembers your choice, so the next site you add opens on the same one.</p>
<h2 id="smaller-changes">Smaller changes</h2>
<ul>
<li>A site whose visits are all from today no longer looks empty in “Last 7/28/30/91 days”. Those periods end yesterday, so the overview now says so and offers a button to show today.</li>
<li>The word “Tidemark” no longer shows up above the top bar now and then after signing in.</li>
</ul>
<h2 id="upgrading">Upgrading</h2>
<p>Self-hosted installs update from the dashboard as usual. There are no database changes in this release.</p>]]></content:encoded></item><item><title>What’s new in Tidemark Analytics 0.36</title><link>https://hellotidemark.com/blog/tidemark-0-36-whats-new/</link><guid>https://hellotidemark.com/blog/tidemark-0-36-whats-new/</guid><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate><category>Release</category><description>Two-factor sign-in with passkeys and e-mail codes, campaign links and tracking pixels, deleting data by filter, and a tidier settings and phone layout.</description><content:encoded><![CDATA[<p>Tidemark Analytics 0.36 is out. It tightens how you sign in, adds a way to measure campaigns without handing clicks to a third party, and gives you a precise tool for removing data that should not be there.</p>
<h2 id="two-factor-sign-in-with-more-ways-in">Two-factor sign-in, with more ways in</h2>
<p>An authenticator app is still the default, and setting one up now shows a <strong>QR code</strong> to scan. You can also turn on <strong>e-mail codes</strong> (a one-time code sent to your account address, which needs outgoing e-mail on your install) and <strong>passkeys</strong>: your fingerprint, face, screen lock or a security key, as many as you like per account. At sign-in the page offers whichever methods you have set up.</p>
<p>Turning on the first method gives you <strong>ten recovery codes</strong>, shown once, for the day you lose your phone or key. You can make a new set from Settings → Security, which replaces the old one. Removing a method asks for your password.</p>
<h2 id="campaign-links-and-tracking-pixels">Campaign links and tracking pixels</h2>
<p>Site settings has a new <strong>Campaigns</strong> tab. The link builder adds UTM values to any page of your site and shows the result as you type, so visits from a campaign show up under Sources and Campaigns. Two things build on it:</p>
<ul>
<li>A <strong>short link</strong> (<code>/l/abc</code>) counts a click and forwards to the page with its UTM values.</li>
<li>A <strong>tracking pixel</strong> (<code>/p/abc.gif</code>) counts a view when a newsletter loads it.</li>
</ul>
<p>Both keep only a daily total per link: no cookies, no addresses, no visit. Opens are approximate, because mail apps may preload or block images. A short link can only point at a page on your own site.</p>
<h2 id="delete-by-filter">Delete by filter</h2>
<p>If something sensitive did get recorded, or a test run polluted the data, “reset all statistics” is too blunt. Site settings → Data now has <strong>Delete by filter</strong>. Choose conditions (a page, a country, a source or campaign, a browser, an event or an event property) and an optional date range, preview how many visits and events match, then confirm by typing the site’s domain.</p>
<p>A matching visit is deleted whole, with everything recorded during it, so your reports stay consistent. Imported history is not touched. Owners and admins can use it, and each deletion is logged with who ran it.</p>
<h2 id="a-tidier-layout">A tidier layout</h2>
<p>A site’s settings sections now sit under <strong>Settings</strong> in the sidebar instead of a second list on the page. On phones the top bar is lighter: the menu, the site or page you are on, Find and your account. The organization switcher and the live visitor count moved to the top of the menu, and more controls are easy to tap.</p>
<h2 id="upgrading">Upgrading</h2>
<p>Self-hosted installs update from the dashboard as usual, and the new tables are created automatically. E-mail codes need outgoing e-mail; everything else works on any install.</p>]]></content:encoded></item><item><title>What’s new in Tidemark Analytics 0.35</title><link>https://hellotidemark.com/blog/tidemark-0-35-whats-new/</link><guid>https://hellotidemark.com/blog/tidemark-0-35-whats-new/</guid><pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate><category>Release</category><description>Organizations with admins and teams, e-mail invitations, moving sites between organizations, photos and logos, and scroll depth.</description><content:encoded><![CDATA[<p>Tidemark Analytics 0.35 is out. It is about working with other people: the people you share a site with, the clients you run sites for, and the teams that look at the numbers.</p>
<h2 id="organizations">Organizations</h2>
<p>Everyone now has a <strong>Personal</strong> organization, created with their sign-in. It holds the sites you add by default and it is just yours: no admins, no invitations, nothing to set up.</p>
<p>When you work with others, <strong>create an organization</strong> from the switcher in the top bar. It has one owner and any number of <strong>admins</strong>, who can see and change every site in it, add and delete sites and manage its teams, while billing, deletion and who else is an admin stay with the owner. The owner can <strong>hand the organization over</strong> to one of its admins; they accept, and the previous owner stays on as an admin. Give an organization a logo, and your photo shows on Personal, so a long list stays easy to tell apart.</p>
<h2 id="teams-and-invitations">Teams and invitations</h2>
<p>A <strong>team</strong> is a named group in an organization. Share a site with it as <strong>Viewers</strong> or <strong>Admins</strong> and everyone in the team has access, now and as people join or leave. A person with access in several ways simply has the strongest role.</p>
<p>Adding someone who has no account yet now sends them an <strong>e-mail invitation</strong>: a single-use link, valid for 72 hours, where they choose a name and password. Nothing is created for them until they accept. On a self-hosted install this is off until you set <code>TIDEMARK_INVITES=true</code> (it needs working mail settings).</p>
<p>The site’s <strong>People with access</strong> section is one list now: the owner, organization admins, teams (open one to see who is in it), people added directly and pending invitations, each marked with how they got access, and one field to add a person by e-mail or a team by name.</p>
<h2 id="moving-a-site">Moving a site</h2>
<p>A site can move to another organization from its Sharing and access settings. You see who gains and loses access before you confirm. You need to be an owner or admin of both organizations, and unless both have the same owner only the owner of the organization it is in can move it out. Statistics, goals, shared links and the people you added to the site directly come along; access that came from the old organization does not.</p>
<h2 id="scroll-depth-and-time-on-page">Scroll depth and time on page</h2>
<p>An opt-in script variant (Site settings → Tracking) sends one extra event per page view with how far the visitor scrolled and how long they were active, as numbers you can use in goals, filters and funnels. It does not change your bounce rate, and it captures no element, text or position.</p>
<h2 id="upgrading">Upgrading</h2>
<p>Updates are automatic. Everyone gets a Personal organization and the sites they own move into it; nothing else changes until you create an organization. The full list is in the <a href="https://github.com/tidemark-apps/analytics/blob/main/CHANGELOG.md">changelog</a>.</p>]]></content:encoded></item><item><title>What’s new in Tidemark Analytics 0.31</title><link>https://hellotidemark.com/blog/tidemark-0-31-whats-new/</link><guid>https://hellotidemark.com/blog/tidemark-0-31-whats-new/</guid><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate><category>Release</category><description>Alerts and webhooks, email reports, notes on the graph, bot and spam filtering, new privacy controls, and an MCP server for AI assistants.</description><content:encoded><![CDATA[<p>Tidemark Analytics 0.31 is out. It adds ways to hear about your numbers without opening the dashboard, a handful of privacy controls, better filtering of bot traffic, and a read-only interface for AI assistants. Here is what changed and who gets what.</p>
<h2 id="hear-about-it-without-checking">Hear about it without checking</h2>
<p><strong>Email reports.</strong> Each person can ask for a weekly or monthly summary of any site they belong to, under <strong>Account settings → Email reports</strong>. It covers visitors, pageviews, bounce rate and visit duration against the period before, the top pages, sources and countries, goals with revenue, and the notes on your graph. It arrives at 08:00 in the site’s timezone, has no tracking pixel and no tracked links, and every message has an unsubscribe link.</p>
<p><strong>Alerts and webhooks.</strong> Under <strong>Site settings → Alerts</strong>, create rules for a traffic spike or drop against the usual for that weekday and time, a goal reaching a number of conversions, new conversions of a goal, or a traffic source that sent nothing in the last 28 days. Send each rule by email, to Slack or Discord, or to your own service as signed JSON. Rules have quiet hours and cooldowns, failed deliveries are retried, and every message carries totals only, never anything about a visitor.</p>
<p><strong>Notes on the graph.</strong> Add a short note to any date, such as “launched v2”, and it shows on the graph and in the table view. A note can be private, shared with everyone on the site, or shown on the public dashboard.</p>
<h2 id="collect-less-and-count-what-is-real">Collect less, and count what is real</h2>
<p><strong>Privacy controls.</strong> Each site can now respect Global Privacy Control and Do Not Track, keep only the country or the region instead of the city, keep only a referrer’s domain, and decide which URL query parameters may be stored at all.</p>
<p><strong>Small groups.</strong> Set a minimum, and public dashboards and shared links leave out rows with fewer visitors than that. A filter cannot narrow a public view down below it.</p>
<p><strong>Masking personal data.</strong> Email addresses, tokens, UUIDs and long numbers that a site sends by accident in a page address, referrer or event are replaced with a placeholder before they are stored. Only a count of how often it happened is kept. Self-hosted installs have it on by default.</p>
<p><strong>Bot and spam filtering.</strong> On top of known crawlers, Tidemark Analytics now leaves out headless browsers, traffic from the address ranges of large cloud and hosting providers, referrer spam, and floods from a single visitor. It uses only what each request already carries, and keeps a daily count of what was filtered, by reason, which the site settings show. It is on by default and each site can turn it off, which helps when you are testing from a script or a server. A few people browse through VPNs hosted in those data centers, so the switch is there if you need it.</p>
<h2 id="for-scripts-and-assistants">For scripts and assistants</h2>
<p><strong>MCP server.</strong> An AI assistant can read a site’s stats through a read-only <a href="https://modelcontextprotocol.io">MCP</a> endpoint. Create an API key under <strong>Account settings → Security</strong>, choose <strong>Read-only</strong>, and paste the configuration it shows into your assistant. It can read totals, trends, top pages and sources, goals and funnels, and nothing else.</p>
<p><strong>Read-only API keys.</strong> A read-only key can only read statistics through the Stats API and MCP. Full-access keys still have the same access as their owner.</p>
<p><strong>Stats API and OpenAPI.</strong> The Stats API gains goals and funnels, and the whole API is described in an OpenAPI document at <code>/api/v1/openapi.json</code>, so you can generate a client in the language you use.</p>
<h2 id="which-plan-gets-what">Which plan gets what</h2>
<p>Self-hosted installs get all of it, including email reports, notes, bot filtering, the privacy controls, alerts and webhooks, the API and MCP.</p>
<p>Updating a self-hosted install needs nothing special: take the new release from the in-app updater or pull the new Docker image, and the migrations run on their own. The full list is in the <a href="https://github.com/tidemark-apps/analytics/blob/main/CHANGELOG.md">changelog</a>.</p>]]></content:encoded></item><item><title>How to add cookie-free analytics to Astro, Hugo, Next.js and other static sites</title><link>https://hellotidemark.com/blog/add-analytics-to-a-static-site/</link><guid>https://hellotidemark.com/blog/add-analytics-to-a-static-site/</guid><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate><category>Guide</category><description>One script tag is all it takes. Where to put it in Astro, Hugo, Next.js, Eleventy and plain HTML, how single-page apps are handled and how to test it.</description><content:encoded><![CDATA[<p>Static sites and frameworks make analytics easy, because everything shares a layout. You add one script tag to the shared <code>&#x3C;head></code> and every page is covered. This guide shows where that goes in the common setups. The examples use <a href="https://hellotidemark.com/">Tidemark Analytics</a>, whose script follows Plausible’s conventions, so they work for other Plausible-style tools too.</p>
<h2 id="the-snippet">The snippet</h2>
<pre><code class="language-html">&#x3C;script defer data-domain="yourdomain.com" src="https://analytics.example.com/js/script.js">&#x3C;/script>
</code></pre>
<p>Replace the domain with your site’s, and the <code>src</code> with your own Tidemark Analytics address if you self-host. The script is about 2 KB, sets no cookies, and sends a pageview on load and on every history change.</p>
<h2 id="plain-html">Plain HTML</h2>
<p>Paste the snippet inside <code>&#x3C;head></code> on each page, or in the shared include if you use one.</p>
<h2 id="astro">Astro</h2>
<p>Put it in your base layout, for example <code>src/layouts/Base.astro</code>:</p>
<pre><code class="language-astro">&#x3C;head>
  &#x3C;script is:inline defer data-domain="yourdomain.com" src="https://analytics.example.com/js/script.js">&#x3C;/script>
&#x3C;/head>
</code></pre>
<p><code>is:inline</code> stops Astro from bundling or rewriting the tag. Astro’s view transitions change the page without a full reload, and the script’s history tracking picks that up.</p>
<h2 id="hugo">Hugo</h2>
<p>Add it to your theme’s <code>layouts/partials/head.html</code> (or a partial the head already includes):</p>
<pre><code class="language-html">&#x3C;script defer data-domain="{{ .Site.Params.analyticsDomain }}" src="https://analytics.example.com/js/script.js">&#x3C;/script>
</code></pre>
<p>Setting the domain once in <code>hugo.toml</code> keeps staging builds from reporting under the wrong site.</p>
<h2 id="eleventy-and-jekyll">Eleventy and Jekyll</h2>
<p>Add the tag to the base layout’s <code>&#x3C;head></code>. In Jekyll you can wrap it in <code>{% if jekyll.environment == "production" %}</code> so local builds are not counted.</p>
<h2 id="nextjs">Next.js</h2>
<p>In the App Router, add it to <code>app/layout.tsx</code> with the built-in script component:</p>
<pre><code class="language-tsx">import Script from 'next/script';

export default function RootLayout({ children }) {
  return (
    &#x3C;html lang="en">
      &#x3C;body>
        {children}
        &#x3C;Script defer data-domain="yourdomain.com" src="https://analytics.example.com/js/script.js" strategy="afterInteractive" />
      &#x3C;/body>
    &#x3C;/html>
  );
}
</code></pre>
<p>Client-side navigation is a history change, so every route gets a pageview without extra code.</p>
<h2 id="hash-based-routers">Hash-based routers</h2>
<p>If your app navigates with <code>#/route</code> URLs, use the hash variant: <code>script.hash.js</code>.</p>
<h2 id="keep-development-visits-out">Keep development visits out</h2>
<p>The script ignores <code>localhost</code> by default, so running your site locally does not add visits. Add the <code>local</code> variant only if you want to test there.</p>
<h2 id="test-it">Test it</h2>
<ol>
<li>Deploy, then open the live site in a private window.</li>
<li>Watch <strong>current visitors</strong> in your dashboard.</li>
<li>Navigate between pages and confirm each one appears.</li>
</ol>
<p>If you run a content security policy, allow the analytics address in <code>script-src</code> and <code>connect-src</code>.</p>
<h2 id="next-steps">Next steps</h2>
<p>You can also count outbound links, downloads and form submissions by adding variants to the file name. <a href="https://hellotidemark.com/blog/track-outbound-links-and-downloads/">This guide has the details</a>.</p>]]></content:encoded></item><item><title>A Google Analytics alternative for WordPress: add privacy-friendly stats in 10 minutes</title><link>https://hellotidemark.com/blog/google-analytics-alternative-for-wordpress/</link><guid>https://hellotidemark.com/blog/google-analytics-alternative-for-wordpress/</guid><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate><category>Guide</category><description>Replace Google Analytics on a WordPress site with cookie-free analytics. Add one script without editing theme files, keep your caching plugin happy and check it works.</description><content:encoded><![CDATA[<p>WordPress sites often end up with Google Analytics through a plugin that adds a cookie banner, a settings page and a lot of tracking nobody asked for. You can swap that for a small, cookie-free script in about ten minutes, with no theme editing and no extra analytics plugin.</p>
<p>This guide uses <a href="https://hellotidemark.com/">Tidemark Analytics</a>, but the steps are the same for any tool that gives you a single script tag.</p>
<h2 id="before-you-start">Before you start</h2>
<p>You need a <a href="https://hellotidemark.com/analytics/self-host/">self-hosted</a> Tidemark Analytics install and access to your WordPress admin. In Tidemark Analytics, add your domain under <strong>Add site</strong> and copy the snippet. It looks like this:</p>
<pre><code class="language-html">&#x3C;script defer data-domain="yourdomain.com" src="https://analytics.example.com/js/script.js">&#x3C;/script>
</code></pre>
<p>If you self-host, the <code>src</code> points at your own Tidemark Analytics address instead.</p>
<h2 id="step-1-add-the-script-without-touching-theme-files">Step 1: Add the script without touching theme files</h2>
<p>Editing <code>header.php</code> is fragile, because a theme update can wipe your change. Use a header-and-footer snippet plugin instead. Plugins such as WPCode or Insert Headers and Footers are common choices.</p>
<ol>
<li>Install and activate the plugin.</li>
<li>Open its settings and find the <strong>Header</strong> (or “Scripts in Header”) box.</li>
<li>Paste the Tidemark Analytics snippet and save.</li>
</ol>
<p>Block themes and some page builders have their own “custom code” area that does the same job. If yours does, use it.</p>
<h2 id="step-2-remove-google-analytics">Step 2: Remove Google Analytics</h2>
<p>Delete the old tag in whatever added it: the Google Analytics plugin, a “Site Kit” setup, or a snippet in your theme. Running both for a couple of weeks is useful for comparing numbers, but remove Google Analytics when you are done so you can drop the cookie banner if it only existed for analytics. Keep it if other tools on your site still set cookies.</p>
<h2 id="step-3-check-it-works">Step 3: Check it works</h2>
<ol>
<li>Open your site in a private window.</li>
<li>Open the Tidemark Analytics dashboard and look at <strong>current visitors</strong>. You should see yourself within a few seconds.</li>
<li>Click around, and confirm the pages show up under <strong>Top pages</strong>.</li>
</ol>
<p>If nothing appears, view the page source and search for <code>data-domain</code>. If it is missing, a caching plugin may still be serving the old page.</p>
<h2 id="caching-and-optimisation-plugins">Caching and optimisation plugins</h2>
<ul>
<li><strong>Clear the cache</strong> after adding the script, so visitors get the new page.</li>
<li><strong>Do not defer or combine the script in a way that rewrites it.</strong> Most optimisation plugins can exclude a script by its address, so add your Tidemark Analytics address to the exclude list if you see missing visits.</li>
<li><strong>CDN and ad blockers:</strong> some blockers hide analytics scripts. You can reduce that by serving the script from your own domain through a proxy and setting <code>data-api</code> to match. The Tidemark Analytics docs explain the setup.</li>
</ul>
<h2 id="track-forms-downloads-and-outbound-links">Track forms, downloads and outbound links</h2>
<p>Tidemark Analytics can count outbound link clicks, file downloads and form submissions by changing the script file name, for example <code>script.outbound-links.file-downloads.js</code>. <a href="https://hellotidemark.com/blog/track-outbound-links-and-downloads/">This guide covers the options</a>.</p>
<h2 id="what-about-the-old-data">What about the old data?</h2>
<p>Google Analytics history cannot be imported into Tidemark Analytics. Export the reports you want to keep, and treat the switch date as the start of the new data. <a href="https://hellotidemark.com/blog/switch-from-google-analytics/">Here is a longer migration checklist</a>.</p>]]></content:encoded></item><item><title>How to import your Plausible history into Tidemark Analytics</title><link>https://hellotidemark.com/blog/import-plausible-history-into-tidemark/</link><guid>https://hellotidemark.com/blog/import-plausible-history-into-tidemark/</guid><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate><category>Guide</category><description>Move from Plausible without losing your graph. Export your data, import it into Tidemark Analytics in your browser, and understand what comes across and what does not.</description><content:encoded><![CDATA[<p>Switching analytics tools usually means starting with an empty graph. If you are moving from Plausible, you do not have to. Tidemark Analytics can import Plausible’s own CSV export, so your history carries over and your charts keep their shape. This guide walks through it and explains what to expect. The official steps live in the <a href="https://account.hellotidemark.com/kb/tidemark-analytics/using-tidemark/moving-your-data/import-from-plausible">Tidemark Analytics docs</a>.</p>
<h2 id="before-you-start">Before you start</h2>
<ul>
<li>Add the site to Tidemark Analytics first, using the same domain you track in Plausible.</li>
<li>Set the site’s reporting timezone to match Plausible’s (<strong>Site settings → Data</strong>). Dates in the export follow the timezone the site had in Plausible, so a mismatch shifts days.</li>
<li>You need to be an owner or admin of the site.</li>
<li>Make sure there is room for the data. A very large export (3.5 years from a busy site, a 215 MB zip) added roughly 330 MB to a SQLite database, while small sites add very little.</li>
</ul>
<h2 id="step-1-export-from-plausible">Step 1: Export from Plausible</h2>
<p>In Plausible, open the site and go to <strong>Settings → Imports &#x26; exports</strong>. Under <strong>Export data</strong>, click <strong>Prepare download</strong>. For a site with a lot of history this can take up to about 20 minutes, and you can leave the page and come back. When it is ready, download the <code>.zip</code>. Plausible keeps it for seven days.</p>
<h2 id="step-2-import-into-tidemark-analytics">Step 2: Import into Tidemark Analytics</h2>
<ol>
<li>In Tidemark Analytics, open the site’s <strong>Site settings → Data</strong> and find <strong>Import from Plausible</strong>.</li>
<li>Click <strong>Choose the .zip file</strong> and pick the download.</li>
<li>Keep the tab open until it says the import has finished. A 200 MB export takes a few minutes.</li>
</ol>
<p>You do not have to worry about upload limits. Your browser reads the zip and sends only the numbers Tidemark Analytics needs, in small batches, so the file is never uploaded as a whole.</p>
<h2 id="what-comes-across">What comes across</h2>
<ul>
<li>Daily totals: visitors, visits, pageviews, bounce rate and visit duration.</li>
<li>Sources: channels, sources, referrers and UTM campaign fields.</li>
<li>Pages: top pages, entry pages and exit pages.</li>
<li>Locations: countries and regions.</li>
<li>Devices: device types, browsers and operating systems.</li>
<li>Custom events: counted for goals that use the same event name, so create a goal with the event’s name to see them.</li>
</ul>
<h2 id="what-does-not">What does not</h2>
<ul>
<li>Cities, because Plausible exports them as numeric ids.</li>
<li>Custom properties, scroll depth and time on page.</li>
<li>Goal definitions, funnels and shared links, which you set up again in Tidemark Analytics.</li>
<li>Browser and operating-system versions. Tidemark Analytics reports each as a whole.</li>
</ul>
<h2 id="how-imported-data-behaves">How imported data behaves</h2>
<p>Imported numbers are daily totals, so they behave a little differently from data Tidemark Analytics collected itself:</p>
<ul>
<li>They appear in the top stats, the graph and the reports for periods made of whole days.</li>
<li>They do not appear in hourly views such as <strong>Today</strong>.</li>
<li>They are left out while a filter is active, because the export does not say how the numbers relate to each other. A note on the dashboard tells you when this happens.</li>
<li>Visitors are added up day by day, the same way Plausible’s own numbers work across longer periods.</li>
</ul>
<h2 id="overlap-with-tidemark-analyticss-own-data">Overlap with Tidemark Analytics’s own data</h2>
<p>Tidemark Analytics only imports days before the first day it recorded a visit for the site, so nothing is counted twice. If you ran Tidemark Analytics and Plausible side by side for a while, the days when both ran come from Tidemark Analytics.</p>
<h2 id="switching-the-script">Switching the script</h2>
<p>The Tidemark Analytics script is Plausible-compatible, so the switch is usually a one-line change: replace the Plausible script address with your Tidemark Analytics one and keep the same <code>data-domain</code>. Run both for a week if you want to compare. If you are comparing the tools more broadly, see <a href="https://hellotidemark.com/blog/tidemark-vs-plausible/">Tidemark Analytics vs Plausible</a>.</p>]]></content:encoded></item><item><title>Run your own web analytics with Docker Compose: a copy-paste setup</title><link>https://hellotidemark.com/blog/run-tidemark-with-docker-compose/</link><guid>https://hellotidemark.com/blog/run-tidemark-with-docker-compose/</guid><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate><category>Self-hosting</category><description>Self-host Tidemark Analytics in one container with Docker Compose: the compose file, HTTPS behind a reverse proxy, MariaDB or Postgres, updates and backups.</description><content:encoded><![CDATA[<p>If you already run a home server or a small VPS, Docker is probably the easiest way to add analytics. <a href="https://hellotidemark.com/analytics/self-host/">Tidemark Analytics</a> ships as a single image for amd64 and arm64 (including Raspberry Pi) that contains the app and its scheduler, so there is nothing else to wire up. This guide gets you from nothing to a working dashboard behind HTTPS. The full reference is in the <a href="https://account.hellotidemark.com/kb/tidemark-analytics/self-hosted/install-and-operate/install-with-docker">Docker docs</a>.</p>
<h2 id="what-you-need">What you need</h2>
<ul>
<li>A machine with Docker and Docker Compose.</li>
<li>A domain or subdomain for the dashboard, for example <code>stats.example.com</code>.</li>
<li>A reverse proxy that handles HTTPS. Caddy, Traefik, nginx, Nginx Proxy Manager or a Cloudflare Tunnel all work.</li>
</ul>
<h2 id="the-compose-file">The compose file</h2>
<p>Save this as <code>docker-compose.yml</code>:</p>
<pre><code class="language-yaml">services:
  tidemark:
    image: ghcr.io/tidemark-apps/analytics:latest
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - tidemark-data:/data
    environment:
      APP_URL: https://stats.example.com

volumes:
  tidemark-data:
</code></pre>
<p><code>APP_URL</code> is the address visitors and you will use. It appears in the tracking snippet and in links, so set it to your real domain.</p>
<h2 id="start-it">Start it</h2>
<pre><code class="language-bash">docker compose up -d
</code></pre>
<p>Then open <code>http://localhost:8080/install</code> (or the server’s address) to create your admin account. Add your site, copy the tracking snippet into your site’s <code>&#x3C;head></code>, and the dashboard fills in as pageviews arrive.</p>
<h2 id="https-with-a-reverse-proxy">HTTPS with a reverse proxy</h2>
<p>The container speaks plain HTTP on port 8080, so put it behind the proxy you already use and forward your domain to that port. A minimal Caddy example:</p>
<pre><code>stats.example.com {
  reverse_proxy tidemark:8080
}
</code></pre>
<p>Tidemark Analytics trusts the proxy’s forwarded headers, so it sees the visitor’s real address for counting and builds HTTPS links.</p>
<p>Visitor countries come from a CDN’s headers, such as Cloudflare’s. Without one, the dashboard shows visits but not where they came from.</p>
<h2 id="where-your-data-lives">Where your data lives</h2>
<p>Everything that changes lives in the <code>/data</code> volume: the settings file, the SQLite database, logs and uploads. The container can be deleted and recreated at any time without losing anything. Back up that volume and you have backed up Tidemark Analytics.</p>
<h2 id="updating">Updating</h2>
<p>The in-app updater is off in the image, because the container is meant to stay read-only. To update, pull a newer image:</p>
<pre><code class="language-bash">docker compose pull &#x26;&#x26; docker compose up -d
</code></pre>
<p>Database changes run on the first request after the update. Pin a version tag instead of <code>latest</code> if you prefer to choose when to update.</p>
<h2 id="using-mariadb-or-postgresql">Using MariaDB or PostgreSQL</h2>
<p>SQLite is the default and is fine for most sites. For a larger site, add a database container, then choose MySQL/MariaDB or PostgreSQL in the installer and enter the container’s host, database, user and password. The docs include a ready-made MariaDB compose file.</p>
<h2 id="running-as-a-different-user">Running as a different user</h2>
<p>Set <code>PUID</code> and <code>PGID</code> on the container to run as another user and group. Unraid, for example, uses <code>99</code> and <code>100</code>. There is also a Community Apps template for Unraid users.</p>
<h2 id="why-docker-and-why-not">Why Docker (and why not)</h2>
<p>Docker is a good fit when you already run containers and want updates to be a single command. If you only have shared hosting, you do not need Docker at all. <a href="https://hellotidemark.com/blog/self-hosted-analytics-on-shared-hosting/">Tidemark Analytics also installs as a PHP zip</a>, and the software is the same either way.</p>]]></content:encoded></item><item><title>Tidemark Analytics vs Plausible: an honest comparison</title><link>https://hellotidemark.com/blog/tidemark-vs-plausible/</link><guid>https://hellotidemark.com/blog/tidemark-vs-plausible/</guid><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate><category>Comparison</category><description>How Tidemark Analytics and Plausible differ on hosting, self-hosting, features and price, and who each suits. Written by its makers, with the gaps stated plainly.</description><content:encoded><![CDATA[<p>Plausible is the tool that made simple, privacy-friendly analytics popular, and it is a big reason Tidemark Analytics exists: our dashboard, tracking script and Events API follow its conventions on purpose. So the honest answer to “Tidemark Analytics or Plausible?” is that they are close cousins that make different trade-offs. This page lays them out. We make Tidemark Analytics, so check anything that matters to you against <a href="https://plausible.io">Plausible’s own site</a>, since plans and features change.</p>
<h2 id="the-short-version">The short version</h2>
<ul>
<li><strong>Pick Plausible</strong> if you want a mature, hosted product from a dedicated team with a long track record.</li>
<li><strong>Pick Tidemark Analytics</strong> if you want to run analytics yourself on ordinary PHP hosting or a small Docker container.</li>
</ul>
<h2 id="what-they-have-in-common">What they have in common</h2>
<ul>
<li>No cookies and no personal data stored, so there is usually no consent banner to build for analytics alone (see <a href="https://hellotidemark.com/blog/do-you-need-a-cookie-banner-for-analytics/">do you need a cookie banner</a>, which is not legal advice).</li>
<li>One page with the numbers that matter: visitors, pageviews, bounce rate, visit duration, sources, pages, countries, devices and goals.</li>
<li>A small tracking script and an Events API for custom events and goals.</li>
<li>Open source.</li>
</ul>
<h2 id="where-they-differ">Where they differ</h2>













































<table><thead><tr><th></th><th>Tidemark Analytics</th><th>Plausible</th></tr></thead><tbody><tr><td>Self-hosting needs</td><td>A PHP host (shared hosting works) or one Docker container; SQLite, MySQL, MariaDB or PostgreSQL</td><td>A server with Docker and a ClickHouse database alongside Postgres (Community Edition)</td></tr><tr><td>License</td><td>MIT</td><td>AGPL</td></tr><tr><td>Hosted plan</td><td>None at the moment</td><td>Paid plans from a monthly fee, with a trial</td></tr><tr><td>Funnels, revenue goals, saved segments and journeys</td><td>Yes, included</td><td>Yes</td></tr><tr><td>Plausible-compatible script</td><td>Yes, by design</td><td>Native</td></tr><tr><td>Import from Plausible</td><td>Yes, from its CSV export</td><td>Not applicable</td></tr><tr><td>Public dashboards with your branding</td><td>Yes, included</td><td>Shared links are available</td></tr></tbody></table>
<p>Check Plausible’s current pricing and feature list before deciding, because the table is a snapshot.</p>
<h2 id="self-hosting-is-the-biggest-difference">Self-hosting is the biggest difference</h2>
<p>Plausible’s self-hosted edition is designed for a server you control, and it relies on ClickHouse, which is excellent for large volumes but heavier to run. Tidemark Analytics makes the opposite trade-off. It stores events in a regular database, runs on the PHP hosting many sites already pay for, and ships as a Docker image if you prefer containers. The cost of that simplicity is scale: Tidemark Analytics is built for the traffic of typical sites and small businesses, not for tens of millions of events a month on one box.</p>
<h2 id="features-tidemark-analytics-does-not-have-yet">Features Tidemark Analytics does not have yet</h2>
<p>We would rather say it plainly. Tidemark Analytics has goal funnels, revenue reporting, segments and journeys, but Plausible goes further in places we do not match yet. From what its public demo shows, that includes browser and operating-system version breakdowns. Neither tool does session replay. If those extras matter to how you work, Plausible (or a product analytics tool such as PostHog) is the better fit right now, and it is worth checking <a href="https://plausible.io">Plausible’s own feature list</a> for the current picture.</p>
<h2 id="moving-between-them">Moving between them</h2>
<p>If you already use Plausible, you do not have to start from zero. Tidemark Analytics can import Plausible’s CSV export, and because the script is compatible you can usually switch by changing the script address and keeping your goals. <a href="https://hellotidemark.com/blog/import-plausible-history-into-tidemark/">Here is how the import works</a>.</p>
<h2 id="which-one-should-you-choose">Which one should you choose?</h2>
<p>Choose by who you want to look after the server. If you want someone else to run it and need the extra reporting, a hosted Plausible plan is a safe choice. If you would rather own your data on hosting you already have, try Tidemark Analytics. You can run both side by side for a couple of weeks and compare, which is the best test either way.</p>]]></content:encoded></item><item><title>10 best Google Analytics alternatives in 2026</title><link>https://hellotidemark.com/blog/best-google-analytics-alternatives/</link><guid>https://hellotidemark.com/blog/best-google-analytics-alternatives/</guid><pubDate>Fri, 23 Oct 2026 00:00:00 GMT</pubDate><category>Comparison</category><description>Ten Google Analytics alternatives compared by what they are good at: privacy, simplicity, self-hosting, depth and price. Pick the one that fits your site.</description><content:encoded><![CDATA[<p>Google Analytics 4 is powerful, free and everywhere. It is also a lot to learn, it sets cookies that usually mean a consent banner, and your visitors’ data ends up in Google’s hands. If you only want to know how many people visit, where they come from and what they read, there are lighter tools that answer those questions on one page.</p>
<p>This guide lists ten alternatives, what each is good at, and who should pick it. They are in no particular order, and we put ourselves last. Features and prices change often, so treat this as a map and check each tool’s own site before you decide. We last reviewed it in October 2026.</p>
<h2 id="what-to-look-for">What to look for</h2>
<p>Before the list, five questions that separate these tools more than any feature table does:</p>
<ul>
<li><strong>How does it count visitors?</strong> Some tools use cookies and long-lived identifiers. Others use a short-lived hash that changes every day, which means no cookie and no profile of a person across days.</li>
<li><strong>Where does the data live?</strong> On the vendor’s servers, on your own server, or both?</li>
<li><strong>How deep do you need to go?</strong> A single dashboard of traffic, or funnels, session replay, experiments and feature flags?</li>
<li><strong>Can you leave?</strong> Can you export your data, and is the software open source?</li>
<li><strong>What does it cost at your traffic?</strong> Many tools price by pageviews or events, so a spike matters.</li>
</ul>
<h2 id="quick-picks">Quick picks</h2>

































<table><thead><tr><th>If you want</th><th>Look at</th></tr></thead><tbody><tr><td>A simple, hosted, privacy-first dashboard</td><td>Plausible, Fathom, Simple Analytics, Pirsch</td></tr><tr><td>Open source you can run yourself</td><td>Plausible Community Edition, Umami, Matomo, GoatCounter, Tidemark Analytics</td></tr><tr><td>The closest thing to a full Google Analytics replacement</td><td>Matomo</td></tr><tr><td>Free and nothing to install if you already use Cloudflare</td><td>Cloudflare Web Analytics</td></tr><tr><td>Product analytics with funnels and session replay</td><td>PostHog</td></tr><tr><td>Self-hosting on ordinary PHP hosting or Docker</td><td>Matomo, Tidemark Analytics</td></tr></tbody></table>
<h2 id="1-plausible">1. Plausible</h2>
<p><a href="https://plausible.io">Plausible</a> is the tool most people mean when they say “privacy-friendly analytics”. It has a single-page dashboard, a tiny script and no cookies. It is available as a paid hosted service priced by monthly pageviews, and as an open-source Community Edition (AGPL) you can host yourself. Self-hosting means running a ClickHouse and a Postgres database, usually with Docker, so it suits people comfortable with containers.</p>
<p><strong>Good for:</strong> a mature, simple, hosted dashboard. <strong>Watch for:</strong> the self-hosted edition is not identical to the hosted one, and pricing grows with traffic.</p>
<h2 id="2-fathom">2. Fathom</h2>
<p><a href="https://usefathom.com">Fathom</a> is a hosted, paid, privacy-first service with a clean dashboard and a focus on simplicity. As far as we know it is hosted only, so there is no self-hosting option.</p>
<p><strong>Good for:</strong> people who want a polished hosted tool and no servers to think about. <strong>Watch for:</strong> no self-hosting or open-source edition.</p>
<h2 id="3-simple-analytics">3. Simple Analytics</h2>
<p><a href="https://www.simpleanalytics.com">Simple Analytics</a> is another hosted, paid, privacy-focused service with an easy dashboard and readable reports. Like Fathom, it is a hosted product rather than something you run yourself.</p>
<p><strong>Good for:</strong> teams who want plain reports without setup. <strong>Watch for:</strong> hosted only, so your data lives with the vendor.</p>
<h2 id="4-umami">4. Umami</h2>
<p><a href="https://umami.is">Umami</a> is open source (MIT) and can be self-hosted or used as a hosted service, which includes a free tier for small sites. It is cookieless, popular with developers, and has events and more detailed reports than the simplest tools.</p>
<p><strong>Good for:</strong> developers who want open source with a hosted option. <strong>Watch for:</strong> self-hosting needs Node.js and a database, so it is a step up from a shared host.</p>
<h2 id="5-matomo">5. Matomo</h2>
<p><a href="https://matomo.org">Matomo</a> is the most complete open-source answer to Google Analytics. It can be self-hosted on a typical PHP and MySQL host or used as a paid hosted service, and it covers funnels, goals, ecommerce, and heatmaps and session recordings through its own features and plugins. It can be configured to run without cookies, but it ships with more options on by default than the minimalist tools, so how privacy-friendly it is depends on how you set it up.</p>
<p><strong>Good for:</strong> teams that need depth and want to own their data. <strong>Watch for:</strong> more to configure, and a bigger interface to learn.</p>
<h2 id="6-goatcounter">6. GoatCounter</h2>
<p><a href="https://www.goatcounter.com">GoatCounter</a> is a small, open-source, cookieless analytics tool. It is free to use as a hosted service for non-commercial sites and can be self-hosted as a single program. It is deliberately minimal.</p>
<p><strong>Good for:</strong> personal sites, blogs and small projects. <strong>Watch for:</strong> a basic feature set, and the free hosted plan is for non-commercial use.</p>
<h2 id="7-pirsch">7. Pirsch</h2>
<p><a href="https://pirsch.io">Pirsch</a> is a cookie-free, privacy-focused analytics service, hosted and paid. It sits in the same space as Plausible and Fathom, with a simple dashboard and an API.</p>
<p><strong>Good for:</strong> a hosted alternative if the better-known options do not fit. <strong>Watch for:</strong> check the current pricing and hosting details on their site.</p>
<h2 id="8-cloudflare-web-analytics">8. Cloudflare Web Analytics</h2>
<p>If your site already runs through Cloudflare, <a href="https://www.cloudflare.com/web-analytics/">Cloudflare Web Analytics</a> is free, cookieless and takes almost no setup, because it can measure traffic at the edge without a script. It is proprietary and cannot be self-hosted, and it is far more basic than the tools above: you get the headline numbers, not custom events or goals.</p>
<p><strong>Good for:</strong> a free baseline if you are on Cloudflare. <strong>Watch for:</strong> limited depth, and it only exists inside Cloudflare.</p>
<h2 id="9-posthog">9. PostHog</h2>
<p><a href="https://posthog.com">PostHog</a> is a product analytics platform, not just web analytics. It offers funnels, retention, session replay, feature flags and experiments, and it is open source with both cloud and self-hosted options. That depth comes with weight: it collects more by default, and self-hosting it is a bigger job.</p>
<p><strong>Good for:</strong> product teams who need to understand what users do inside an app. <strong>Watch for:</strong> overkill if you only want traffic numbers.</p>
<h2 id="10-tidemark-analytics">10. Tidemark Analytics</h2>
<p><a href="https://hellotidemark.com/analytics/">Tidemark Analytics</a> is ours. It counts visitors without cookies or stored IP addresses, using a hash that changes every day, and shows everything on one page: visitors, pageviews, bounce rate, visit duration, sources, pages, locations, devices, goals and custom events. You run it yourself, as a <a href="https://hellotidemark.com/analytics/self-host/">self-hosted install</a> on ordinary PHP shared hosting or in Docker, under the MIT license. The tracking script and events API follow Plausible’s conventions, and it can import a <a href="https://account.hellotidemark.com/kb/tidemark-analytics/using-tidemark/moving-your-data/import-from-plausible">Plausible export</a>.</p>
<p><strong>Good for:</strong> a calm one-page dashboard you can host anywhere, including cheap shared hosting. <strong>Watch for:</strong> it is young, and it does not have session replay, retention or imports from tools other than Plausible. If you need those, Matomo or PostHog are the better fit, and we say so on our <a href="https://hellotidemark.com/analytics/compare/">compare page</a>.</p>
<h2 id="how-to-choose">How to choose</h2>
<p>A short way through the list:</p>
<ol>
<li><strong>Want zero maintenance?</strong> Pick a hosted tool: Plausible, Fathom, Simple Analytics, Pirsch or Umami Cloud.</li>
<li><strong>Want to own the server and the data?</strong> Pick open source: Matomo, Umami, GoatCounter, Plausible Community Edition or Tidemark Analytics.</li>
<li><strong>Only have shared hosting?</strong> Matomo and Tidemark Analytics are built for PHP hosts.</li>
<li><strong>Need replay, retention or experiments?</strong> Matomo or PostHog.</li>
<li><strong>Just need a free baseline?</strong> Cloudflare Web Analytics if you use Cloudflare, otherwise GoatCounter or a free tier.</li>
</ol>
<p>Whichever you choose, run it next to Google Analytics for a few weeks before you switch off the old tag, so you can compare the numbers and recreate your goals. Our guide to <a href="https://hellotidemark.com/blog/switch-from-google-analytics/">switching from Google Analytics</a> walks through it.</p>]]></content:encoded></item><item><title>Do you need a cookie banner for website analytics?</title><link>https://hellotidemark.com/blog/do-you-need-a-cookie-banner-for-analytics/</link><guid>https://hellotidemark.com/blog/do-you-need-a-cookie-banner-for-analytics/</guid><pubDate>Fri, 23 Oct 2026 00:00:00 GMT</pubDate><category>Privacy</category><description>When analytics needs consent and when it may not: what cookies, identifiers and regulators' guidance mean for your site. A plain-language overview, not legal advice.</description><content:encoded><![CDATA[<p>Almost every site with Google Analytics ends up with a cookie banner, and many site owners assume analytics always needs one. The real answer is “it depends”, and the dependencies are worth understanding because they decide whether you can have a clean, banner-free site.</p>
<p>This is a general overview to help you ask better questions. <strong>It is not legal advice</strong>, the rules differ by country and change over time, and a banner is often driven by other things on your site besides analytics. If the stakes matter, ask a qualified adviser.</p>
<h2 id="why-analytics-usually-triggers-a-banner">Why analytics usually triggers a banner</h2>
<p>Two sets of rules matter in Europe and the UK:</p>
<ul>
<li><strong>The ePrivacy rules</strong> (the “cookie law”) require consent before storing or reading information on a visitor’s device, such as a cookie, unless it is strictly necessary to provide the service they asked for.</li>
<li><strong>Data protection law</strong> (the GDPR and the UK GDPR) governs personal data: identifiers like cookie IDs and IP addresses count, and processing them needs a legal basis.</li>
</ul>
<p>A tool that sets a long-lived cookie, builds a profile of a person across visits, or shares the data with the vendor for its own purposes is hard to justify without consent. That is the case for many default analytics setups, which is why the banner appeared.</p>
<h2 id="can-analytics-ever-be-exempt">Can analytics ever be exempt?</h2>
<p>Some regulators have said yes, under conditions. France’s data protection authority, the CNIL, publishes <a href="https://www.cnil.fr/en/sheet-ndeg16-use-analytics-your-websites-and-applications">guidance on analytics</a> saying that audience measurement can be exempt from consent if, among other conditions:</p>
<ul>
<li>visitors are informed and can object,</li>
<li>the data is used only to produce anonymous statistics for the site itself, and is not combined with other processing,</li>
<li>the tracker is limited to a single site or app,</li>
<li>identifiers have a limited lifetime and the data is not kept longer than needed, and</li>
<li>the vendor does not reuse the data for its own purposes.</li>
</ul>
<p>The older EU working-party guidance reached a similar position for strictly first-party, aggregated statistics. Other countries have their own views, some stricter, and the EU’s rules are under review, so a tool that is fine in one country is not automatically fine in another.</p>
<h2 id="what-makes-a-tool-banner-friendly">What makes a tool “banner-friendly”</h2>
<p>Regardless of the exact rules, these design choices make exemption easier to argue and the privacy risk lower:</p>
<ul>
<li><strong>No cookies and no local storage</strong> on the visitor’s device for analytics.</li>
<li><strong>No persistent identifier.</strong> A visitor id that is a hash which changes every day cannot be followed from one day to the next, so there is no profile to build.</li>
<li><strong>No raw IP addresses or user agents stored.</strong> They can be used briefly to compute the hash and then discarded.</li>
<li><strong>Data stays with you,</strong> not sent to a vendor that can use it for advertising or its own purposes.</li>
<li><strong>Aggregate reporting only.</strong> You see counts, not individual people.</li>
</ul>
<p><a href="https://hellotidemark.com/analytics/privacy-by-design/">Tidemark Analytics</a> is built this way: it sets no cookies, uses no local storage for visitors, stores no IP addresses, and uses a daily-rotating salted hash for the visitor id. We still do not tell you that you do not need a banner, because that depends on your jurisdiction and everything else your site does. We tell you what the tool does so you or your adviser can decide.</p>
<h2 id="the-banner-often-has-other-causes">The banner often has other causes</h2>
<p>Removing analytics from the consent banner rarely removes the banner itself. Check what else sets or reads data on a visitor’s device:</p>
<ul>
<li>advertising and remarketing tags,</li>
<li>embedded video, maps and social widgets,</li>
<li>chat widgets and A/B testing tools,</li>
<li>fonts or scripts loaded from third parties that receive the visitor’s IP address.</li>
</ul>
<p>If you keep any of those, you probably still need a banner for them, even if analytics no longer asks for consent.</p>
<h2 id="a-practical-way-to-decide">A practical way to decide</h2>
<ol>
<li><strong>List everything that runs on your pages</strong> that stores or reads something on a visitor’s device, or sends data to a third party.</li>
<li><strong>Check how your analytics tool counts visitors:</strong> cookies? local storage? raw IPs? a persistent id?</li>
<li><strong>Read your regulator’s guidance</strong> for the countries where your visitors are, or ask an adviser.</li>
<li><strong>Be transparent either way.</strong> Say what you measure in your privacy notice, even if you do not need consent.</li>
<li><strong>Revisit it</strong> when you add or remove a tool, or when the rules change.</li>
</ol>
<h2 id="what-we-promise-and-what-we-do-not">What we promise and what we do not</h2>
<p>We make no promise that using any tool, including ours, makes you “compliant”. We do promise a short, checkable description of what Tidemark Analytics does and does not collect: see <a href="https://hellotidemark.com/analytics/privacy-by-design/">how privacy works</a>. If you are moving off Google Analytics, our <a href="https://hellotidemark.com/blog/switch-from-google-analytics/">switching guide</a> includes a step for updating your banner and privacy policy.</p>]]></content:encoded></item><item><title>Best self-hosted web analytics tools in 2026</title><link>https://hellotidemark.com/blog/best-self-hosted-web-analytics/</link><guid>https://hellotidemark.com/blog/best-self-hosted-web-analytics/</guid><pubDate>Fri, 23 Oct 2026 00:00:00 GMT</pubDate><category>Self-hosting</category><description>Six self-hosted analytics tools compared by what they need to run: PHP hosting, Docker, a database, or a single binary. Find one that fits your server.</description><content:encoded><![CDATA[<p>Running your own analytics keeps visitor data on a server you control, avoids sending your traffic to a third party, and often costs less than a hosted plan. The catch is that each tool asks for something different from your server, and that is what should drive your choice. A tool that needs a container stack is a poor match for a $4 shared host, and a tool that runs anywhere may skip features you want.</p>
<p>This guide compares six self-hosted options by what they need to run, how they upgrade, and who they suit. We build one of them, so we put ourselves in the list and try to be straight about the trade-offs. Details change between releases, so check each project’s documentation before you commit.</p>
<h2 id="what-to-compare">What to compare</h2>
<ul>
<li><strong>Runtime requirements.</strong> PHP hosting, Docker, Node.js, or a single compiled program.</li>
<li><strong>Database.</strong> SQLite (nothing to run), MySQL or MariaDB (common on shared hosts), PostgreSQL, or heavier analytical databases.</li>
<li><strong>Upgrades.</strong> One click, a command, or pulling a new container image.</li>
<li><strong>Footprint.</strong> How much memory and disk it needs as traffic grows.</li>
<li><strong>Privacy defaults.</strong> Whether it uses cookies and what it stores about visitors out of the box.</li>
</ul>
<h2 id="at-a-glance">At a glance</h2>















































<table><thead><tr><th>Tool</th><th>Runs on</th><th>Database</th><th>License</th></tr></thead><tbody><tr><td>Tidemark Analytics</td><td>PHP 8.3+ host or Docker</td><td>SQLite, MySQL, MariaDB, PostgreSQL</td><td>MIT</td></tr><tr><td>Matomo</td><td>PHP host</td><td>MySQL or MariaDB</td><td>GPL</td></tr><tr><td>Plausible Community Edition</td><td>Docker</td><td>PostgreSQL and ClickHouse</td><td>AGPL</td></tr><tr><td>Umami</td><td>Node.js or Docker</td><td>A SQL database such as PostgreSQL</td><td>MIT</td></tr><tr><td>GoatCounter</td><td>A single program</td><td>SQLite or PostgreSQL</td><td>Open source</td></tr><tr><td>PostHog</td><td>Docker and more</td><td>Several services</td><td>Open source</td></tr></tbody></table>
<h2 id="matomo">Matomo</h2>
<p><a href="https://matomo.org">Matomo</a> is the long-standing open-source alternative to Google Analytics. It runs on an ordinary PHP and MySQL or MariaDB host, which is why it has been the default choice for shared hosting for years. It is the deepest tool here: goals, funnels, ecommerce and optional heatmaps and session recordings. The cost of that depth is a large interface and plenty of settings, and its privacy posture depends on how you configure it.</p>
<p><strong>Choose it if</strong> you need broad features and want to stay on PHP hosting. <strong>Skip it if</strong> you want a single quiet dashboard.</p>
<h2 id="plausible-community-edition">Plausible Community Edition</h2>
<p><a href="https://plausible.io">Plausible</a> publishes an open-source (AGPL) Community Edition that you can self-host with Docker. It keeps the same one-page, cookieless approach as the hosted service. It stores events in ClickHouse alongside PostgreSQL, so you need a server with enough memory and comfort running containers, and the self-hosted edition can lag behind the hosted one on features.</p>
<p><strong>Choose it if</strong> you have a VPS and like Docker. <strong>Skip it if</strong> you only have shared hosting.</p>
<h2 id="umami">Umami</h2>
<p><a href="https://umami.is">Umami</a> is open source (MIT), cookieless and aimed at developers. You run it as a Node.js application against a SQL database, commonly in Docker. It offers events and a friendly dashboard, and there is a hosted version if you would rather not run it.</p>
<p><strong>Choose it if</strong> you are comfortable with Node and containers. <strong>Skip it if</strong> your host only supports PHP.</p>
<h2 id="goatcounter">GoatCounter</h2>
<p><a href="https://www.goatcounter.com">GoatCounter</a> is a small open-source analytics program that ships as a single binary and stores data in SQLite or PostgreSQL. It is minimal on purpose: simple counts, no cookies, very light on resources.</p>
<p><strong>Choose it if</strong> you want something tiny on a VPS you control. <strong>Skip it if</strong> you want goals, filtering depth or a PHP install.</p>
<h2 id="posthog">PostHog</h2>
<p><a href="https://posthog.com">PostHog</a> is a product analytics platform with funnels, retention, session replay, feature flags and experiments. It can be self-hosted, but it is a multi-service deployment and its scale is meant for products, not brochure sites. It also collects far more than a traffic counter does.</p>
<p><strong>Choose it if</strong> you are building an app and need product analytics. <strong>Skip it if</strong> you just want to know how many people read your blog.</p>
<h2 id="tidemark-analytics">Tidemark Analytics</h2>
<p><a href="https://hellotidemark.com/analytics/self-host/">Tidemark Analytics</a> is ours. It is built to run where other tools cannot: on ordinary PHP shared hosting with nothing but a file upload, or in a <a href="https://account.hellotidemark.com/kb/tidemark-analytics/self-hosted/install-and-operate/install-with-docker">single Docker container</a> for servers and home labs. You upload a zip, open <code>/install</code>, choose SQLite, MySQL, MariaDB or PostgreSQL, and create an account. It needs PHP 8.3 or newer, no Node, no Docker and no SSH on shared hosting. Updates are one click in the dashboard, or a newer image in Docker. It uses no cookies and stores no IP addresses, and it is MIT licensed.</p>
<p><strong>Choose it if</strong> you want a calm one-page dashboard on cheap hosting. <strong>Skip it if</strong> you need session replay, retention or experiments: it does not have them, and Matomo or PostHog do. It does have goal funnels and revenue reporting.</p>
<h2 id="how-to-choose">How to choose</h2>
<ol>
<li><strong>Only have shared hosting?</strong> Matomo or Tidemark Analytics. They are the two built for PHP.</li>
<li><strong>Have a VPS and like Docker?</strong> Plausible Community Edition, Umami or Tidemark Analytics all work.</li>
<li><strong>Want the smallest possible footprint?</strong> GoatCounter or Tidemark Analytics with SQLite.</li>
<li><strong>Need deep reporting?</strong> Matomo, or PostHog for product analytics.</li>
<li><strong>Not sure you want to run it yourself?</strong> Most of these have hosted versions you can try first. Moving between hosted and self-hosted is usually an export and an import, so the choice is not permanent.</li>
</ol>
<p>Whatever you pick, plan for <a href="https://account.hellotidemark.com/kb/tidemark-analytics/self-hosted/install-and-operate/backups">backups and updates</a> from day one. Self-hosting trades a monthly bill for a small, regular amount of attention, and the tool that needs the least of it is usually the one you will still be running in two years.</p>]]></content:encoded></item><item><title>How cookieless analytics works (and what it can't tell you)</title><link>https://hellotidemark.com/blog/how-cookieless-analytics-works/</link><guid>https://hellotidemark.com/blog/how-cookieless-analytics-works/</guid><pubDate>Fri, 23 Oct 2026 00:00:00 GMT</pubDate><category>Explainer</category><description>How a tool can count visitors without cookies: daily-rotating hashes, what is stored, why returning visitors are harder to spot, and the trade-offs you accept.</description><content:encoded><![CDATA[<p>“Cookieless analytics” sounds like a contradiction: how do you count people without remembering them? The answer is that you count them just well enough to be useful, and deliberately not well enough to follow anyone around the web. This article explains the mechanism, using Tidemark Analytics as the worked example, and is honest about what you give up.</p>
<h2 id="the-problem-cookies-solve">The problem cookies solve</h2>
<p>A cookie lets a site tell that two requests came from the same browser. Analytics tools used that to separate “100 visits from 80 people” from “100 visits from 1 person”, and to recognize returning visitors across days and weeks. The same ability is what makes cookies a privacy concern, because a stable identifier can be combined with other data to build a profile.</p>
<h2 id="counting-without-a-stored-identifier">Counting without a stored identifier</h2>
<p>A cookieless tool needs a way to say “this request and that request are probably the same visitor today” without leaving anything on the visitor’s device. The usual approach is a hash:</p>
<ol>
<li>A visitor loads a page. A small script sends the page address, the referrer and the screen width to the analytics server.</li>
<li>The server already sees the visitor’s IP address and browser string (user agent) as part of any web request.</li>
<li>It combines the site, the IP address and the user agent with a secret value called a salt, and runs them through a one-way hash function. The result is a short string, the visitor id.</li>
<li>It stores the visitor id with the page view, and <strong>throws away the IP address and user agent.</strong></li>
</ol>
<p>Two requests from the same browser on the same day produce the same hash, so they count as one visitor. Nothing was written to the visitor’s device, and the stored id cannot be turned back into an IP address.</p>
<h2 id="why-the-salt-changes-every-day">Why the salt changes every day</h2>
<p>If the salt were fixed, the same person would get the same id every day, and you would have rebuilt a persistent identifier with extra steps. So the salt is combined with the date and rotates daily. Tomorrow the same person produces a completely different id.</p>
<p>That is the privacy property: the tool can say how many people visited today, but it cannot say that today’s visitor 4F2A is the same person as last Tuesday’s visitor 9C71. In Tidemark Analytics, the visitor id is an HMAC of the site, IP address and user agent, keyed by a salt that includes the current date, and the raw IP address and user agent never reach the database.</p>
<h2 id="how-visits-are-stitched-together">How visits are stitched together</h2>
<p>Within a day, the tool also groups page views into visits. Tidemark Analytics ends a visit after 30 minutes of inactivity, which is a common convention. A visit that has only one page view or event counts as a bounce, and the visit duration is the time between its first and last event. Because the id is the same all day, “unique visitors” for a week is the number of distinct daily ids, which counts someone who came on three days as three visitors.</p>
<h2 id="what-you-give-up">What you give up</h2>
<p>Be clear about the trade-offs before you rely on the numbers:</p>
<ul>
<li><strong>No returning-visitor tracking across days.</strong> You cannot measure loyalty, cohorts or “users who came back next week”.</li>
<li><strong>Shared networks can merge people.</strong> Two visitors behind the same IP address with the same browser look identical for that day. For most sites this is a small effect.</li>
<li><strong>One person on two devices counts twice,</strong> and a visitor whose IP address changes mid-day (moving from Wi-Fi to mobile data) can count twice.</li>
<li><strong>Multi-day visitor counts add up daily visitors,</strong> so they run a bit higher than a count of distinct people.</li>
<li><strong>No user-level journeys.</strong> You see which pages are popular and where traffic comes from, not the path of an individual.</li>
</ul>
<p>For content sites, documentation, marketing pages and most small businesses, these limits cost very little, because the questions you ask are about volume and sources, not individuals. For products where you need to follow users through a funnel over weeks, you need a different kind of tool.</p>
<h2 id="what-gets-stored">What gets stored</h2>
<p>For each page view a cookieless tool like Tidemark Analytics keeps aggregate-friendly fields: the page, the referrer and its source category, the country (and region or city when your CDN provides them), the browser, the operating system, the device type and the day-rotating id. It does not store the IP address, the raw user agent, or anything it could use to recognise a person later. You can read the exact list on our <a href="https://hellotidemark.com/analytics/privacy-by-design/">privacy by design page</a>.</p>
<h2 id="does-cookieless-mean-consent-free">Does “cookieless” mean “consent-free”?</h2>
<p>Not automatically. Whether you need a consent banner depends on the rules in your country and on everything else your site does. We cover that in <a href="https://hellotidemark.com/blog/do-you-need-a-cookie-banner-for-analytics/">Do you need a cookie banner for analytics?</a>. What cookieless counting does is make the analytics part easy to describe and low risk.</p>
<h2 id="want-to-see-it">Want to see it?</h2>
<p>Read how the <a href="https://hellotidemark.com/blog/web-analytics-metrics-explained/">metrics are defined</a>.</p>]]></content:encoded></item><item><title>Self-hosted analytics on shared hosting: what you need and how to set it up</title><link>https://hellotidemark.com/blog/self-hosted-analytics-on-shared-hosting/</link><guid>https://hellotidemark.com/blog/self-hosted-analytics-on-shared-hosting/</guid><pubDate>Fri, 23 Oct 2026 00:00:00 GMT</pubDate><category>Self-hosting</category><description>Run your own web analytics on ordinary PHP shared hosting: the requirements, a step-by-step install, a cron job, updates and backups, with no server skills needed.</description><content:encoded><![CDATA[<p>Most guides to self-hosted analytics assume you have a server, a container runtime and a free evening. But plenty of sites live on cheap shared hosting, with a control panel, an FTP login and nothing else. The good news is that you can run your own analytics there too, as long as you pick a tool built for it.</p>
<p>This guide walks through a typical setup with <a href="https://hellotidemark.com/analytics/self-host/">Tidemark Analytics</a>, which is designed for PHP shared hosting, but the checklist applies to any PHP-based analytics tool.</p>
<h2 id="what-you-need">What you need</h2>
<ul>
<li><strong>PHP 8.3 or newer</strong> on the hosting account. Most hosts let you pick the PHP version in the control panel.</li>
<li><strong>A few common PHP extensions:</strong> mbstring, openssl, PDO with one database driver, fileinfo, ctype, tokenizer and XML. These are enabled by default almost everywhere.</li>
<li><strong>A place for the database.</strong> SQLite needs nothing at all (it is a file). Otherwise a MySQL, MariaDB or PostgreSQL database from your host works too.</li>
<li><strong>A domain or subdomain</strong> for the dashboard, for example <code>stats.yourdomain.com</code>.</li>
<li><strong>HTTPS,</strong> which most hosts provide for free with Let’s Encrypt.</li>
</ul>
<p>You do not need SSH, Node.js, Docker or Composer.</p>
<h2 id="step-1-create-a-subdomain">Step 1: Create a subdomain</h2>
<p>In your hosting control panel, add a subdomain such as <code>stats.yourdomain.com</code> and note its document root folder. If your host lets you, point the document root at the <code>public</code> folder of the app after you upload it. If it does not, the release includes a root <code>.htaccess</code> that forwards requests to <code>public/</code> and blocks the internal folders, so uploading to the web root as-is still works.</p>
<h2 id="step-2-upload-the-release">Step 2: Upload the release</h2>
<p>Download the latest <code>tidemark-x.y.z.zip</code> from the <a href="https://github.com/tidemark-apps/analytics/releases/latest">releases page</a> (dependencies are already bundled), upload it with the file manager or FTP, and unzip it in the subdomain’s folder.</p>
<h2 id="step-3-run-the-installer">Step 3: Run the installer</h2>
<p>Open <code>https://stats.yourdomain.com/install</code>. The installer checks your server, connects a database (choose SQLite if you want zero setup), runs the migrations and creates your admin account. When it finishes you are signed in.</p>
<h2 id="step-4-add-your-site-and-paste-the-snippet">Step 4: Add your site and paste the snippet</h2>
<p>Add the domain you want to measure and copy the snippet into the <code>&#x3C;head></code> of every page:</p>
<pre><code class="language-html">&#x3C;script defer data-domain="yourdomain.com"
  src="https://stats.yourdomain.com/js/script.js">&#x3C;/script>
</code></pre>
<p>The dashboard waits for the first page view and then opens by itself. If you use a CDN or proxy, real visitor addresses and countries are read from its headers.</p>
<h2 id="step-5-add-the-cron-job-optional">Step 5: Add the cron job (optional)</h2>
<p>Two features need a scheduled task: buffering events through a queue, and automatic deletion of old data. In your host’s cron settings add one entry that runs every minute:</p>
<pre><code>* * * * * php /home/you/stats/artisan schedule:run >> /dev/null 2>&#x26;1
</code></pre>
<p>If you do not use those features, you can skip it. The <a href="https://account.hellotidemark.com/kb/tidemark-analytics/self-hosted/install-and-operate/cron-job">cron guide</a> has the details.</p>
<h2 id="step-6-set-up-email-optional">Step 6: Set up email (optional)</h2>
<p>Password resets and invitations need working outgoing mail. Add your host’s SMTP settings as described in the <a href="https://account.hellotidemark.com/kb/tidemark-analytics/self-hosted/install-and-operate/email">email guide</a>. Without it the app still works, it just cannot send emails.</p>
<h2 id="updating">Updating</h2>
<p>Administrators can update from Account settings, which downloads the release, makes a backup of the current files, applies it and runs the database migrations the first time you open the dashboard afterwards. If your host blocks the updater from writing files, upload the new release over FTP instead. See the <a href="https://account.hellotidemark.com/kb/tidemark-analytics/self-hosted/install-and-operate/updating">updating guide</a>.</p>
<h2 id="backups">Backups</h2>
<p>With SQLite, your whole database is one file, so backing up is a copy. Back up the <code>.env</code> file as well, because it holds the app key. With MySQL, MariaDB or PostgreSQL, use your host’s backup tool or a database dump. The <a href="https://account.hellotidemark.com/kb/tidemark-analytics/self-hosted/install-and-operate/backups">backups guide</a> lists exactly what to keep.</p>
<h2 id="a-few-tips-for-shared-hosting">A few tips for shared hosting</h2>
<ul>
<li><strong>Pick SQLite for small sites.</strong> It is usually fast enough for small and medium sites and removes a moving part. Move to MySQL or MariaDB if traffic grows a lot.</li>
<li><strong>Keep PHP updated.</strong> Choose a supported PHP version in your control panel.</li>
<li><strong>Use a subdomain,</strong> not the main site’s folder, so analytics files never mix with your site.</li>
<li><strong>Check the file permissions</strong> if the installer says <code>storage</code> is not writable. The <code>storage</code> and <code>bootstrap/cache</code> folders must be writable by PHP.</li>
</ul>
<h2 id="if-you-would-rather-not-run-it">If you would rather not run it</h2>
<p>Self-hosting is one option, not the only one. The <a href="https://hellotidemark.com/blog/best-self-hosted-web-analytics/">self-hosted tools guide</a> compares the alternatives if you want to look at other options first.</p>]]></content:encoded></item><item><title>How to switch from Google Analytics to a privacy-friendly alternative</title><link>https://hellotidemark.com/blog/switch-from-google-analytics/</link><guid>https://hellotidemark.com/blog/switch-from-google-analytics/</guid><pubDate>Fri, 23 Oct 2026 00:00:00 GMT</pubDate><category>Guide</category><description>A step-by-step plan to move off Google Analytics: audit what you use, pick a tool, run both side by side, recreate goals and remove the old tag safely.</description><content:encoded><![CDATA[<p>Moving off Google Analytics is less about technology than about not losing things you rely on. The new tool takes a few minutes to install. The work is deciding what you actually use, keeping the history you care about, and removing the old tag and cookie banner in the right order. This is the plan we would follow.</p>
<h2 id="1-audit-what-you-really-use">1. Audit what you really use</h2>
<p>Open Google Analytics and write down the reports and numbers you looked at in the last three months. For most small sites that is a short list: visitors, top pages, where traffic comes from, countries and devices. Also note anything configured on top:</p>
<ul>
<li><strong>Conversions or key events</strong> you track (signups, purchases, downloads).</li>
<li><strong>Audiences or remarketing</strong> that feed ads. Privacy-friendly tools do not do this, so if you depend on it, plan for that separately.</li>
<li><strong>Integrations</strong> with Search Console, Google Ads or a dashboard tool.</li>
<li><strong>Who else looks at the reports,</strong> so they are not surprised.</li>
</ul>
<p>If your list is “traffic, sources, pages, a couple of goals”, almost any alternative will do. If it includes funnels and audiences, read our <a href="https://hellotidemark.com/blog/best-google-analytics-alternatives/">comparison of alternatives</a> first, because the lightest tools will not cover that.</p>
<h2 id="2-save-the-history-you-need">2. Save the history you need</h2>
<p>Most alternatives cannot import Google Analytics data, and Google keeps detailed event-level data for a limited time (up to 14 months, depending on your property’s retention setting). Before you switch, export what you will want later:</p>
<ul>
<li>The yearly and monthly totals you quote (visitors, pageviews, top pages and sources).</li>
<li>Any report you build reports from, saved as CSV or PDF.</li>
<li>If you use BigQuery, the raw export tables.</li>
</ul>
<p>Keep these somewhere you will find them. A year-over-year comparison later is far easier with a spreadsheet of last year’s numbers than with nothing.</p>
<h2 id="3-pick-the-tool">3. Pick the tool</h2>
<p>Decide between hosted and self-hosted, and how much depth you need. Hosted tools (Plausible, Fathom, Simple Analytics and others) need no server. Self-hosted tools (Matomo, Umami, Plausible Community Edition, Tidemark Analytics) keep the data on your own hosting. The <a href="https://hellotidemark.com/blog/best-google-analytics-alternatives/">alternatives guide</a> and the <a href="https://hellotidemark.com/blog/best-self-hosted-web-analytics/">self-hosting guide</a> will narrow it down.</p>
<h2 id="4-install-it-next-to-google-analytics">4. Install it next to Google Analytics</h2>
<p>Do not remove Google Analytics yet. Add the new tool’s script to the same pages. With Tidemark Analytics, for example, it is one line in your <code>&#x3C;head></code>:</p>
<pre><code class="language-html">&#x3C;script defer data-domain="yourdomain.com"
  src="https://analytics.example.com/js/script.js">&#x3C;/script>
</code></pre>
<p>Run both for at least two to four weeks, long enough to cover a full cycle of your traffic. The numbers will not match exactly, and that is normal: tools define visitors, sessions and bounce rate differently, filter bots differently, and are affected differently by ad blockers. Compare trends over time, not exact totals.</p>
<h2 id="5-recreate-your-goals-and-events">5. Recreate your goals and events</h2>
<p>List the conversions you tracked and recreate them. In most privacy-friendly tools a goal is either a page visit (for example <code>/thank-you</code>) or a custom event you send from your code. Tools that follow Plausible’s conventions, including Tidemark Analytics, share the same pattern:</p>
<pre><code class="language-js">window.plausible('Signup')
</code></pre>
<p>Add the matching goal in the new tool’s settings. Outbound link clicks, file downloads and form submissions can usually be turned on with a script option instead of code. See our guide to <a href="https://hellotidemark.com/blog/track-outbound-links-and-downloads/">tracking links and downloads without cookies</a>.</p>
<h2 id="6-bring-over-history-where-you-can">6. Bring over history where you can</h2>
<p>If you are moving between privacy-friendly tools, imports are often possible. Tidemark Analytics can <a href="https://account.hellotidemark.com/kb/tidemark-analytics/using-tidemark/moving-your-data/import-from-plausible">import a Plausible export</a>, for example. Google Analytics history cannot generally be imported, which is why step 2 matters.</p>
<h2 id="7-check-your-cookie-banner-and-privacy-policy">7. Check your cookie banner and privacy policy</h2>
<p>Once Google Analytics is gone, your site may no longer need the analytics part of its consent banner, but that depends on what else you run (ads, embedded video, chat widgets) and on the rules where you operate. Read <a href="https://hellotidemark.com/blog/do-you-need-a-cookie-banner-for-analytics/">our note on cookie banners</a>, then update your privacy policy to describe what you use now. Ask a qualified adviser if you are unsure.</p>
<h2 id="8-remove-the-google-analytics-tag">8. Remove the Google Analytics tag</h2>
<p>When the new numbers look right and your goals are firing:</p>
<ol>
<li>Remove the Google Analytics script or tag manager tag from your pages.</li>
<li>Remove it from any plugin or theme setting that also adds it.</li>
<li>Disconnect it from Search Console and Google Ads if you linked them.</li>
<li>Keep the Google Analytics property for a while without collecting, so you can still open the old reports.</li>
</ol>
<h2 id="9-tell-the-people-who-read-the-reports">9. Tell the people who read the reports</h2>
<p>Send teammates a short note: where the dashboard is, which numbers will look different, and that history before the switch lives in the exports you saved. Set a calendar reminder for a month out to review whether the new tool answers the questions you actually ask.</p>
<h2 id="a-quick-checklist">A quick checklist</h2>
<ul class="contains-task-list">
<li class="task-list-item"><input type="checkbox" disabled> Listed the reports and goals you use</li>
<li class="task-list-item"><input type="checkbox" disabled> Exported the history you will want later</li>
<li class="task-list-item"><input type="checkbox" disabled> Chosen hosted or self-hosted</li>
<li class="task-list-item"><input type="checkbox" disabled> Installed the new script alongside Google Analytics</li>
<li class="task-list-item"><input type="checkbox" disabled> Compared trends for two to four weeks</li>
<li class="task-list-item"><input type="checkbox" disabled> Recreated goals and events</li>
<li class="task-list-item"><input type="checkbox" disabled> Updated the cookie banner and privacy policy</li>
<li class="task-list-item"><input type="checkbox" disabled> Removed the Google Analytics tag</li>
</ul>
<p>Most people finish in a weekend and spend the following month mostly checking that nothing is missing.</p>]]></content:encoded></item><item><title>How to track outbound links, downloads and signups without cookies</title><link>https://hellotidemark.com/blog/track-outbound-links-and-downloads/</link><guid>https://hellotidemark.com/blog/track-outbound-links-and-downloads/</guid><pubDate>Fri, 23 Oct 2026 00:00:00 GMT</pubDate><category>Guide</category><description>Count clicks on outbound links, file downloads, form submissions and custom events like signups, with a cookieless script and no extra tag manager.</description><content:encoded><![CDATA[<p>Page views tell you what people read. The questions that matter more are usually about what they did: did they click through to a partner, download the PDF, submit the form, sign up? Those are events, and you can measure them without cookies and without a tag manager.</p>
<p>This guide shows the three ways to do it, using Tidemark Analytics’s script as the example. The same pattern works with Plausible and other tools that follow its conventions.</p>
<h2 id="option-1-turn-on-the-built-in-extras">Option 1: Turn on the built-in extras</h2>
<p>The simplest route is to ask the script to watch for common actions automatically. The tracking script comes in variants selected by its file name:</p>
<ul>
<li><code>script.outbound-links.js</code> counts clicks on links that leave your site.</li>
<li><code>script.file-downloads.js</code> counts clicks on links to files such as PDFs, archives and installers.</li>
<li><code>script.form-submissions.js</code> counts submitted forms.</li>
</ul>
<p>You can combine them in one file name:</p>
<pre><code class="language-html">&#x3C;script defer data-domain="yourdomain.com"
  src="https://analytics.example.com/js/script.outbound-links.file-downloads.form-submissions.js">&#x3C;/script>
</code></pre>
<p>In Tidemark Analytics you do not have to edit the file name by hand: in a site’s settings, under the tracking extras, switch on outbound link clicks, file downloads and form submissions, and the snippet it shows you updates. Each one also creates a matching goal so the events show up in your dashboard.</p>
<p>Outbound clicks appear as an event named <strong>Outbound Link: Click</strong>, with the destination address stored with it, so you can see which links people actually follow. Downloads appear as <strong>File Download</strong> (with the file’s address) and form submissions as <strong>Form: Submission</strong> (with the page the form was on).</p>
<h2 id="option-2-send-a-custom-event-from-your-code">Option 2: Send a custom event from your code</h2>
<p>For anything specific to your product, send an event yourself with one line of JavaScript:</p>
<pre><code class="language-js">window.plausible('Signup')
</code></pre>
<p>Call it where the action happens: after a successful signup, when someone adds an item to a cart, when a calculator is used. You can attach properties so one event can be broken down later:</p>
<pre><code class="language-js">window.plausible('Download', { props: { file: 'whitepaper.pdf' } })
</code></pre>
<p>Properties let you ask questions like “which file gets downloaded most?” without creating a separate event for each.</p>
<h2 id="option-3-use-a-page-as-a-goal">Option 3: Use a page as a goal</h2>
<p>If the action ends on its own page, you do not need code at all. Create a goal for that page, such as <code>/thank-you</code> or <code>/order-complete</code>, and every visit to it counts as a conversion. Page goals support wildcards, so <code>/blog/*</code> covers every post.</p>
<h2 id="create-the-goal">Create the goal</h2>
<p>Events show up in the dashboard’s goals section once a goal with the same name exists. In Tidemark Analytics, open the site’s settings, choose Goals, and add either a <strong>custom event</strong> (type the exact event name, such as <code>Signup</code>) or a <strong>page goal</strong> (type the path).</p>
<h2 id="read-the-results">Read the results</h2>
<p>Open the Goals report to see unique conversions, total conversions and the <strong>conversion rate</strong>. Click a goal to switch the whole dashboard into conversion mode: every report then shows which sources, pages, countries and devices produced the conversions, so you can see not just that people signed up but where they came from.</p>
<h2 id="do-these-need-cookies">Do these need cookies?</h2>
<p>No. The events use the same cookieless, daily-rotating visitor id as page views, so a “unique conversion” means one visitor completing the action in the period. Nothing is stored on the visitor’s device. If you care about what is collected, read our notes on <a href="https://hellotidemark.com/blog/how-cookieless-analytics-works/">how cookieless analytics works</a>.</p>
<h2 id="tips">Tips</h2>
<ul>
<li><strong>Name events consistently.</strong> <code>Signup</code> and <code>signup</code> are different events.</li>
<li><strong>Keep the list short.</strong> Track the handful of actions you will actually look at.</li>
<li><strong>Test it.</strong> Open your site, perform the action, and watch the realtime view or the goal count to confirm it fires once.</li>
<li><strong>Single-page apps</strong> are covered automatically, because the script records a page view on every route change.</li>
</ul>
<p>The <a href="https://account.hellotidemark.com/kb/tidemark-analytics/using-tidemark/tracking/custom-events-and-properties">tracking docs</a> go into more detail on custom events, and <a href="https://account.hellotidemark.com/kb/tidemark-analytics/using-tidemark/tracking/script-variants">the script variants guide</a> lists every option.</p>]]></content:encoded></item><item><title>Web analytics metrics explained: visitors, visits, pageviews, bounce rate and duration</title><link>https://hellotidemark.com/blog/web-analytics-metrics-explained/</link><guid>https://hellotidemark.com/blog/web-analytics-metrics-explained/</guid><pubDate>Fri, 23 Oct 2026 00:00:00 GMT</pubDate><category>Explainer</category><description>What each core web analytics metric actually measures, how it is calculated, and which ones to trust when you read your dashboard.</description><content:encoded><![CDATA[<p>Every analytics tool shows a handful of headline numbers, and they are easy to misread because the words are used loosely. “Visitors” and “visits” are not the same thing. A “bounce” does not mean the person disliked your page. This guide defines each metric in plain language, shows how it is usually calculated (with Tidemark Analytics’s definitions as the worked example), and says what each is good for.</p>
<p>Different tools define these slightly differently, so never compare an exact number between two tools. Compare each tool with itself over time.</p>
<h2 id="unique-visitors">Unique visitors</h2>
<p><strong>What it is:</strong> the number of distinct people who came to your site in the period you are looking at.</p>
<p><strong>How it is counted:</strong> tools use an identifier to tell visitors apart. Cookie-based tools use a cookie. Cookieless tools like Tidemark Analytics use a hash of the visitor’s IP address and browser details that changes every day, so a visitor is “one browser, one day”. Over a longer period the daily counts are added up, which means someone who visited on three different days counts three times in a 28-day view.</p>
<p><strong>Good for:</strong> the size of your audience and its trend.
<strong>Watch for:</strong> two people sharing a network and browser can look like one, and one person on two devices counts twice.</p>
<h2 id="total-visits-sessions">Total visits (sessions)</h2>
<p><strong>What it is:</strong> the number of separate trips to your site. One visitor can make several visits.</p>
<p><strong>How it is counted:</strong> page views are grouped into a visit. A common rule, used by Tidemark Analytics, is that a visit ends after 30 minutes of inactivity, so a return after lunch starts a new visit.</p>
<p><strong>Good for:</strong> how often people come, compared with how many people there are. If visits are much higher than visitors, people are coming back.</p>
<h2 id="total-pageviews">Total pageviews</h2>
<p><strong>What it is:</strong> how many times pages were loaded.</p>
<p><strong>How it is counted:</strong> every page load counts once, including repeat views of the same page. Single-page apps count a view when the route changes, which Tidemark Analytics’s script does automatically.</p>
<p><strong>Good for:</strong> overall activity and which content is popular.
<strong>Watch for:</strong> refreshes inflate it, and it says nothing about attention.</p>
<h2 id="views-per-visit">Views per visit</h2>
<p><strong>What it is:</strong> pageviews divided by visits: the average number of pages someone looks at in a visit.</p>
<p><strong>Good for:</strong> whether people explore or leave after one page. A guide site wants it higher than a landing page does.</p>
<h2 id="bounce-rate">Bounce rate</h2>
<p><strong>What it is:</strong> the share of visits that ended after a single page view or event.</p>
<p><strong>How it is counted:</strong> visits with one page view and nothing else, divided by all visits. In Tidemark Analytics, a visit with a single event is a bounce.</p>
<p><strong>What it does not mean:</strong> a bounce is not a failure. Someone who finds a recipe, reads it and leaves has bounced and was perfectly served. It is most useful when you compare pages with the same purpose, or watch one page over time.
<strong>Watch for:</strong> it differs between tools, because some count short engaged visits as non-bounces.</p>
<h2 id="visit-duration">Visit duration</h2>
<p><strong>What it is:</strong> how long a visit lasted on average.</p>
<p><strong>How it is counted:</strong> the time between the first and the last event in a visit. A visit with a single page view has a duration of zero, because there is no second event to measure against, which is why average duration looks shorter than you might expect on content-heavy sites with many one-page visits.</p>
<p><strong>Good for:</strong> a rough sense of engagement, best read together with bounce rate.</p>
<h2 id="traffic-sources-and-channels">Traffic sources and channels</h2>
<p><strong>What it is:</strong> where visitors came from. A <strong>source</strong> is a specific site or campaign (Google, Reddit, a newsletter). A <strong>channel</strong> is a group of sources (Organic Search, Social, Email, Referral, Direct).</p>
<p><strong>How it is counted:</strong> from the page that sent the visitor (the referrer) and any campaign tags (UTM parameters) on the link. Visits with neither are “Direct”, which includes typed addresses, bookmarks and links from apps that do not send a referrer.</p>
<p><strong>Good for:</strong> knowing which channels are worth your time.
<strong>Watch for:</strong> “Direct” is a catch-all, so tag your own links with UTM parameters if you want them classified.</p>
<h2 id="goals-and-conversions">Goals and conversions</h2>
<p><strong>What it is:</strong> a count of visitors doing something you care about: signing up, downloading, buying, submitting a form.</p>
<p><strong>How it is counted:</strong> a goal is either a visit to a particular page (for example a thank-you page) or a custom event your site sends. The <strong>conversion rate</strong> is the visitors who completed the goal divided by all visitors. See <a href="https://hellotidemark.com/blog/track-outbound-links-and-downloads/">how to track links and downloads</a>.</p>
<h2 id="which-numbers-to-trust">Which numbers to trust</h2>
<ul>
<li><strong>Trust trends over exact values.</strong> Whether this month beats last month matters more than the absolute count.</li>
<li><strong>Read metrics in pairs.</strong> Bounce rate with duration, visits with visitors, pageviews with views per visit.</li>
<li><strong>Segment before you conclude.</strong> A site-wide bounce rate hides that your blog and your pricing page behave very differently.</li>
<li><strong>Remember what is not measured.</strong> Visitors who block scripts, and traffic that never loads your page, do not appear in any script-based tool.</li>
</ul>
<h2 id="seeing-them-together">Seeing them together</h2>
<p>The point of a one-page dashboard is that you can read these numbers side by side without hunting through reports. In Tidemark Analytics you can click a metric to see it on the graph, and click any row to filter the whole page by it.</p>]]></content:encoded></item></channel></rss>