{"id":384306,"date":"2026-11-08T17:46:31","date_gmt":"2026-11-08T17:46:31","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/simple-page-views-country-stats\/"},"modified":"2026-11-08T17:49:45","modified_gmt":"2026-11-08T17:49:45","slug":"andresitaly-cookieless-country-reports","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/andresitaly-cookieless-country-reports\/","author":15245892,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.1.4","requires":"6.5","requires_php":"8.0","requires_plugins":null,"header_name":"Andresitaly Cookieless Country Reports","header_author":"Andres Hunger","header_description":"Cookieless page views with per-country breakdown, for admins only. No Google Analytics, no cookies, no IP addresses stored.","assets_banners_color":"141a22","last_updated":"2026-11-08 17:49:45","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/andresitaly-cookieless-country-reports\/","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":112,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"andresitaly","date":"2026-11-08 17:45:59","revision":3791297},"1.0.1":{"tag":"1.0.1","author":"andresitaly","date":"2026-11-08 17:49:45","revision":3791302}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3791297,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3791297,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3791297,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3791297,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3791297,"resolution":"1","location":"assets","locale":"","width":1920,"height":1317},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3791297,"resolution":"2","location":"assets","locale":"","width":1680,"height":690},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3791297,"resolution":"3","location":"assets","locale":"","width":1080,"height":651}},"screenshots":{"1":"The Page Views dashboard: totals, sessions, countries, a 30-day trend chart and the top pages, with date range, country filter and CSV export.","2":"Views by country, with flags, views and sessions.","3":"GeoLite2 settings: paste a free MaxMind key once, then every country lookup happens on your own server."}},"plugin_section":[],"plugin_tags":[232,4124,3280,396,521],"plugin_category":[36,49,54],"plugin_contributors":[283770],"plugin_business_model":[],"class_list":["post-384306","plugin","type-plugin","status-publish","hentry","plugin_tags-analytics","plugin_tags-geolocation","plugin_tags-page-views","plugin_tags-privacy","plugin_tags-statistics","plugin_category-analytics","plugin_category-maps-and-location","plugin_category-security-and-spam-protection","plugin_contributors-andresitaly","plugin_committers-andresitaly"],"banners":{"banner":"https:\/\/ps.w.org\/andresitaly-cookieless-country-reports\/assets\/banner-772x250.png?rev=3791297","banner_2x":"https:\/\/ps.w.org\/andresitaly-cookieless-country-reports\/assets\/banner-1544x500.png?rev=3791297","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/andresitaly-cookieless-country-reports\/assets\/icon-128x128.png?rev=3791297","icon_2x":"https:\/\/ps.w.org\/andresitaly-cookieless-country-reports\/assets\/icon-256x256.png?rev=3791297","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/andresitaly-cookieless-country-reports\/assets\/screenshot-1.png?rev=3791297","caption":"The Page Views dashboard: totals, sessions, countries, a 30-day trend chart and the top pages, with date range, country filter and CSV export."},{"src":"https:\/\/ps.w.org\/andresitaly-cookieless-country-reports\/assets\/screenshot-2.png?rev=3791297","caption":"Views by country, with flags, views and sessions."},{"src":"https:\/\/ps.w.org\/andresitaly-cookieless-country-reports\/assets\/screenshot-3.png?rev=3791297","caption":"GeoLite2 settings: paste a free MaxMind key once, then every country lookup happens on your own server."}],"raw_content":"<!--section=description-->\n<p>Andresitaly Cookieless Country Reports counts which pages your visitors read the most and where they come from \u2014 and nothing else. It exists for site owners who want a lightweight, privacy-first alternative to Google Analytics.<\/p>\n\n<ul>\n<li><strong>Works behind page caches.<\/strong> The hit is captured by a tiny vanilla-JS beacon, so it counts even when pages are served by LiteSpeed \/ W3 Total Cache \/ any full-page cache that skips server-side PHP.<\/li>\n<li><strong>Country detection, zero config<\/strong> \u2014 if the site is served through Cloudflare, the country comes from Cloudflare's own header (no key, no download at all). Otherwise the plugin uses a locally hosted MaxMind GeoLite2 database (free license key, downloaded once from your own admin page). Lookups run on your server \u2014 the plugin never calls a remote service per visit.<\/li>\n<li><strong>Reports only in the admin<\/strong>: view totals, sessions, top 20 pages, views by country, 30-day daily trend chart, CSV export.<\/li>\n<li><strong>Privacy by design.<\/strong> No cookies are set, no IP addresses are stored, and the session identifier is a random per-tab string stored only hashed for at most your raw-hit retention (default 7 days).<\/li>\n<\/ul>\n\n<h4>How it works<\/h4>\n\n<ul>\n<li>A ~2 KB vanilla JavaScript beacon sends one hit per page view to your own site's REST endpoint.<\/li>\n<li>The hit carries a server-minted HMAC token, so only pages actually rendered by your site can be counted.<\/li>\n<li>Known bots (Googlebot, bingbot, Lighthouse, curl, most SEO crawlers) are filtered by User-Agent; logged-in users are never counted.<\/li>\n<li>The raw hit table is aggregated into a small daily table (page \u00d7 country \u00d7 device) and pruned after a configurable number of days.<\/li>\n<\/ul>\n\n<h4>What it does NOT do<\/h4>\n\n<ul>\n<li>No public counters, no badges, no external branding.<\/li>\n<li>No cookies, no cross-site tracking, no third-party analytics calls.<\/li>\n<li>No IP address is stored anywhere (transient keys embed irreversible hashes only, and expire quickly).<\/li>\n<\/ul>\n\n<h3>Privacy<\/h3>\n\n<p><strong>No cookies. No IP addresses.<\/strong> The plugin stores:<\/p>\n\n<ul>\n<li>Aggregated view counts (page \u00d7 country \u00d7 device \u00d7 day) \u2014 kept as long as you configure.<\/li>\n<li>Raw individual hits with a random ephemeral session identifier (hashed) \u2014 deleted after your retention window (default 7 days).<\/li>\n<li>Two transient entries containing only irreversible hashes (a 10-second request dedupe and a 12-hour country cache) \u2014 neither is connected to identity.<\/li>\n<\/ul>\n\n<p>The plugin is GDPR-friendly by design: it does not track individuals and does not require a consent banner. A suggested privacy-policy paragraph is offered in Tools \u2192 Privacy.<\/p>\n\n<h3>External services<\/h3>\n\n<p>Andresitaly Cookieless Country Reports uses one external service: <strong>MaxMind GeoLite2<\/strong>, used to tell which country your visitors read your pages from.<\/p>\n\n<ul>\n<li><strong>What the service is and what it is used for.<\/strong> GeoLite2 is MaxMind's free downloadable country database. Andresitaly Cookieless Country Reports downloads it once and then answers all country lookups locally on your own server \u2014 the plugin never calls MaxMind per page view, in any direction.<\/li>\n<li><strong>What data is sent and when.<\/strong> Nothing is sent automatically and no visitor data is ever shared. The only request is the database download itself, made by <em>your web server<\/em> to <code>https:\/\/download.maxmind.com<\/code>. It happens (a) when you paste your own free MaxMind license key and click \"Download \/ update GeoLite2 now\" in the admin, or (b) at your optional daily refresh, only if you enable it. The request carries just that license key and standard HTTP headers \u2014 no page views, no URLs, no visitor information. If your site is behind Cloudflare, no MaxMind key or download is needed at all (the country comes from Cloudflare's response header).<\/li>\n<li><strong>MaxMind Terms of Service (GeoLite2 EULA):<\/strong> https:\/\/www.maxmind.com\/en\/geolite2\/eula<\/li>\n<li><strong>MaxMind Privacy Policy:<\/strong> https:\/\/www.maxmind.com\/en\/privacy_policy<\/li>\n<\/ul>\n\n<p>GeoLite2 is licensed under the Creative Commons Attribution 4.0 license. The plugin does not bundle the database: you download it with your own key, as MaxMind's EULA requires.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Go to <strong>Page Views<\/strong> in the admin sidebar.<\/li>\n<li>Paste your free MaxMind license key (GeoLite2 settings section inside the page) and click <strong>Download \/ update GeoLite2 now<\/strong>.<\/li>\n<li>Browse your site \u2014 counts appear in the report as visits come in (the daily table fills up from today; the previous day rolls up by cron).<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20i%20use%20it%20behind%20litespeed%2C%20w3%20total%20cache%2C%20or%20a%20cdn%3F\"><h3>Can I use it behind LiteSpeed, W3 Total Cache, or a CDN?<\/h3><\/dt>\n<dd><p>Yes \u2014 the beacon is client-side, so cached page views still count. That was the point.<\/p><\/dd>\n<dt id=\"which%20pages%20are%20counted%3F\"><h3>Which pages are counted?<\/h3><\/dt>\n<dd><p>Public, published singular pages: posts, pages, and any public custom post type. Not admin screens, not search results, not 404s, not logged-in views.<\/p><\/dd>\n<dt id=\"is%20a%20visitor%27s%20ip%20stored%3F\"><h3>Is a visitor's IP stored?<\/h3><\/dt>\n<dd><p>No. IP addresses are used only transiently (10 seconds, hashed keys) for request dedupe and country detection, then discarded.<\/p><\/dd>\n<dt id=\"what%20is%20a%20%22session%22%3F\"><h3>What is a \"Session\"?<\/h3><\/dt>\n<dd><p>Counted by a random per-tab identifier, so it is browser\/device-granular: the same person in two browsers counts twice. We call it Sessions, not unique users, honestly.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fix: the country filter showed \"Unknown\" instead of \"All countries\" when some visits had no detected country.<\/li>\n<li>Fix: the selected country no longer appears twice in the country filter.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release: beacon tracking, GeoLite2 country detection, admin dashboard, CSV export.<\/li>\n<\/ul>","raw_excerpt":"Cookieless page views with per-country breakdown, for admins only. No Google Analytics, no cookies, no IP addresses stored.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/384306","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=384306"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/andresitaly"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=384306"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=384306"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=384306"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=384306"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=384306"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=384306"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}