{"id":29751,"date":"2026-05-11T14:48:00","date_gmt":"2026-05-11T13:48:00","guid":{"rendered":"https:\/\/www.web-systems.pl\/analytics-without-google-self-hosted-matomo\/"},"modified":"2026-05-11T14:48:00","modified_gmt":"2026-05-11T13:48:00","slug":"analytics-without-google-self-hosted-matomo","status":"publish","type":"post","link":"https:\/\/www.web-systems.pl\/en\/analytics-without-google-self-hosted-matomo\/","title":{"rendered":"Analytics without Google: what a self-hosted Matomo delivers"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">We increasingly get inquiries phrased bluntly: we want Matomo instead of Google Analytics, we just are not entirely sure what that means for our infrastructure. A good question. Because swapping one script for another is the smallest piece of this puzzle. Since 2006 we have been building web applications, B2B systems and integrations in \u0141\u00f3d\u017a, so we look at analytics mainly from the maintenance side, meaning what remains after the rollout. Below we describe what we see in projects: where such a migration pays off, where it falls apart, and which decisions have to be made before anyone touches the code.<\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_86 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of contents<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.web-systems.pl\/en\/analytics-without-google-self-hosted-matomo\/#Why_companies_are_leaving_Google_Analytics\" >Why companies are leaving Google Analytics<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.web-systems.pl\/en\/analytics-without-google-self-hosted-matomo\/#Self-hosted_or_Matomo_cloud_the_first_architectural_decision\" >Self-hosted or Matomo cloud: the first architectural decision<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.web-systems.pl\/en\/analytics-without-google-self-hosted-matomo\/#What_breaks_during_rollout_performance_and_archiving\" >What breaks during rollout: performance and archiving<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.web-systems.pl\/en\/analytics-without-google-self-hosted-matomo\/#Collecting_data_without_cookies_and_consents_nobody_clicks\" >Collecting data without cookies and consents nobody clicks<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.web-systems.pl\/en\/analytics-without-google-self-hosted-matomo\/#Integrations_analytics_as_a_data_source_not_just_a_dashboard\" >Integrations: analytics as a data source, not just a dashboard<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.web-systems.pl\/en\/analytics-without-google-self-hosted-matomo\/#Security_and_maintenance_after_the_rollout\" >Security and maintenance after the rollout<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.web-systems.pl\/en\/analytics-without-google-self-hosted-matomo\/#What_a_successful_migration_looks_like_step_by_step\" >What a successful migration looks like step by step<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Why_companies_are_leaving_Google_Analytics\"><\/span>Why companies are leaving Google Analytics<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The reasons we hear from clients are rarely ideological. Most often it is clauses in contracts with business partners, GDPR requirements set by the legal department, or an audit that flagged data transfers outside the EEA. The decision is then made at the level of legal risk, not marketing preference.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The second motive is analytical. Sampling and modeling in GA4 start to get in the way when the board expects raw events and the ability to recalculate them its own way. The same goes for retention: historical data disappears according to the vendor&#8217;s rules, not according to the company&#8217;s reporting cycle.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We also say honestly when a migration makes no sense. Little traffic, nobody responsible for the server, analytics looked at once a quarter? A self-hosted instance then becomes yet another neglected system. Better to stay with what works.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Self-hosted_or_Matomo_cloud_the_first_architectural_decision\"><\/span>Self-hosted or Matomo cloud: the first architectural decision<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The vendor-hosted option takes updates, backups and scaling off the team&#8217;s hands. You pay for it with no access to the database, and therefore no custom SQL queries and no free export to a data warehouse. For some organizations that is a compromise they can live with.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Installing on your own server gives you the opposite arrangement: full control over the data, premium plugins connected on your own terms, and the option to join events with other tables. In return you take on responsibility for performance and uptime.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In practice two questions settle it. Whether the data physically has to stay on the client&#8217;s infrastructure, and whether there is anyone on the team who will actually run the updates. Oh, one more thing: treat the cost as a process, not as a one-off <a href=\"https:\/\/www.web-systems.pl\/en\/matomo-analytics-implementation\/\">Matomo analytics implementation<\/a>. Plugin licenses, server resources growing along with the number of events, administrator time, storage for backups.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_breaks_during_rollout_performance_and_archiving\"><\/span>What breaks during rollout: performance and archiving<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Matomo is sometimes treated like a lightweight WordPress plugin, and it is a full analytics application with a database of its own. With heavier traffic the log tables swell far faster than the default configuration assumes, and after a few months the reports start to stall.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The most common mistake we find when taking over someone else&#8217;s instance is archiving triggered by the browser. The first person to open the panel in the morning kicks off the data processing and then sits there and waits. And meanwhile the server is still serving regular traffic. Moving archiving to cron closes most tickets of that kind.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With a high event volume, a tracker queue and a separate worker help, cutting data collection off from page rendering. The rest is plumbing: disk performance, MySQL or MariaDB configuration, a retention policy for raw logs set at the start. Setting it when the disk is full ends with deleting data under pressure.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Collecting_data_without_cookies_and_consents_nobody_clicks\"><\/span>Collecting data without cookies and consents nobody clicks<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cookieless mode plus IP address anonymization makes it possible in many configurations to measure traffic even before consent is given. The effect shows up right away: the reports include sessions that simply do not exist in a consent-dependent tool.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You just have to tell the client straight away what such measurement does not give you. Recognizing returning users gets weaker, the attribution window gets shorter, multi-session path analysis becomes less reliable. Anyone who attributes sales to campaigns over several weeks should know that before the start, not after.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We also make no declarations of legal compliance, because we are not authorized to. Our role is to prepare the configuration and describe exactly what lands in the database. We leave the assessment of those records to the client&#8217;s lawyer.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Integrations_analytics_as_a_data_source_not_just_a_dashboard\"><\/span>Integrations: analytics as a data source, not just a dashboard<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The greatest value of your own instance shows when it stops being a lonely panel. The data goes out through the API into a warehouse, a BI system or a report the board uses, and meets sales data there.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Server-side tracking completes the picture with events the frontend will never see: order status changes, returns, rejected payments, actions performed by integrations. In B2B projects it is exactly this material that explains where the revenue comes from. Not the page view count.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Importing historical web server logs lets you partly reconstruct traffic from before the rollout, which saves year-over-year comparisons. While doing that work it is worth comparing the data with what a <a href=\"https:\/\/www.web-systems.pl\/en\/seo-audits\/\">technical SEO audit<\/a> shows, because some of the gaps in traffic come from indexing, not from measurement. Tagging is a separate matter. If GTM works and the marketing team knows it, we usually suggest leaving the setup alone and plugging Matomo in as another tag, instead of migrating everything at once.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Security_and_maintenance_after_the_rollout\"><\/span>Security and maintenance after the rollout<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">An analytics panel knows more about a site&#8217;s users than the site itself, so we treat it as a sensitive system. HTTPS only, two-factor login, roles limited to the views actually needed, and no administrator account shared between the agency and the client.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Matomo&#8217;s release rhythm requires a planned maintenance window. Without one the instance stays on an old PHP version, and after a year an update stops being routine and turns into a project. Monitoring also looks different than on a regular website: the alert should react to the absence of new data in the tracker. A site can respond correctly while measurement has been silent for a week.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We plan the backup of the analytics database separately, because it grows at a different pace and takes longer to restore than a copy of the site. The last issue is organizational: who is responsible for the instance after the project handover. That has to be settled before the start, not after the first outage. If the company has nobody on staff for such tasks, one solution is <a href=\"https:\/\/www.web-systems.pl\/en\/it-outsourcing\/\">IT department outsourcing<\/a> with a clearly described scope of on-call duty.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_a_successful_migration_looks_like_step_by_step\"><\/span>What a successful migration looks like step by step<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The order of the work is similar every time, and it is the order that decides the outcome:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>an inventory of existing events, goals and reports that someone actually uses,<\/li>\n<li>parallel data collection over a comparison period,<\/li>\n<li>mapping conversions between the old and the new model,<\/li>\n<li>performance tests on production traffic, not on a test copy,<\/li>\n<li>training the marketing team on its own reports,<\/li>\n<li>switching off the old tracker only after the numbers are accepted.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">A period of double measurement is the only way to explain the differences between the tools. And the numbers will never agree down to the unit, because a session is defined differently, bot filtering works differently and measurement without consent looks different. The board has to be prepared for that in advance: show the direction of change instead of promising a match.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A failed rollout is easy to spot: after three months nobody logs into the panel. Choosing Matomo is a decision about control over the data and about taking on responsibility for maintenance. It makes sense when analytics is meant to feed decisions and other systems, not to fill a slide. If you are considering such a rollout, integrating analytics with your own systems, or modernizing what already runs, we will gladly talk about the scope and the real costs.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>We increasingly get inquiries phrased bluntly: we want Matomo instead of Google Analytics, we just are not entirely sure what that means for our infrastructure. A good question. Because swapping one script for another is the smallest piece of this puzzle. Since 2006 we have been building web applications, B2B systems and integrations in \u0141\u00f3d\u017a, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":29702,"comment_status":"","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[805],"tags":[106,1105,974,1176,1026,2113],"class_list":["post-29751","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tools","tag-analytics","tag-gdpr","tag-google-analytics-en","tag-implementation","tag-matomo-en","tag-self-hosted-setup"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/posts\/29751","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/comments?post=29751"}],"version-history":[{"count":0,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/posts\/29751\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/media\/29702"}],"wp:attachment":[{"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/media?parent=29751"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/categories?post=29751"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/tags?post=29751"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}