{"id":386217,"date":"2026-11-01T21:31:02","date_gmt":"2026-11-01T21:31:02","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/sentrixa-analytics\/"},"modified":"2026-11-01T21:30:39","modified_gmt":"2026-11-01T21:30:39","slug":"sentrixa-analytics","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/sentrixa-analytics\/","author":23584213,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.9.4","stable_tag":"1.9.4","tested":"7.1.4","requires":"5.6","requires_php":"7.4","requires_plugins":null,"header_name":"Sentrixa Analytics","header_author":"Sentrixa","header_description":"Privacy-first, self-hosted website analytics. Cookieless visitor tracking, a world visitor map, top countries, referrers and search terms \u2014 all stored in your own database, nothing shared with anyone. Built by Sentrixa.","assets_banners_color":"050f42","last_updated":"2026-11-01 21:30:39","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/sentrixa.co.uk\/wordpress-plugins\/","header_author_uri":"https:\/\/sentrixa.co.uk\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":62,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.9.4":{"tag":"1.9.4","author":"sentrixa","date":"2026-11-01 21:30:39","revision":3778573}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3778573,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3778573,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3778573,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3778573,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.9.4"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3778573,"resolution":"1","location":"assets","locale":"","width":1078,"height":1098},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3778573,"resolution":"2","location":"assets","locale":"","width":1078,"height":873},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3778573,"resolution":"3","location":"assets","locale":"","width":1078,"height":1162},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3778573,"resolution":"4","location":"assets","locale":"","width":537,"height":315},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3778573,"resolution":"5","location":"assets","locale":"","width":537,"height":720},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3778573,"resolution":"6","location":"assets","locale":"","width":1090,"height":1089}},"screenshots":{"1":"The dashboard: visitors, visits, page views, engaged time and bounce rate with trend lines, a traffic chart, the world visitor map and top countries.","2":"How people found you: search engines, social media, referring sites and campaigns.","3":"Your most-read pages, where visitors arrive and leave, and the devices, browsers and systems they use.","4":"A \"this week\" widget on the WordPress dashboard.","5":"The visitor map widget on the WordPress dashboard.","6":"Settings: privacy-first tracking options, data retention and country lookup."}},"plugin_section":[262246],"plugin_tags":[232,20315,131785,396,521],"plugin_category":[36,54],"plugin_contributors":[286090],"plugin_business_model":[],"class_list":["post-386217","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-analytics","plugin_tags-cookieless","plugin_tags-gdpr","plugin_tags-privacy","plugin_tags-statistics","plugin_category-analytics","plugin_category-security-and-spam-protection","plugin_contributors-sentrixa","plugin_committers-sentrixa"],"banners":{"banner":"https:\/\/ps.w.org\/sentrixa-analytics\/assets\/banner-772x250.png?rev=3778573","banner_2x":"https:\/\/ps.w.org\/sentrixa-analytics\/assets\/banner-1544x500.png?rev=3778573","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/sentrixa-analytics\/assets\/icon-128x128.png?rev=3778573","icon_2x":"https:\/\/ps.w.org\/sentrixa-analytics\/assets\/icon-256x256.png?rev=3778573","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/sentrixa-analytics\/assets\/screenshot-1.png?rev=3778573","caption":"The dashboard: visitors, visits, page views, engaged time and bounce rate with trend lines, a traffic chart, the world visitor map and top countries."},{"src":"https:\/\/ps.w.org\/sentrixa-analytics\/assets\/screenshot-2.png?rev=3778573","caption":"How people found you: search engines, social media, referring sites and campaigns."},{"src":"https:\/\/ps.w.org\/sentrixa-analytics\/assets\/screenshot-3.png?rev=3778573","caption":"Your most-read pages, where visitors arrive and leave, and the devices, browsers and systems they use."},{"src":"https:\/\/ps.w.org\/sentrixa-analytics\/assets\/screenshot-4.png?rev=3778573","caption":"A \"this week\" widget on the WordPress dashboard."},{"src":"https:\/\/ps.w.org\/sentrixa-analytics\/assets\/screenshot-5.png?rev=3778573","caption":"The visitor map widget on the WordPress dashboard."},{"src":"https:\/\/ps.w.org\/sentrixa-analytics\/assets\/screenshot-6.png?rev=3778573","caption":"Settings: privacy-first tracking options, data retention and country lookup."}],"raw_content":"<!--section=description-->\n<p>Sentrixa Analytics is a complete, self-contained analytics engine for\nWordPress, built by Sentrixa. Your visitor data is written to custom tables\nin your own database and is never sent anywhere else.<\/p>\n\n<p><strong>What you get<\/strong><\/p>\n\n<ul>\n<li>Headline numbers: visitors, visits, page views, average engaged time,\nbounce rate \u2014 each with a trend sparkline and a change vs. the previous\nperiod.<\/li>\n<li>A world visitor map (choropleth) and a top-10 countries list.<\/li>\n<li>Referrer breakdown: search engines, social media, other websites, direct,\ncampaigns \u2014 with drill-down to named sources, referring domains and UTM\ncampaigns.<\/li>\n<li>On-site search terms (what people type into your site's search box).<\/li>\n<li>A slot for Google Search Console query data, filled in automatically once\nSentrixa SiteHub is connected (coming soon).<\/li>\n<li>Top pages, entry pages, exit pages, devices, browsers, operating systems.<\/li>\n<li>wp-admin <strong>Dashboard widgets<\/strong> so the key numbers are the first thing you\nsee when you log in.<\/li>\n<li>A read REST API for the Sentrixa Sites mobile app.<\/li>\n<\/ul>\n\n<p><strong>How the tracking works<\/strong><\/p>\n\n<p>The plugin adds a tiny (~3 KB) first-party JavaScript beacon. It runs in the\nvisitor's browser, so it keeps working even when your pages are served from a\nfull-page cache (LiteSpeed, Cloudflare, WP Rocket, etc.) and PHP never runs \u2014\nwhich is where server-side analytics silently lose most of their data. A\nno-JavaScript <code>&lt;img&gt;<\/code> pixel covers the small share of visitors without JS.<\/p>\n\n<p><strong>Privacy<\/strong><\/p>\n\n<ul>\n<li>No cookies. No cross-site tracking. No fingerprinting.<\/li>\n<li>Unique visitors are counted with a salted hash of IP + user agent, where\nthe salt is regenerated every day and never stored \u2014 so yesterday's visitors\ncan't be recognised today and nobody can be re-identified from the data.<\/li>\n<li>The IP address is used only for the country lookup and that daily hash, then\ndiscarded. It is never written to the database.<\/li>\n<li>\"Do Not Track\" and Global Privacy Control are honoured by default.<\/li>\n<li>With the default settings no cookie\/consent banner is required, but you\nshould still mention analytics in your site's privacy policy.<\/li>\n<\/ul>\n\n<p><strong>Country data<\/strong><\/p>\n\n<p>IP-to-country lookups use the DB-IP IP-to-Country Lite database\n(https:\/\/db-ip.com), licensed CC BY 4.0. It is bundled with the plugin and\nrefreshed monthly. No third-party service is contacted for a lookup.<\/p>\n\n<h3>External services<\/h3>\n\n<p>Your visitor data stays in your own database and is never sent anywhere. The only optional external call:<\/p>\n\n<ul>\n<li><strong>Country database download<\/strong> (repo.sentrixa.co.uk). Off by default. If you switch on \"Update the country database automatically\" under Analytics &gt; Settings, the plugin periodically downloads a small prebuilt country-lookup file (based on DB-IP Lite, CC BY 4.0, https:\/\/db-ip.com). Only a plain request is made; no site or visitor data is sent. The service is provided by Sentrixa Systems Ltd: terms at https:\/\/sentrixa.co.uk\/legal\/plugin-and-website-terms\/ and privacy policy at https:\/\/sentrixa.co.uk\/privacy-policy\/. A current database is already bundled with the plugin, and you can also update it manually with the button on the same screen.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>sentrixa-analytics<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install\nthe zip from Plugins \u2192 Add New \u2192 Upload.<\/li>\n<li>Activate. Tracking starts immediately.<\/li>\n<li>Open <strong>Analytics<\/strong> in the admin menu. Figures update within a couple of\nminutes of a visit.<\/li>\n<\/ol>\n\n<p><strong>If WP-Cron is disabled on your host<\/strong>, point a real cron job at:<\/p>\n\n<pre><code>wp sentrixa-analytics rollup        # every 10 min\nwp sentrixa-analytics geoip-update  # daily (acts monthly)\n<\/code><\/pre>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20send%20my%20data%20to%20sentrixa%3F\"><h3>Does this send my data to Sentrixa?<\/h3><\/dt>\n<dd><p>No. Everything is stored in your own WordPress database. The only outbound\nrequest the plugin makes is the monthly download of the free DB-IP country\ndatabase (which you can turn off).<\/p><\/dd>\n<dt id=\"why%20don%27t%20i%20see%20the%20exact%20words%20people%20typed%20into%20google%3F\"><h3>Why don't I see the exact words people typed into Google?<\/h3><\/dt>\n<dd><p>Google stopped putting the search query in the referrer around 2011\n(\"not provided\"). The only place that data exists is Google Search Console.\nConnect Search Console through Sentrixa SiteHub (coming soon) and those\nqueries appear on the dashboard. Your own site's search box terms are tracked\nwithout any of that.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20my%20site%20down%3F\"><h3>Will it slow my site down?<\/h3><\/dt>\n<dd><p>The front-end payload is one small static JavaScript file. Recording happens\non a separate lightweight REST request, not during page rendering.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.9.4<\/h4>\n\n<ul>\n<li>Database: every index now fits the legacy 767-byte InnoDB limit so tables are created on older MySQL\/MariaDB. Existing installs migrate automatically.<\/li>\n<li>The database version is only recorded once all tables exist; if they cannot be created an administrator notice explains why.<\/li>\n<\/ul>\n\n<h4>1.9.3<\/h4>\n\n<ul>\n<li>Plugin-wide unique prefix (sxanl_ \/ SXANL_) for all functions, classes, options, cron hooks and transients; existing settings and data are carried over automatically.<\/li>\n<li>Faster, quieter activation: it only creates the database tables and default settings. The bundled country database is copied into place shortly afterwards in the background, and nothing contacts an external server on activation.<\/li>\n<li>WP-CLI geoip-build now writes only inside the plugin's own uploads folder.<\/li>\n<\/ul>\n\n<h4>1.9.2<\/h4>\n\n<ul>\n<li>Menu moved lower in the admin; GeoIP service terms and privacy links added to the readme; WP-CLI geoip-build checks its output path.<\/li>\n<\/ul>\n\n<h4>1.9.1<\/h4>\n\n<ul>\n<li>The Sentrixa Sites app can now read and edit the shared Sentrixa site profile (business details, social profiles, Search Console codes) for the site.<\/li>\n<\/ul>\n\n<h4>1.9.0<\/h4>\n\n<ul>\n<li>New shared Sentrixa site profile (Settings &gt; Sentrixa site): business details, social profiles and Search Console \/ webmaster codes are entered once and shared by every Sentrixa plugin. On update, anything this plugin already held is copied into it; nothing is overwritten.<\/li>\n<\/ul>\n\n<h4>1.8.6<\/h4>\n\n<ul>\n<li>The Sentrixa Sites app now adapts to the licence: posting from the app needs an active Sentrixa licence; viewing stats does not.<\/li>\n<\/ul>\n\n<h4>1.8.5<\/h4>\n\n<ul>\n<li>New Settings &gt; Sentrixa licence page (Sentrixa edition) to enter and check the licence key.<\/li>\n<\/ul>\n\n<h4>1.8.4<\/h4>\n\n<ul>\n<li>Sentrixa-edition updates now require the site's Sentrixa licence key (constant SENTRIXA_LICENSE_KEY or option sentrixa_license_key).<\/li>\n<\/ul>\n\n<h4>1.8.3<\/h4>\n\n<ul>\n<li>Dashboard widgets now use the plugin colours (the visitor map showed unvisited countries in black).<\/li>\n<\/ul>\n\n<h4>1.8.2<\/h4>\n\n<ul>\n<li>The Google search terms panel no longer says \"coming soon\" and only mentions the Sentrixa Sites app in the Sentrixa edition.<\/li>\n<\/ul>\n\n<h4>1.8.1<\/h4>\n\n<ul>\n<li>Code-quality pass for WordPress.org: the bundled country database is no longer a compressed file, file handling uses WordPress APIs, translator comments added. Tested up to WordPress 7.1.<\/li>\n<\/ul>\n\n<h4>1.8.0<\/h4>\n\n<ul>\n<li>Two editions from one source: the WordPress.org edition contains the analytics engine, dashboards and widgets; the Sentrixa edition adds the Sentrixa Sites app integration (pairing, publishing, search-console and uptime feeds) and the self-hosted updater. The country-database download is now opt-in in the free edition.<\/li>\n<\/ul>\n\n<h4>1.7.1<\/h4>\n\n<ul>\n<li>Posts published from the Sentrixa Sites app are now published last, after their categories, tags and featured image are saved, so auto-posting plugins (Sentrixa Social) see the finished post.<\/li>\n<\/ul>\n\n<h4>1.7.0<\/h4>\n\n<ul>\n<li>New \"Site uptime\" Dashboard widget: whether the site is up, how long it has been up, uptime for 24 hours \/ 7 days \/ 30 days, a 48-hour strip and any recent downtime. The site is checked from outside every 5 minutes by Sentrixa Sites; also shown in the Sentrixa Sites app.<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>Google Search Console query data can now be connected through the\nSentrixa Sites app (Settings on each site) so the \"Search terms\"\ndashboard panel shows real Google search queries, not just an empty\nstate.<\/li>\n<\/ul>\n\n<h4>1.5.8<\/h4>\n\n<ul>\n<li>Country-database download verifies against a content hash and copes\nwith hosts whose HTTP layer decompresses the response.<\/li>\n<\/ul>\n\n<h4>1.5.7<\/h4>\n\n<ul>\n<li>The country database now updates by downloading a small, ready-built\nfile from Sentrixa (checksum-verified) instead of fetching and\nparsing a large CSV on your server \u2014 reliable on every host.<\/li>\n<\/ul>\n\n<h4>1.5.6<\/h4>\n\n<ul>\n<li>Country-database refresh now downloads the file into memory instead of\nstreaming it, which some hosts don't handle \u2014 the refresh works there now.<\/li>\n<\/ul>\n\n<h4>1.5.5<\/h4>\n\n<ul>\n<li>Country-database refresh: the downloaded file is checked before\nparsing, and malformed rows are skipped rather than aborting the\nwhole update (fixes a rare hard failure on PHP 8.1+).<\/li>\n<\/ul>\n\n<h4>1.5.4<\/h4>\n\n<ul>\n<li>Fix: refreshing the country database could hit the host's script time\nlimit and fail with a blank screen. It now raises the limits, parses\nthe CSV faster, and reports any problem as a normal admin notice.<\/li>\n<\/ul>\n\n<h4>1.5.3<\/h4>\n\n<ul>\n<li>The \"Today\" hourly chart no longer counts page views with no visitor\nor session id towards the visitor \/ visit totals for the hour.<\/li>\n<\/ul>\n\n<h4>1.5.2<\/h4>\n\n<ul>\n<li>Update check is now reliable on hosts that cache outbound requests\n(busts the cache, keeps the last good result if the check can't run).<\/li>\n<\/ul>\n\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>Verified the self-hosted update channel end to end \u2014 updating from the\nPlugins screen (and WordPress auto-updates) now pulls from Sentrixa.<\/li>\n<li>Packaging: the build scripts are no longer shipped inside the plugin.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>The \"Today\" view now shows an hour-by-hour traffic line instead of a single\npoint, so you can see the shape of the day as it happens.<\/li>\n<li>Update channel: WordPress now checks Sentrixa for new plugin versions and\noffers them on the Plugins screen (with a \"View details\" changelog and the\nstandard auto-update toggle). Settings \u2192 Analytics has a \"Check for updates\"\nbutton and an \"install updates automatically\" option (on by default).<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Fix: the analytics REST endpoints could be stored by a full-page cache\n(LiteSpeed), so a single date range on the dashboard \/ mobile app could\nfreeze on old figures while every other range updated normally. The\nendpoints now instruct the cache never to store them, and updating the\nplugin purges anything already cached.<\/li>\n<li>Settings screen wording updated to match the near-real-time cadence.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Near-real-time dashboard: a stats read now rebuilds today's summary on the\nspot (throttled to once every ~45s), and the background rollup runs every\n10 minutes instead of hourly. Figures are current to within a minute.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>The read API (\/summary, \/dashboard, \/timeseries, \/breakdown, \/realtime,\n\/geojson) now also accepts a paired connection (X-SXA-Connection +\nX-SXA-Key), so Sentrixa SiteHub can fetch a site's stats for the app.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Publishing API for the forthcoming Sentrixa Sites mobile app (used via\nSentrixa SiteHub): posts (list \/ read \/ create \/ update \/ trash), media\nupload, taxonomy terms (list \/ create), and a <code>\/site<\/code> capabilities\nendpoint.<\/li>\n<li>Device pairing: Analytics -&gt; Connect shows a one-time pairing code; a\nper-connection bearer secret is minted on claim and stored only as a hash.\nConnected devices are listed and can be disconnected. WP-CLI:\n  wp sentrixa-analytics pair-code \/ <code>connections<\/code>.<\/li>\n<li>No change to tracking or the dashboard.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Settings screen: \"Rebuild summaries now\" and \"Update country database now\"\nbuttons, so the dashboard can be populated immediately after install and\non hosts where WP-Cron is unreliable.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: beacon + no-JS pixel tracker, cookieless visitor\/session\nmodel, referrer classification, bot filtering, bundled DB-IP GeoIP with\nmonthly refresh, hourly rollup + retention pruning, wp-admin Analytics\nscreen with world map, dashboard widgets, on-site search terms, GSC\ningest endpoint, read REST API, WP-CLI commands.<\/li>\n<\/ul>","raw_excerpt":"Privacy-first, self-hosted analytics: cookieless visitor tracking, visitor map, top countries, referrers and search terms, stored on your site.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/386217","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=386217"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/sentrixa"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=386217"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=386217"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=386217"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=386217"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=386217"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=386217"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}