{"id":394017,"date":"2026-11-01T12:31:03","date_gmt":"2026-11-01T12:31:03","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/rhoos-analytics\/"},"modified":"2026-11-01T12:30:48","modified_gmt":"2026-11-01T12:30:48","slug":"rhoos-analytics","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/rhoos-analytics\/","author":14135334,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.5.5","stable_tag":"1.5.5","tested":"7.1.4","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"Rhoos Analytics","header_author":"robword","header_description":"Privacy-conscious visitor analytics for WordPress.","assets_banners_color":"f9fbfe","last_updated":"2026-11-01 12:30:48","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/paypal.me\/robsnowcreative","header_plugin_uri":"https:\/\/robart-illustration.eu\/plugins-wordpress-development\/rhoos-analytics\/","header_author_uri":"https:\/\/robart-illustration.eu","rating":0,"author_block_rating":0,"active_installs":0,"downloads":29,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.5.5":{"tag":"1.5.5","author":"RobWord","date":"2026-11-01 12:30:48","revision":3778016}},"upgrade_notice":{"1.5.5":"<p>Recommended update. Longer dashboard ranges, deeper journey paths, accurate bounce rate and sessions, and privacy choices that now apply. Unique-visitor counts start fresh once, because IP anonymisation is now on by default.<\/p>","1.4.1":"<p>Recommended update. Adds Visitor ID tracking, Security PDF\/CSV reports, CSV delimiter option, map zoom and city dots, Smart TV\/console detection, and several bug fixes.<\/p>","1.4.0":"<p>Recommended update. Adds Security Monitor (Premium), Compare page, New vs Returning tab, CSV exports, MaxMind automatic installer, and dashboard percentage trend indicators.<\/p>","1.2.0":"<p>Recommended update. Adds Behaviour, 404, and Reports pages with D3 charts, PDF generation, and universal table sorting.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3778016,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3778016,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3778016,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3778016,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.5.5"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3778016,"resolution":"1","location":"assets","locale":"","width":3944,"height":2740},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3778016,"resolution":"10","location":"assets","locale":"","width":3944,"height":3256},"screenshot-11.png":{"filename":"screenshot-11.png","revision":3778016,"resolution":"11","location":"assets","locale":"","width":3944,"height":3152},"screenshot-12.png":{"filename":"screenshot-12.png","revision":3778016,"resolution":"12","location":"assets","locale":"","width":3944,"height":3888},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3778016,"resolution":"2","location":"assets","locale":"","width":3944,"height":8136},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3778016,"resolution":"3","location":"assets","locale":"","width":3944,"height":2720},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3778016,"resolution":"4","location":"assets","locale":"","width":3944,"height":1758},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3778016,"resolution":"5","location":"assets","locale":"","width":3944,"height":5234},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3778016,"resolution":"6","location":"assets","locale":"","width":3944,"height":2418},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3778016,"resolution":"7","location":"assets","locale":"","width":3944,"height":5756},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3778016,"resolution":"8","location":"assets","locale":"","width":3944,"height":3548},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3778016,"resolution":"9","location":"assets","locale":"","width":3944,"height":2576}},"screenshots":{"1":"Dashboard \u2014 D3 visitor chart, live visitor card, stat cards, and geography and device summaries.","2":"Visitors \u2014 full visit log with behaviour columns and D3 journey paths sunburst.","3":"Pages \u2014 D3 horizontal bar chart and sortable page performance table.","4":"Referrers \u2014 traffic sources ranked by visits with direct, search, and external breakdown.","5":"Geography \u2014 D3 choropleth world map with country and city drill-down.","6":"Devices \u2014 browser ring chart, OS family and version rings, and screen resolution treemap.","7":"Behaviour \u2014 scroll depth funnel, time-on-page distribution, and load time traffic-light chart.","8":"404 Errors \u2014 D3 bar chart, broken URL log, and referrer outreach tools.","9":"Reports \u2014 PDF traffic summary and 404 report with history log.","10":"Compare \u2014 side-by-side period comparison across all key metrics.","11":"Settings \u2014 tracking toggles, GeoIP mode, data retention, and licence management.","12":"Security \u2014 login attempt log, blocked IPs, and brute-force protection controls."}},"plugin_section":[262246],"plugin_tags":[232,396,521,550,871],"plugin_category":[36,54],"plugin_contributors":[267814],"plugin_business_model":[],"class_list":["post-394017","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-analytics","plugin_tags-privacy","plugin_tags-statistics","plugin_tags-tracking","plugin_tags-visitors","plugin_category-analytics","plugin_category-security-and-spam-protection","plugin_contributors-robword","plugin_committers-robword"],"banners":{"banner":"https:\/\/ps.w.org\/rhoos-analytics\/assets\/banner-772x250.png?rev=3778016","banner_2x":"https:\/\/ps.w.org\/rhoos-analytics\/assets\/banner-1544x500.png?rev=3778016","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/rhoos-analytics\/assets\/icon-128x128.png?rev=3778016","icon_2x":"https:\/\/ps.w.org\/rhoos-analytics\/assets\/icon-256x256.png?rev=3778016","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/rhoos-analytics\/assets\/screenshot-1.png?rev=3778016","caption":"Dashboard \u2014 D3 visitor chart, live visitor card, stat cards, and geography and device summaries."},{"src":"https:\/\/ps.w.org\/rhoos-analytics\/assets\/screenshot-2.png?rev=3778016","caption":"Visitors \u2014 full visit log with behaviour columns and D3 journey paths sunburst."},{"src":"https:\/\/ps.w.org\/rhoos-analytics\/assets\/screenshot-3.png?rev=3778016","caption":"Pages \u2014 D3 horizontal bar chart and sortable page performance table."},{"src":"https:\/\/ps.w.org\/rhoos-analytics\/assets\/screenshot-4.png?rev=3778016","caption":"Referrers \u2014 traffic sources ranked by visits with direct, search, and external breakdown."},{"src":"https:\/\/ps.w.org\/rhoos-analytics\/assets\/screenshot-5.png?rev=3778016","caption":"Geography \u2014 D3 choropleth world map with country and city drill-down."},{"src":"https:\/\/ps.w.org\/rhoos-analytics\/assets\/screenshot-6.png?rev=3778016","caption":"Devices \u2014 browser ring chart, OS family and version rings, and screen resolution treemap."},{"src":"https:\/\/ps.w.org\/rhoos-analytics\/assets\/screenshot-7.png?rev=3778016","caption":"Behaviour \u2014 scroll depth funnel, time-on-page distribution, and load time traffic-light chart."},{"src":"https:\/\/ps.w.org\/rhoos-analytics\/assets\/screenshot-8.png?rev=3778016","caption":"404 Errors \u2014 D3 bar chart, broken URL log, and referrer outreach tools."},{"src":"https:\/\/ps.w.org\/rhoos-analytics\/assets\/screenshot-9.png?rev=3778016","caption":"Reports \u2014 PDF traffic summary and 404 report with history log."},{"src":"https:\/\/ps.w.org\/rhoos-analytics\/assets\/screenshot-10.png?rev=3778016","caption":"Compare \u2014 side-by-side period comparison across all key metrics."},{"src":"https:\/\/ps.w.org\/rhoos-analytics\/assets\/screenshot-11.png?rev=3778016","caption":"Settings \u2014 tracking toggles, GeoIP mode, data retention, and licence management."},{"src":"https:\/\/ps.w.org\/rhoos-analytics\/assets\/screenshot-12.png?rev=3778016","caption":"Security \u2014 login attempt log, blocked IPs, and brute-force protection controls."}],"raw_content":"<!--section=description-->\n<p>Rhoos gives you clear, honest data about who visits your site, where they come from, and how they behave \u2014 all without cookies, without third-party services, and without storing IP addresses.<\/p>\n\n<p>A small first-party script records each page view and sends it to your own site, where it is stored in your WordPress database. Nothing is loaded from, or sent to, a third party. IP addresses are never stored: Rhoos keeps a salted one-way hash to count unique visitors, and by default drops the last part of the address before it does (Anonymise IP, in the setup wizard).<\/p>\n\n<p><strong>Visitor Analytics<\/strong><\/p>\n\n<p>Know your audience at a glance. The dashboard shows unique visitors, total visits, and downloads in a D3 chart across 7, 30 or 90 days, or month by month over 12 months, with percentage change against the previous period. A live visitor card updates every 30 seconds showing the most recent page view.<\/p>\n\n<p><strong>Pages &amp; Content<\/strong><\/p>\n\n<p>See which pages attract the most traffic. A D3 horizontal bar chart ranks your top pages and downloads by visit count, with a sortable table showing average scroll depth, time on page, and load time per page.<\/p>\n\n<p><strong>Referrers &amp; Campaigns<\/strong><\/p>\n\n<p>Understand where your traffic originates. Traffic is grouped by source type (organic search, social, referral, direct) and by referring domain, alongside your site's own search terms and the outbound links visitors click. Pro adds source performance: time on page, pages per session and bounce rate for each source.<\/p>\n\n<p><strong>Geography<\/strong><\/p>\n\n<p>A D3 choropleth world map shows visitor distribution by country, with countries, cities and browser languages in sortable tables alongside it. Pro adds a live traffic map.<\/p>\n\n<p><strong>Devices<\/strong><\/p>\n\n<p>Browser market share is shown as a D3 ring chart. Operating systems are broken down by family and version in a two-column ring layout. Screen resolutions are visualised as a D3 treemap grouped by category \u2014 Widescreen, Mobile, Tablet, Ultrawide \u2014 alongside a sortable table.<\/p>\n\n<p><strong>Behaviour<\/strong><\/p>\n\n<p>Rhoos passively records scroll depth (at 25%, 50%, 75%, and 100% milestones), time on page, and page load time \u2014 no additional scripts, no cookies. The overview tab shows three D3 charts: a scroll depth funnel, a time-on-page distribution, and a load time traffic-light breakdown. Per-page behaviour tables and a bounce rate chart are available in Pro.<\/p>\n\n<p><strong>404 Monitoring<\/strong><\/p>\n\n<p>Track every broken URL on your site. A D3 bar chart shows the top broken pages by hit count, separating real visitor hits from bot and scanner activity. Pro users get an external referrer outreach table with one-click contact finding and a pre-filled email template to notify site owners of broken links.<\/p>\n\n<p><strong>Reports<\/strong><\/p>\n\n<p>Generate clean, printable PDF reports via DOMPDF. The Traffic Summary covers visitors, downloads, top pages, countries, devices, and referrers. The 404 Report covers broken URLs, hit counts, and bot analysis. Both cover the last 7, 30 or 90 days.<\/p>\n\n<p><strong>Settings<\/strong><\/p>\n\n<p>Configure tracking exclusions, geolocation database options, and data retention from a single Settings page.<\/p>\n\n<p><strong>Pro Features<\/strong><\/p>\n\n<ul>\n<li>Per-page behaviour tables (scroll, time, load) across all behaviour tabs<\/li>\n<li>Bounce rate by page chart<\/li>\n<li>Entry pages, exit pages and bounce rate by page<\/li>\n<li>Sessions tab and source performance<\/li>\n<li>Live traffic map<\/li>\n<li>404 external referrer outreach tools<\/li>\n<li>CSV data export (visits, pages, referrers, countries, devices)<\/li>\n<li>New vs Returning visitors tab<\/li>\n<li>Period Comparison and Year on Year comparison charts<\/li>\n<\/ul>\n\n<p><strong>Premium Features<\/strong><\/p>\n\n<ul>\n<li>Security Monitor \u2014 login brute force and credential stuffing detection with D3 threat map with zoom and city dots<\/li>\n<li>Security alert email notifications (brute force, real account probes, possible compromise, credential stuffing)<\/li>\n<li>Security PDF report and CSV export<\/li>\n<li>Whitelist individual login attempts (\"not a threat\")<\/li>\n<li>Live traffic map city dots<\/li>\n<li>All Pro features included<\/li>\n<\/ul>\n\n<p>Rhoos does not collect, store, or transmit any personal data externally. All tracking is performed locally within your WordPress environment.<\/p>\n\n<h4>Feature Summary<\/h4>\n\n<ul>\n<li>Self-hosted \u2014 all data stays in your own database<\/li>\n<li>No cookies \u2014 zero cookies set on visitors' browsers<\/li>\n<li>No IP storage \u2014 used for the location lookup and a salted one-way hash, then discarded<\/li>\n<li>No external scripts \u2014 no tracking pixel or third-party JS on your front end<\/li>\n<li>First-party tracking \u2014 your own small script, no third-party tags<\/li>\n<li>Bot filtering \u2014 known crawlers and scanners flagged and separated<\/li>\n<li>Download tracking \u2014 files counted separately from page views<\/li>\n<li>D3.js charts throughout \u2014 treemaps, ring charts, choropleth maps, funnel charts, bar charts<\/li>\n<li>Behaviour metrics \u2014 scroll depth, time on page, load time recorded passively<\/li>\n<li>Session tracking \u2014 multi-page journeys with entry and exit pages<\/li>\n<li>404 monitoring with bot detection and referrer outreach (Pro)<\/li>\n<li>PDF reports via DOMPDF<\/li>\n<li>Universal sortable tables across all pages<\/li>\n<\/ul>\n\n<h3>Uninstall<\/h3>\n\n<p>Deleting Rhoos from the Plugins screen always removes its scheduled tasks. Your data is kept by default, so reinstalling picks up where you left off.<\/p>\n\n<p>To remove everything, tick <strong>Delete all Rhoos tables and settings when the plugin is deleted<\/strong> in Rhoos \u2192 Settings before deleting the plugin. Rhoos then removes:<\/p>\n\n<ul>\n<li>All its database tables (visits, sessions, daily totals, outbound clicks, video plays, 404 and security logs)<\/li>\n<li>All plugin settings and options prefixed with <code>rhoo_<\/code><\/li>\n<li>Its private folder in your uploads directory (visit archives and the GeoLite2 database)<\/li>\n<\/ul>\n\n<p>A separate tick box deletes the GeoLite2 database file on its own. Uninstalling does <strong>not<\/strong> delete:<\/p>\n\n<ul>\n<li>Any PDF reports you have already downloaded to your computer<\/li>\n<li>Any site content \u2014 posts, pages, users, WooCommerce data, etc.<\/li>\n<\/ul>\n\n<h3>Disclaimer<\/h3>\n\n<p>Rhoos tracks visitor activity on your WordPress site. Whilst every effort is made to ensure data accuracy, bot filtering is heuristic and not guaranteed to be exhaustive. Visitor counts should be treated as indicative rather than absolute.<\/p>\n\n<p>Rhoos is provided as-is, without warranty of any kind. Rob Snow \/ Rob Art | WordPress Development accepts no responsibility or liability for data loss, inaccurate analytics, or any damage arising from the use of this plugin. You are solely responsible for ensuring that your use of this plugin complies with applicable privacy law in your jurisdiction.<\/p>\n\n<p>Rhoos's built-in geolocation is approximate. City and region-level data in particular may be inaccurate, especially for mobile users connecting via cellular networks.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>Rhoos uses the GeoLite2-City database for IP geolocation. The database is installed separately via the automatic installer in Settings (requires a free MaxMind licence key) or by providing a path to a manually downloaded copy. No visitor data is sent to MaxMind or any external service during normal operation.<\/p>\n\n<p>If you use the <strong>automatic GeoLite2 installer<\/strong> in Settings \u2192 MaxMind, the plugin will make a direct HTTPS request to <code>download.maxmind.com<\/code> using your licence key to download the GeoLite2-City.tar.gz archive. The downloaded file is extracted locally and no data about your visitors is sent to MaxMind. The licence key you provide is stored in your WordPress options table.<\/p>\n\n<p>Please review MaxMind's privacy policy: https:\/\/www.maxmind.com\/en\/privacy-policy<\/p>\n\n<p>Country flag images are bundled with the plugin (<code>assets\/flags\/<\/code>) and served from your own site, so no request is made to a flag service.<\/p>\n\n<p>Rhoos Pro, sold separately, contacts robart-illustration.eu to check its licence key. The free plugin never does.<\/p>\n\n<h3>Credits<\/h3>\n\n<p>The free plugin bundles these open-source libraries for PDF reports, unmodified, in <code>vendor\/dompdf\/<\/code>:<\/p>\n\n<ul>\n<li><a href=\"https:\/\/github.com\/dompdf\/dompdf\">Dompdf<\/a> 3.1.5: LGPL-2.1<\/li>\n<li><a href=\"https:\/\/github.com\/dompdf\/php-font-lib\">php-font-lib<\/a>: LGPL-2.1-or-later<\/li>\n<li><a href=\"https:\/\/github.com\/dompdf\/php-svg-lib\">php-svg-lib<\/a>: LGPL-3.0-or-later<\/li>\n<li><a href=\"https:\/\/github.com\/Masterminds\/html5-php\">HTML5-PHP<\/a>: MIT<\/li>\n<li><a href=\"https:\/\/github.com\/MyIntervals\/PHP-CSS-Parser\">PHP CSS Parser<\/a>: MIT<\/li>\n<\/ul>\n\n<p>Each library's licence file is included alongside its code.<\/p>\n\n<p>The charts and maps use these, unmodified:<\/p>\n\n<ul>\n<li><a href=\"https:\/\/github.com\/d3\/d3\">D3<\/a> 7.9.0 (<code>assets\/js\/d3.min.js<\/code>): ISC. Source: https:\/\/github.com\/d3\/d3\/tree\/v7.9.0<\/li>\n<li><a href=\"https:\/\/github.com\/topojson\/topojson-client\">TopoJSON Client<\/a> 3.1.0 (<code>assets\/js\/topojson.min.js<\/code>): ISC. Source: https:\/\/github.com\/topojson\/topojson-client\/tree\/v3.1.0<\/li>\n<li><a href=\"https:\/\/github.com\/topojson\/world-atlas\">World Atlas<\/a> <code>countries-110m.json<\/code> (<code>assets\/maps\/<\/code>): ISC, from Natural Earth (public domain)<\/li>\n<li>Country flags (<code>assets\/flags\/<\/code>, 16x12 PNG) from <a href=\"https:\/\/flagpedia.net\">Flagpedia<\/a>, based on the public-domain flag artwork on Wikimedia Commons<\/li>\n<\/ul>\n\n<h3>Support<\/h3>\n\n<p>For documentation, guides, and FAQs visit the <a href=\"https:\/\/robart-illustration.eu\/plugins-wordpress-development\/help-documentation-wp\/\">Help &amp; Documentation<\/a> page.<\/p>\n\n<p>For bug reports or feature requests, please use the support forum on the plugin page or contact us via the <a href=\"https:\/\/robart-illustration.eu\/plugins-wordpress-development\/rhoos-analytics\/\">Rhoos plugin page<\/a>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Download the Rhoos plugin zip file.<\/li>\n<li>In your WordPress admin, go to <strong>Plugins &gt; Add New &gt; Upload Plugin<\/strong>.<\/li>\n<li>Choose the downloaded zip file and click <strong>Install Now<\/strong>.<\/li>\n<li>Once installed, click <strong>Activate Plugin<\/strong>.<\/li>\n<li>Rhoos will appear as <strong>Rhoos<\/strong> in the WordPress admin sidebar. Click it to open the dashboard.<\/li>\n<\/ol>\n\n<p>Alternatively, install via FTP by uploading the <code>rhoos-analytics<\/code> folder to <code>\/wp-content\/plugins\/<\/code> and activating from the Plugins screen.<\/p>\n\n<p>On first activation you will be redirected to a setup confirmation screen. Use the <strong>Ping Test<\/strong> on the dashboard to verify that tracking is working correctly.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20rhoos%20free%3F\"><h3>Is Rhoos free?<\/h3><\/dt>\n<dd><p>Yes. The core plugin is free and includes the dashboard, visitors and journey paths, pages, referrers, geography, devices, behaviour overview, 404 tracking, anomaly alerts and PDF reports. Rhoos Pro (sold separately) adds per-page behaviour tables, entry and exit pages, sessions, new vs returning visitors, live traffic, 404 referrer outreach and CSV export.<\/p><\/dd>\n<dt id=\"does%20it%20require%20a%20cookie%20consent%20banner%3F\"><h3>Does it require a cookie consent banner?<\/h3><\/dt>\n<dd><p>Rhoos sets no cookies and stores nothing on the visitor's device, so its own tracking does not need a cookie banner. It does process visit data (pages viewed, browser and device, approximate location, and a hashed IP), so mention it in your privacy policy: Rhoos adds suggested wording to Settings \u2192 Privacy \u2192 Policy Guide. This is not legal advice; check with a legal adviser for your situation.<\/p><\/dd>\n<dt id=\"will%20it%20work%20with%20caching%20plugins%3F\"><h3>Will it work with caching plugins?<\/h3><\/dt>\n<dd><p>Yes. Visits are reported by a small script in the visitor's browser, so pages served from a full-page cache are counted too.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20my%20site%20down%3F\"><h3>Will it slow my site down?<\/h3><\/dt>\n<dd><p>No. The tracking script is small, loads in the footer and reports the visit after the page has loaded, so it does not delay rendering.<\/p><\/dd>\n<dt id=\"can%20i%20exclude%20my%20own%20visits%3F\"><h3>Can I exclude my own visits?<\/h3><\/dt>\n<dd><p>Yes. Logged-in staff (anyone who can edit posts) are excluded by default. This is set in the setup wizard, where you can also exclude URLs.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20data%20when%20i%20deactivate%20the%20plugin%3F\"><h3>What happens to data when I deactivate the plugin?<\/h3><\/dt>\n<dd><p>Deactivating the plugin stops tracking but preserves all data. Data is only removed when the plugin is deleted.<\/p><\/dd>\n<dt id=\"can%20i%20export%20my%20data%3F\"><h3>Can I export my data?<\/h3><\/dt>\n<dd><p>PDF reports are available on the Reports page (free). CSV export of visits, top pages, referrers, countries, and devices is available on the Reports page for Pro and Premium users. For full raw database export, use a tool such as DBDumpWP or phpMyAdmin.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.5.5<\/h4>\n\n<ul>\n<li>New: the dashboard chart covers 7, 30 and 90 days, and month by month over 12 months. The stat cards show the percentage change against the previous period.<\/li>\n<li>New: visitor journey paths go up to 6 pages deep over the last 365 days.<\/li>\n<li>New: anomaly detection learns from up to 90 days of history.<\/li>\n<li>New: an Anomaly sensitivity setting (Sensitive, Normal, Relaxed or Calm) in Settings, so ordinary ups and downs stop showing as unusual on quieter sites. The Anomalies screen shows the current level.<\/li>\n<li>New: YouTube video plays are counted when a visitor clicks to play an embedded video.<\/li>\n<li>New: suggested text for your privacy policy, in Settings &gt; Privacy &gt; Policy Guide.<\/li>\n<li>Fixed: bounce rate read close to 100% because the pages of one visit were rarely linked into a session. Sessions are now grouped on your server without cookies, and past visits are regrouped once after the update.<\/li>\n<li>Fixed: the privacy choices in the setup wizard (anonymise IP addresses, exclude logged-in staff, filter bots, excluded URLs) were saved but never applied. They now are. IP anonymisation is on by default, so unique-visitor counts start fresh once after this update.<\/li>\n<li>Fixed: listing pages (a portfolio, the blog page, plugin or product lists, categories and tags) were recorded under the title of their first item. They are now named for what they are, and visits already recorded show the right names.<\/li>\n<li>Fixed: a page opened from a Facebook, Google or newsletter link was listed twice, because of the tag added to its address (fbclid, utm_ and similar). These tags are now dropped, and stored addresses are tidied once after the update.<\/li>\n<li>Fixed: times on the Visitors, Behaviour, 404s and Reports screens showed hours ahead of your site's time.<\/li>\n<li>Fixed: the rate limit and duplicate checks for page views and downloads never matched, so a repeat could be counted twice.<\/li>\n<li>Fixed: scroll depth and time on page were missing for most one-page visits on phones, because the update was only sent when the page unloaded, which phones often skip. It is now also sent when the page is hidden, and what is already on screen counts as seen.<\/li>\n<li>Fixed: visits from Android phones and tablets, games consoles and Windows phones were not saved on servers running MySQL in strict mode, because the device name was too long for its column. The column is widened automatically on update.<\/li>\n<li>Changed: country flags are bundled with the plugin; no request goes to an outside flag service.<\/li>\n<li>Improved: the page charts no longer show page titles or addresses as HTML in their pop-ups.<\/li>\n<li>Changed: the visit archive folder moved into your uploads folder. Existing archives move automatically.<\/li>\n<li>Changed: bulk activation no longer opens the welcome screen.<\/li>\n<li>Changed: all scripts and styles load from files, and output escaping was tightened throughout.<\/li>\n<li>Changed: the readme describes tracking, privacy and the free\/Pro split accurately.<\/li>\n<\/ul>\n\n<h4>1.5.4<\/h4>\n\n<ul>\n<li>Security: internal hardening.<\/li>\n<\/ul>\n\n<h4>1.5.3<\/h4>\n\n<ul>\n<li>Security: internal hardening.<\/li>\n<\/ul>\n\n<h4>1.5.2<\/h4>\n\n<ul>\n<li>Fixed: Anomaly Detection never finished learning on quieter sites. Hours with no visits were not counted, so many hours stayed at \"0 of 3 samples\" no matter how long Rhoos had been running. A quiet hour now counts as an hour of history.<\/li>\n<li>New: early checks. After 3 days of history Rhoos compares each hour with the same hour on the previous days. After 3 weeks it moves on by itself to the more accurate comparison with the same hour on the same weekday. Before, nothing was checked for the first three weeks.<\/li>\n<li>New: the Anomalies screen lists every unusual period of the last 7 days, newest first, instead of judging only the latest hour \u2014 so a spike that is over by the time you look is still shown. Back-to-back unusual hours are shown as one event with its peak hour and total.<\/li>\n<li>New: while learning, the Anomalies screen says how long it takes and shows progress week by week (Week 1 | Week 2 | Week 3) with the day count. The Dashboard shows the day count too.<\/li>\n<li>Fixed: in the \"Why is this unusual?\" breakdown, a page reached from Facebook was split into many separate pages, because every Facebook click adds a different tracking tag to the address. Pages are now grouped by their address without tags, and shown as a short path. Referrers are grouped by site (m.facebook.com and l.facebook.com count as facebook.com), and your own site no longer counts as a referrer.<\/li>\n<li>Fixed: an unusual hour on a normally quiet hour read \"+0%\". It now says it in plain numbers, e.g. \"reached 16 in an hour that is usually quiet (normal 0\u20137)\".<\/li>\n<li>Fixed: a long page address squashed the labels of the breakdown into a narrow column.<\/li>\n<li>Fixed: search-engine crawlers that run JavaScript \u2014 Googlebot, Bingbot, Applebot, Google Search Console's live URL test, PageSpeed Insights \/ Lighthouse and headless browsers \u2014 were counted as human visitors, because they describe themselves as Chrome or Safari and the browser was recognised before the bot. Bots are now recognised first. Visits recorded before this update are not changed.<\/li>\n<\/ul>\n\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>Fixed: the Referrers chart listed one bar per referring <em>page<\/em> rather than per site, so a single site could fill the chart with a dozen identical-looking rows and Facebook was split across facebook.com, m.facebook.com and l.facebook.com instead of showing its real total. Referrers are now grouped by site, with mobile and link-wrapper subdomains folded into the parent.<\/li>\n<li>Fixed: your own site appeared in the Referrers chart. Moving between pages of your own site is internal navigation, not a referral, so it no longer crowds out the real sources.<\/li>\n<li>Fixed: in the session tables the home page showed as a bare \"\/\", which read as missing data. It is now labelled \"Homepage\", and long page addresses are shortened in the middle rather than the end so two similar addresses can still be told apart. The full address is shown on hover.<\/li>\n<li>Changed: all plugin links and the licence server moved from robsnow.eu to robart-illustration.eu.<\/li>\n<li>Changed: added a donate link to the plugin listing.<\/li>\n<li>Fixed: the Security screen's stylesheet did not load because of an internal page-name mismatch, and a caption on that screen was hard to read against the dark header.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>New: Anomaly Detection. Rhoos now learns what a normal hour looks like for your site \u2014 for each hour of each weekday \u2014 and flags when the latest completed hour falls well outside that range, with a plain-language \"Why is this unusual?\" breakdown (what changed: a referral surge, a single page, and so on). All computed locally from your own data \u2014 no AI, no external services. A new \"Anomalies\" screen sits right after the Dashboard, and the Dashboard shows an at-a-glance anomaly status.<\/li>\n<li>Menu: the first item is now labelled \"Dashboard\" (was the plugin name).<\/li>\n<\/ul>\n\n<h4>1.4.9<\/h4>\n\n<ul>\n<li>Fixed Compare page rendering as a blank screen when the Pro add-on is not installed \u2014 the Compare submenu now shows a proper placeholder page with sidebar content explaining the Pro feature and an Upgrade to Pro button<\/li>\n<li>Fixed sidebar flowing below main content and a stray closing div on the Compare placeholder layout (iterative fixes across 1.4.6\u20131.4.8 consolidated)<\/li>\n<\/ul>\n\n<h4>1.4.5<\/h4>\n\n<ul>\n<li>Fixed native colour pickers (<code>&lt;input type=\"color\"&gt;<\/code>) being squashed to a thin line under WordPress 7.0 \u2014 restored to a proper 48\u00d730 swatch<\/li>\n<li>Added a custom chevron arrow, right padding, and 110px minimum width to select dropdowns so the arrow no longer overlaps the option text under WordPress 7.0<\/li>\n<\/ul>\n\n<h4>1.4.4<\/h4>\n\n<ul>\n<li>WordPress 7.0 compatibility \u2014 restored familiar form, button, checkbox and radio styling that WP 7.0 changed<\/li>\n<\/ul>\n\n<h4>1.4.3<\/h4>\n\n<ul>\n<li>Fixed Devices &gt; Browser &amp; Version chart legend deforming layout; capped at 4 version rows<\/li>\n<li>Fixed Devices &gt; Screen Resolution classifier incorrectly categorising desktop resolutions as Tablet<\/li>\n<li>Fixed Behaviour &gt; Scroll Depth percentages now exclude unrecorded visits from denominator<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>Added Visitor ID column on Visitors page \u2014 sortable anonymised hash prefix to spot repeat visitors (Pro)<\/li>\n<li>Added Visitor ID column and whitelist action on Security Monitor attempts table (Premium)<\/li>\n<li>Added Security PDF report and CSV export (Premium)<\/li>\n<li>Added CSV delimiter setting in Settings \u2192 General (comma or semicolon)<\/li>\n<li>Added zoom, click-to-zoom, and city dots to live traffic map (Pro\/Premium)<\/li>\n<li>Added zoom and click-to-zoom to Security threat origin map; city dots (Premium)<\/li>\n<li>Added Smart TV and Games Console device detection and icons<\/li>\n<li>Added Security quick action to dashboard (Premium)<\/li>\n<li>Fixed session duration always showing \u2014 on Visitors page<\/li>\n<li>Fixed 404 bot detection not catching zero-engagement visits<\/li>\n<li>Fixed Security Monitor chart rendering blank<\/li>\n<li>Fixed manual flush not archiving data correctly<\/li>\n<li>Fixed Settings General card label overflow on narrow screens<\/li>\n<li>Changed CDN to \"CDN (Content Delivery Network)\" in Behaviour recommendations<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Added Security Monitor page (Premium) \u2014 brute force and credential stuffing detection with D3 choropleth threat map, attack log, and per-IP drill-down<\/li>\n<li>Added security alert email notifications (Premium) \u2014 rate-limited HTML emails for brute force, real account probes, possible compromise, and credential stuffing events<\/li>\n<li>Added Compare page (Pro+) \u2014 Period Comparison tab with dual date pickers and D3 dual-line chart; Year on Year tab with automatic period offset<\/li>\n<li>Added New vs Returning visitors tab (Pro+) \u2014 ip_hash-based returning detection with stacked D3 bar chart and source breakdown table<\/li>\n<li>Added CSV export on Reports page (Pro+) \u2014 export visits, top pages, referrers, countries, and devices; all exports logged in report history<\/li>\n<li>Added MaxMind GeoLite2 automatic installer \u2014 downloads, extracts, and installs GeoLite2-City.mmdb via licence key with a progress indicator<\/li>\n<li>Added GeoLite2 sidebar notice on all pages when the database file is missing<\/li>\n<li>Added Daily Aggregates purge card in Settings \u2014 shows table size, row count, date range, and safe-to-purge date with a YoY data warning<\/li>\n<li>Added Security Monitor settings card (Premium) \u2014 retention period, brute force threshold, and track-success-logins toggle<\/li>\n<li>Added Security Alerts settings card (Premium) \u2014 master toggle, recipient address, and per-alert-type enable\/disable<\/li>\n<li>Upgraded dashboard trend indicators (Pro) \u2014 plain arrows replaced with percentage change pills (green up, red down, grey neutral)<\/li>\n<li>Fixed settings cards overflowing right edge \u2014 grid updated to minmax(0,1fr) with min-width:0 on card elements<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Added Behaviour page \u2014 scroll depth funnel, time-on-page distribution, and load time D3 charts; sessions tab; per-page behaviour tables (Pro); bounce rate by page chart (Pro)<\/li>\n<li>Added 404 page \u2014 D3 bar chart with bot detection; external referrer outreach table with contact tools (Pro)<\/li>\n<li>Added Reports page \u2014 DOMPDF PDF generation for traffic summary and 404 report with history log<\/li>\n<li>Added universal sortable tables across all pages with numeric-aware comparator<\/li>\n<li>Added User Manual and README modal viewer on dashboard, rendered from Markdown source<\/li>\n<li>Added icons throughout \u2014 page headers, stat cards, device type indicators<\/li>\n<li>Added screen resolution treemap (D3) on Devices page with category classification<\/li>\n<li>Added OS family and version two-column ring layout on Devices page<\/li>\n<li>Fixed behaviour chart right-margin clipping on time and load charts<\/li>\n<li>Fixed table sort not working on non-Visitors pages<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Added Geography choropleth world map (D3)<\/li>\n<li>Added Devices page \u2014 browser rings, OS rings, screen resolution treemap<\/li>\n<li>Added Visitor journey paths sunburst chart (D3)<\/li>\n<li>Added Pro and Premium tier gating throughout<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added Geography choropleth world map (D3)<\/li>\n<li>Added Devices page \u2014 browser rings, OS family and version rings, screen resolution treemap (D3)<\/li>\n<li>Added Visitor journey paths sunburst chart (D3)<\/li>\n<li>Added Pro and Premium tier gating throughout<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release \u2014 dashboard, visitors, pages, referrers, geography, devices<\/li>\n<\/ul>","raw_excerpt":"Privacy-first, self-hosted visitor analytics for WordPress: no cookies, no third-party services, and no IP addresses stored.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/394017","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=394017"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/robword"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=394017"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=394017"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=394017"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=394017"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=394017"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=394017"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}