{"id":310768,"date":"2026-05-27T21:33:42","date_gmt":"2026-05-27T21:33:42","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/cookie-free-analytics\/"},"modified":"2026-08-07T05:17:38","modified_gmt":"2026-08-07T05:17:38","slug":"no-cookie-analytics-by-arfa","status":"publish","type":"plugin","link":"https:\/\/bn-in.wordpress.org\/plugins\/no-cookie-analytics-by-arfa\/","author":21149320,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.9","stable_tag":"1.0.9","tested":"7.0.3","requires":"6.2","requires_php":"","requires_plugins":null,"header_name":"No Cookie Analytics \u2013 By Arfa","header_author":"Muhammad Arfa Rehman","header_description":"GDPR-aware analytics with server-side tracking and no frontend cookies.","assets_banners_color":"020f1f","last_updated":"2026-08-07 05:17:38","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/no-cookie-analytics-by-arfa\/","header_author_uri":"https:\/\/arfarehman.freedev.app\/","rating":5,"author_block_rating":0,"active_installs":0,"downloads":220,"num_ratings":2,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.7":{"tag":"1.0.7","author":"arfarehman","date":"2026-05-27 21:53:29"},"1.0.8":{"tag":"1.0.8","author":"arfarehman","date":"2026-07-09 02:05:46"},"1.0.9":{"tag":"1.0.9","author":"arfarehman","date":"2026-08-07 05:17:38"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":2},"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3551305,"resolution":"256x256","location":"assets","locale":"","width":499,"height":500}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3551305,"resolution":"1544x500","location":"assets","locale":"","width":2205,"height":713}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.7","1.0.8","1.0.9"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[262246],"plugin_tags":[232,131785,189910,396,550],"plugin_category":[36,54],"plugin_contributors":[264704],"plugin_business_model":[],"class_list":["post-310768","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-analytics","plugin_tags-gdpr","plugin_tags-no-cookies","plugin_tags-privacy","plugin_tags-tracking","plugin_category-analytics","plugin_category-security-and-spam-protection","plugin_contributors-arfarehman","plugin_committers-arfarehman"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/no-cookie-analytics-by-arfa\/assets\/icon-256x256.png?rev=3551305","icon_2x":"https:\/\/ps.w.org\/no-cookie-analytics-by-arfa\/assets\/icon-256x256.png?rev=3551305","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>No Cookie Analytics \u2013 By Arfa tracks visits server-side without setting cookies in visitors'\nbrowsers. Data stays in your WordPress database with an admin dashboard, reports, and optional\nCSV export.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>This plugin stores analytics records in your WordPress database (<code>wp_ncaba_hits<\/code>), including:<\/p>\n\n<ul>\n<li>Page URL\/path<\/li>\n<li>Referrer host<\/li>\n<li>Browser\/OS\/device type<\/li>\n<li>Anonymized IP hash<\/li>\n<li>Session key<\/li>\n<li>Country code<\/li>\n<li>Whether the request resulted in a 404 (not found)<\/li>\n<li>UTM campaign parameters (utm_source, utm_medium, utm_campaign), when present in the visited URL<\/li>\n<li>Timestamp<\/li>\n<\/ul>\n\n<p>No raw IP address is stored in the plugin database.<\/p>\n\n<p>Country detection behavior:<\/p>\n\n<ol>\n<li>Uses server-provided geolocation headers when available (for example Cloudflare or GeoIP\nheaders).<\/li>\n<li>Optional external IP geolocation lookup can be enabled by admin consent in plugin settings.<\/li>\n<\/ol>\n\n<p>When external geolocation is enabled, visitor IP is sent to:<\/p>\n\n<ul>\n<li>Service: <a href=\"https:\/\/ipapi.co\/\">ipapi.co<\/a> (primary) and <a href=\"https:\/\/ipwho.is\/\">ipwho.is<\/a> (fallback)<\/li>\n<li>Purpose: country lookup only<\/li>\n<\/ul>\n\n<p>Site owners must disclose this in their privacy policy before enabling external lookup.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin can optionally use the third-party services ipapi.co and ipwho.is for country lookup. The lookup\nis <strong>disabled by default<\/strong> and only runs after a site administrator explicitly enables the\n\"Allow External Geo Lookup\" option in plugin settings.<\/p>\n\n<ul>\n<li>Services: ipapi.co (https:\/\/ipapi.co\/) and ipwho.is (https:\/\/ipwho.is\/) as fallback<\/li>\n<li>What is sent: the visitor's IP address (only when the option is enabled and no server-provided\ngeo headers are available).<\/li>\n<li>When: at most once per visitor IP per week on success; failed lookups are retried after one hour.<\/li>\n<li>Why: to determine the visitor's country code for the analytics dashboard.<\/li>\n<li>ipapi.co Terms of Service: https:\/\/ipapi.co\/terms\/<\/li>\n<li>ipapi.co Privacy Policy: https:\/\/ipapi.co\/privacy\/<\/li>\n<li>ipwho.is Terms: https:\/\/ipwhois.io\/terms<\/li>\n<li>ipwho.is Privacy: https:\/\/ipwhois.io\/privacy<\/li>\n<\/ul>\n\n<p>If the option is left disabled, the plugin never contacts ipapi.co or ipwho.is.<\/p>\n\n<h3>Features<\/h3>\n\n<ul>\n<li>Server-side tracking<\/li>\n<li>GDPR-aware design (configure to your legal requirements)<\/li>\n<li>No frontend cookies<\/li>\n<li>Admin dashboard and home screen widget<\/li>\n<li>Pages, Referrers, Users, 404, and Campaigns (UTM) reports<\/li>\n<li>Per-post analytics meta box in the editor sidebar<\/li>\n<li>CSV export and settings import\/export<\/li>\n<li>Local bundled frontend assets (no CDN required)<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>no-cookie-analytics-by-arfa<\/code> folder to <code>\/wp-content\/plugins\/<\/code> (or install through the\nWordPress plugin installer).<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen.<\/li>\n<li>Open the <strong>Analytics<\/strong> menu in the admin area.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20set%20cookies%3F\"><h3>Does this plugin set cookies?<\/h3><\/dt>\n<dd><p>No. Tracking is performed on the server when pages are requested.<\/p><\/dd>\n<dt id=\"where%20is%20data%20stored%3F\"><h3>Where is data stored?<\/h3><\/dt>\n<dd><p>In a custom table in your WordPress database (<code>wp_ncaba_hits<\/code> by default).<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.9<\/h4>\n\n<ul>\n<li>Redesigned the admin dashboard and reports with a refreshed blue accent color and plain CSS only (no\nexternal framework, so there's no risk of conflicting with other plugins' styles). Charts (visitors trend,\npage views trend, country donut) now animate on load\/refresh with styled tooltips.<\/li>\n<li>Redesigned KPI stat tiles with period-over-period percentage change badges, comparing each metric to the\nimmediately preceding period of equal length (e.g. this week vs. last week).<\/li>\n<li>Added a \"Page Views Overview\" chart alongside Visitors Overview, showing total tracked page views over the\nselected range (as opposed to unique visitors).<\/li>\n<li>Added a 404 Report (Analytics \u2192 404 Report) listing missing pages visitors hit, with hit counts and\nlast-seen times, to help find broken links to fix or redirect.<\/li>\n<li>Added a per-post Analytics meta box in the editor sidebar (Posts, Pages, and other public post types),\nshowing total views, unique visitors, a 30-day change badge, a 14-day views sparkline, and the post's top\nreferrers.<\/li>\n<li>Added UTM campaign tracking (<code>utm_source<\/code>, <code>utm_medium<\/code>, <code>utm_campaign<\/code>) with a new Campaigns Report\n(Analytics \u2192 Campaigns Report) showing visits and visitors grouped by source, medium, and campaign.<\/li>\n<li>Dashboard grid now uses responsive layout classes instead of inline styles, so cards stack properly on\nnarrow screens instead of being squeezed. Report tables now scroll horizontally on small screens instead\nof overflowing the page. Settings screen now uses the same card layout and typography as the rest of the\nplugin.<\/li>\n<li>KPI stat tiles and the realtime counter now animate (\"count up\") when values change instead of jumping\ninstantly. Added a subtle live-activity pulse indicator to the Realtime card and dashboard widget.<\/li>\n<li>Fixed the WordPress Dashboard \"Quick View\" widget never loading its stylesheet (it only loaded on the\nplugin's own admin screens), so the widget now renders styled instead of as plain unstyled text.<\/li>\n<li>Fixed the bounce-rate \"quality\" tag not updating color after a live dashboard refresh, and a color-palette\nmismatch between the initial server-rendered country legend and the JS-rendered legend after a refresh.<\/li>\n<li>Moved front-end tracking from the <code>init<\/code> hook to <code>template_redirect<\/code> so conditional tags like <code>is_404()<\/code>\nand <code>get_queried_object_id()<\/code> are reliable at tracking time \u2014 the main query hasn't run yet at <code>init<\/code>. This\nalso improves <code>post_id<\/code> tracking accuracy used by the new per-post meta box.<\/li>\n<li>Added <code>is_404<\/code>, <code>post_id<\/code> (indexed), and <code>utm_source<\/code>\/<code>utm_medium<\/code>\/<code>utm_campaign<\/code> (indexed) columns to the\nhits table to support the new reports and meta box.<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Dashboard: redesigned info tooltips to use Dashicons with cleaner markup and tooltip text via CSS <code>::after<\/code>.<\/li>\n<li>Dashboard: Visitors Overview chart now shows hourly data when the \"Last 24 hours\" filter is selected.<\/li>\n<li>Fixed hourly chart data accuracy by bucketing visits in the WordPress site timezone.<\/li>\n<li>Improved country detection with more server geo headers, better proxy IP resolution, and optional\nexternal lookup via ipapi.co with ipwho.is fallback (removed browser-language country guessing).<\/li>\n<li>Fixed recent activity timestamps by storing hits in site time and formatting relative times correctly.<\/li>\n<li>Settings: added role-based tracking exclusion with a custom searchable multiselect when \"Skip tracking\nfor logged-in users\" is enabled.<\/li>\n<li>Admin notices (including warnings) now render before the analytics layout wrapper to avoid layout issues.<\/li>\n<li>Tracking now records page paths with query strings (for example <code>\/blog?123456<\/code>) as separate entries in reports.<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Removed UTF-8 byte order marks (BOM) from PHP sources so activation no longer sends accidental\noutput to the browser.<\/li>\n<li>Uninstall: reliable table drop, clear all related and legacy cron hooks, and remove cached\ngeo lookup transients.<\/li>\n<li>Deactivation: clear legacy cleanup cron hook names in addition to the canonical event.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Renamed plugin to \"No Cookie Analytics \u2013 By Arfa\"; text domain and translation template are\n  no-cookie-analytics-by-arfa (Domain Path: <code>\/languages<\/code>).<\/li>\n<li>Main bootstrap file is <code>no-cookie-analytics-by-arfa.php<\/code>; directory slug <code>no-cookie-analytics-by-arfa<\/code>.<\/li>\n<li>PHP class and constant prefix <code>NCABA_*<\/code> (e.g. <code>NCABA_VERSION<\/code>, <code>NCABA_Activator<\/code>); runtime\nidentifiers use lowercase <code>ncaba_*<\/code> \/ <code>ncaba-<\/code> (database table <code>{prefix}ncaba_hits<\/code>, options,\nhooks, AJAX, and asset handles). Legacy <code>cfaba_*<\/code>, <code>cfba_*<\/code>, and mistaken <code>NCABA_*<\/code> option keys\nor table names migrate automatically on upgrade.<\/li>\n<li>Plugin URI points to a reliable HTTPS profile page; localized admin strings and dashboard JS\nescaping improvements.<\/li>\n<li>Bumped tested-up-to header for current WordPress.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Previous branding and slug iteration; see older releases for detail.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Raised minimum WordPress version to 6.2 for safe <code>%i<\/code> identifier placeholders in\n  $wpdb-&gt;prepare().<\/li>\n<li>Hardened admin and cron SQL (prepared statements, <code>esc_like()<\/code> for <code>LIKE<\/code> patterns).<\/li>\n<li>Replaced <code>parse_url()<\/code> with <code>wp_parse_url()<\/code>; removed redundant <code>fclose()<\/code> on export stream.<\/li>\n<li>Settings import notices use per-user transients; validated upload temp files with\n  is_uploaded_file().<\/li>\n<li>Added readme short description; direct-access guard on settings view template.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Bundled Chart.js and Poppins assets locally (removed CDN dependency).<\/li>\n<li>Added explicit admin consent toggle for external geolocation lookup.<\/li>\n<li>Updated privacy disclosure and reviewer-oriented readme details.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Improved admin UI and tooltip behavior.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Added richer visitor identity and dashboard\/report improvements.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Privacy-focused analytics with server-side tracking, dashboard reports, and no frontend cookies.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/310768","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=310768"}],"author":[{"embeddable":true,"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/arfarehman"}],"wp:attachment":[{"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=310768"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=310768"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=310768"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=310768"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=310768"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=310768"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}