{"id":259377,"date":"2026-02-01T19:33:11","date_gmt":"2026-02-01T19:33:11","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/sqmviews\/"},"modified":"2026-03-17T16:21:27","modified_gmt":"2026-03-17T16:21:27","slug":"sqm-views","status":"publish","type":"plugin","link":"https:\/\/fr.wordpress.org\/plugins\/sqm-views\/","author":23279734,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.2.4","stable_tag":"1.2.4","tested":"6.9.4","requires":"6.2","requires_php":"8.1","requires_plugins":null,"header_name":"SQMViews","header_author":"Pavel Khloponin","header_description":"Lightweight page view tracking and engagement analytics with interactive dashboards. No external services, privacy-focused.","assets_banners_color":"","last_updated":"2026-03-17 16:21:27","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/searchquerymaster.com\/sqm-views","header_author_uri":"https:\/\/github.com\/pkhlop","rating":0,"author_block_rating":0,"active_installs":0,"downloads":157,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.9":{"tag":"1.1.9","author":"schqm","date":"2026-02-01 19:31:18"},"1.2.4":{"tag":"1.2.4","author":"schqm","date":"2026-03-17 16:21:27"}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.9","1.2.4"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3484943,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3484943,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3484943,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3484943,"resolution":"4","location":"assets","locale":""}},"screenshots":{"1":"Interactive analytics dashboard with D3.js visualizations showing page view trends, engagement metrics, and filtering options","2":"Tracking settings page for configuring which post types and taxonomies to track","3":"Processing settings page showing cron status, scheduled runs, and manual processing options","4":"Statistics overview displaying total records, recent activity, and active endpoint configuration"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[232,3283,3280,396],"plugin_category":[36,54],"plugin_contributors":[255044],"plugin_business_model":[],"class_list":["post-259377","plugin","type-plugin","status-publish","hentry","plugin_tags-analytics","plugin_tags-metrics","plugin_tags-page-views","plugin_tags-privacy","plugin_category-analytics","plugin_category-security-and-spam-protection","plugin_contributors-schqm","plugin_committers-schqm"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/sqm-views.svg","icon_2x":false,"generated":true},"screenshots":[{"src":"https:\/\/ps.w.org\/sqm-views\/assets\/screenshot-1.png?rev=3484943","caption":"Interactive analytics dashboard with D3.js visualizations showing page view trends, engagement metrics, and filtering options"},{"src":"https:\/\/ps.w.org\/sqm-views\/assets\/screenshot-2.png?rev=3484943","caption":"Tracking settings page for configuring which post types and taxonomies to track"},{"src":"https:\/\/ps.w.org\/sqm-views\/assets\/screenshot-3.png?rev=3484943","caption":"Processing settings page showing cron status, scheduled runs, and manual processing options"},{"src":"https:\/\/ps.w.org\/sqm-views\/assets\/screenshot-4.png?rev=3484943","caption":"Statistics overview displaying total records, recent activity, and active endpoint configuration"}],"raw_content":"<!--section=description-->\n<p><strong>SQMViews<\/strong> is a simple and lightweight tracking and analytics plugin that helps you understand how visitors interact with your WordPress content\u2014without sending data to third-party services.\nPlugin adds very little overhead, capable of tracking millions of page views per day on a moderately sized website.\nPlugin includes sqm-views-pages.php drop-in script installation (Fast endpoint) to collect pageviews without loading WordPress core, reducing pageview request from 250 ms to 5 ms. If drop-in installation is not possible, the plugin falls back to the WordPress call (API endpoint).<\/p>\n\n<h4>Key Features<\/h4>\n\n<p><strong>Tracking &amp; Analytics:<\/strong><\/p>\n\n<ul>\n<li>Near real-time page view tracking<\/li>\n<li>Engagement metrics (time on page, active time)<\/li>\n<li>Shows user activity (clicks, scrolls, etc.) with privacy-friendly event counting<\/li>\n<li>Interactive analytics dashboard with D3.js visualizations<\/li>\n<li>Historical data with daily aggregation<\/li>\n<li>Filter by date range, content type, and more<\/li>\n<\/ul>\n\n<p><strong>Performance:<\/strong><\/p>\n\n<ul>\n<li>Ultra-fast tracking endpoint (bypasses a core load)<\/li>\n<li>Minimal overhead (~5ms per request with the drop-in script)<\/li>\n<li>File-based batch processing (no database requests during the pageview event collection, only during cron processing)<\/li>\n<li>Efficient data storage with automatic archiving<\/li>\n<li>Configurable background processing via WP-Cron<\/li>\n<\/ul>\n\n<p><strong>Drop-in script<\/strong>\n* Created to minimize overhead\n* Uses exactly the same code as the API endpoint except two hooks for config modification (sqm_views_ping_interval, sqm_views_session_timeout)\n* Run strict JSON request schema validation to minimize attack surface.\n* Receives request, run validation, add it to a file for the later batch processing. Very low memory and CPU footprint.<\/p>\n\n<p><strong>Pageview lifetime<\/strong>\nJS code will send an <code>init<\/code> event, followed by <code>ping<\/code> events and completed by <code>exit<\/code> or <code>timeout<\/code> events. Unique ID is returned during <code>init<\/code> used for all the following events. During cron processing all the events with the same IDs are combined into a single pageview and stored in the database.<\/p>\n\n<p><strong>Privacy &amp; Control:<\/strong><\/p>\n\n<ul>\n<li>100% privacy-focused (no external services)<\/li>\n<li>All data stays on your server<\/li>\n<li>Encrypted tracking payloads (you don't need to reveal everything you track)<\/li>\n<li>Full control over what gets tracked<\/li>\n<li>GDPR-friendly (no personal data collected by default), we focus on pageviews<\/li>\n<\/ul>\n\n<p><strong>Flexibility:<\/strong><\/p>\n\n<ul>\n<li>Track custom post types and taxonomies<\/li>\n<li>30+ developer hooks for customization<\/li>\n<li>WP-CLI commands for automation<\/li>\n<li>Translation-ready (i18n)<\/li>\n<li>REST API for integrations<\/li>\n<\/ul>\n\n<h4>What Gets Tracked?<\/h4>\n\n<p><strong>Content Types:<\/strong>\n* Posts and pages (configurable)\n* Custom post types\n* Category and tag archives\n* Custom taxonomy archives\n* Author archives\n* Date archives\n* Home page\n* Search results<\/p>\n\n<p><strong>Engagement Metrics:<\/strong>\n* <strong>Count<\/strong> - Total number of views\n* <strong>Time on Page<\/strong> - Total time spent on page\n* <strong>Active Time<\/strong> - Time user was actively engaged\n* <strong>High-Frequency Events<\/strong> - User browsing on the page (scrolling, mouse movement)\n* <strong>Low-Frequency Events<\/strong> - Deliberate actions (clicks, touches, typing)<\/p>\n\n<h4>Perfect For<\/h4>\n\n<ul>\n<li><strong>Publishers<\/strong> monitoring content performance<\/li>\n<li><strong>Marketers<\/strong> analyzing user engagement<\/li>\n<li><strong>Developers<\/strong> needing custom analytics<\/li>\n<li><strong>Privacy-conscious<\/strong> site owners<\/li>\n<li><strong>Anyone<\/strong> wanting Google Analytics alternative<\/li>\n<\/ul>\n\n<h4>How It Works<\/h4>\n\n<ol>\n<li><strong>Lightweight JavaScript tracker<\/strong> injected on tracked pages (inline or external)<\/li>\n<li><strong>Fast endpoint<\/strong> receives tracking data<\/li>\n<li><strong>File-based storage for raw data<\/strong> writes data to JSONL files (no database overhead)<\/li>\n<li><strong>Background processing<\/strong> via WP-Cron aggregates data hourly\/daily and put them in the database<\/li>\n<li><strong>Interactive dashboard<\/strong> displays charts and metrics<\/li>\n<\/ol>\n\n<h4>Extensibility<\/h4>\n\n<p><strong>30+ Developer Hooks:<\/strong><\/p>\n\n<ul>\n<li><strong>Frontend Hooks<\/strong> - Control what gets tracked and how<\/li>\n<li><strong>Processing Hooks<\/strong> - Modify data before database storage<\/li>\n<li><strong>REST API Hooks<\/strong> - Customize chart data and permissions<\/li>\n<li><strong>Activation Hooks<\/strong> - Adjust default settings and storage<\/li>\n<\/ul>\n\n<h4>WP-CLI Support<\/h4>\n\n<pre><code># Process statistics manually\nwp sqm-views process\n<\/code><\/pre>\n\n<h4>Multisite Compatible<\/h4>\n\n<p>Planned<\/p>\n\n<h4>Why Choose SQMViews?<\/h4>\n\n<p><strong>vs. External Analytics:<\/strong>\n* No external JavaScript libraries\n* No tracking cookies required\n* No data sent to Google servers\n* Faster page loads (no external requests)\n* Complete data ownership<\/p>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 6.0 or higher<\/li>\n<li>PHP 8.1 or higher (PHP 8.2+ recommended)<\/li>\n<li>PHP Sodium extension (for encryption)<\/li>\n<li>MySQL 5.6 or higher \/ MariaDB 10.0 or higher<\/li>\n<li>Write permissions for <code>wp-content\/uploads\/sqm-views<\/code> directory<\/li>\n<\/ul>\n\n<h4>Credits<\/h4>\n\n<p>SearchQueryMaster.com team<\/p>\n\n<p>Powered by:\n* D3.js for visualizations\n* WordPress CMS\n* Sodium crypto library<\/p>\n\n<h3>Privacy Policy<\/h3>\n\n<p>SQMViews is designed with privacy in mind. The plugin:<\/p>\n\n<p><strong>Does NOT collect:<\/strong>\n* Personal information\n* Cookies not required for tracking\n* Sessions - there is no session tracking at the moment, only pageviews tracking\n* Usernames or emails\n* Browser fingerprints<\/p>\n\n<p><strong>IP address and user agents are:<\/strong>\n* collected in raw log files for troubleshooting, spam, bot, and system abuse prevention\n* removed from aggregated data and not used anywhere else<\/p>\n\n<p><strong>Does collect:<\/strong>\n* Page URLs being viewed\n* Tags and categories on the current page\n* Timestamps of visits\n* User interaction metrics (scrolls, clicks) counter\n* Browser user-agent string (for bot filtering)\n* Referrer URL (if available)<\/p>\n\n<p><strong>Data storage:<\/strong>\n* All data stored on your WordPress server\n* No data sent to external services\n* You control data retention and deletion<\/p>\n\n<p><strong>Your responsibilities:<\/strong>\n* Update your site's privacy policy to mention analytics tracking\n* Implement cookie consent if required in your jurisdiction\n* Handle data subject access requests per GDPR\/CCPA requirements\n* Configure the plugin to exclude personal data if necessary<\/p>\n\n<h3>Support<\/h3>\n\n<p><strong>Free Support:<\/strong>\n* <a href=\"https:\/\/wordpress.org\/support\/plugin\/sqm-views\/\">WordPress.org Support Forum<\/a><\/p>\n\n<h3>Developer Notes<\/h3>\n\n<p><strong>Architecture:<\/strong>\n* Namespaced PHP code (<code>SQMViews\\<\/code>)\n* PSR-4 autoloading via Composer\n* REST API endpoints for integrations\n* File-based queueing system<\/p>\n\n<p><strong>Database Tables:<\/strong>\n* <code>sqm_views_trackables<\/code> - Catalog of tracked content\n* <code>sqm_views_events<\/code> - Event type definitions\n* <code>sqm_views_records<\/code> - Individual tracking records\n* <code>sqm_views_daily<\/code> - Daily aggregated statistics<\/p>\n\n<p><strong>Hooks:<\/strong><\/p>\n\n<p><strong>Hooks Reference:<\/strong><\/p>\n\n<p><em>Filters (apply_filters):<\/em><\/p>\n\n<p><strong>Tracking &amp; Frontend:<\/strong>\n* <code>sqm_views_should_track<\/code> - Control whether tracking should occur (2 params: $should_track, $data)\n* <code>sqm_views_tracking_data<\/code> - Modify tracking data before encryption (1 param: $tracking_data)\n* <code>sqm_views_trackable_post_types<\/code> - Customize which post types can be tracked (1 param: $post_types)\n* <code>sqm_views_trackable_taxonomies<\/code> - Customize which taxonomies can be tracked (1 param: $taxonomies)\n* <code>sqm_views_data_taxonomies<\/code> - Modify taxonomies included in tracking data (1 param: $taxonomies)\n* <code>sqm_views_encryption_key<\/code> - Override the encryption key (1 param: $key)\n* <code>sqm_views_tracker_endpoint<\/code> - Customize tracking endpoint URL (2 params: $endpoint, $saved_endpoint)\n* <code>sqm_views_minified_js<\/code> - Control whether to use minified tracker JS (1 param: $use_min)\n* <code>sqm_views_tracker_script_path<\/code> - Customize the tracker script file path (2 params: $path, $use_min)\n* <code>sqm_views_tracker_script_url<\/code> - Customize tracker script URL (2 params: $url, $use_min)\n* <code>sqm_views_inline_js<\/code> - Control whether to inline tracker JS (1 param: $use_inline)\n* <code>sqm_views_show_debug_comment<\/code> - Show debug HTML comment (1 param: $show)<\/p>\n\n<p><strong>Processing:<\/strong>\n* <code>sqm_views_raw_record<\/code> - Filter raw record data during processing (1 param: $data)\n* <code>sqm_views_calculated_metrics<\/code> - Modify calculated metrics (2 params: $metrics, $records)\n* <code>sqm_views_session_timeout<\/code> - Customize session inactivity timeout (1 param: $timeout)\n* <code>sqm_views_ping_interval<\/code> - Customize the ping interval for session tracking (1 param: $interval)<\/p>\n\n<p><strong>Dashboard:<\/strong>\n* <code>sqm_views_dashboard_minified_js<\/code> - Control minified JS for dashboard (1 param: $use_min)\n* <code>sqm_views_dashboard_script_path<\/code> - Dashboard script file path (2 params: $path, $use_min)\n* <code>sqm_views_dashboard_script_url<\/code> - Dashboard script URL (2 params: $url, $use_min)\n* <code>sqm_views_dashboard_inline_js<\/code> - Control inline JS for dashboard (1 param: $use_inline)\n* <code>sqm_views_dashboard_default_filters<\/code> - Customize default dashboard filters (1 param: $defaults)<\/p>\n\n<p><strong>REST API:<\/strong>\n* <code>sqm_views_rest_permissions<\/code> - Customize REST API permissions (1 param: $capability)\n* <code>sqm_views_rest_chart_data<\/code> - Modify chart data in REST response (2 params: $data, $request)\n* <code>sqm_views_chart_cache_expiration<\/code> - Customize chart cache expiration time (1 param: $seconds)\n* <code>sqm_views_rest_chart_filters<\/code> - Customize available chart filters (1 param: $filters)<\/p>\n\n<p><strong>Activation &amp; Settings:<\/strong>\n* <code>sqm_views_enable_dropin<\/code> - Enable\/disable drop-in file creation (1 param: $enable)\n* <code>sqm_views_default_settings<\/code> - Customize default plugin settings (1 param: $settings)\n* <code>sqm_views_data_directory<\/code> - Customize data storage directory (1 param: $directory)<\/p>\n\n<p><em>Actions (do_action):<\/em><\/p>\n\n<p><strong>Activation &amp; Upgrade:<\/strong>\n* <code>sqm_views_activated<\/code> - Fires after plugin activation (0 params)\n* <code>sqm_views_upgraded<\/code> - Fires after plugin upgrade (2 params: $from_version, $to_version)\n* <code>sqm_views_before_upgrade<\/code> - Fires before the upgrade process (2 params: $from_version, $to_version)\n* <code>sqm_views_after_upgrade<\/code> - Fires after the upgrade process (2 params: $from_version, $to_version)\n* <code>sqm_views_uninstalled<\/code> - Fires during plugin uninstallation (0 params)<\/p>\n\n<p><strong>Tracking:<\/strong>\n* <code>sqm_views_before_tracker_output<\/code> - Before tracker script output (2 params: $tracking_data, $tracker_config)\n* <code>sqm_views_after_tracker_output<\/code> - After tracker script output (1 param: $tracking_data)<\/p>\n\n<p><strong>Processing:<\/strong>\n* <code>sqm_views_before_processing<\/code> - Before statistics processing starts (1 param: $verbose)\n* <code>sqm_views_after_processing<\/code> - After statistics processing completes (1 param: $processor_instance)\n* <code>sqm_views_record_processed<\/code> - After individual record processed (1 param: $record)\n* <code>sqm_views_daily_aggregated<\/code> - After daily aggregation completes (1 param: $result)<\/p>\n\n<p><strong>Cache:<\/strong>\n* <code>sqm_views_chart_cache_invalidated<\/code> - When chart cache is cleared (0 params)<\/p>\n\n<p><strong>Examples<\/strong>\n<strong>Frontend Hooks - Control Tracking Behavior:<\/strong><\/p>\n\n<p>Exclude logged-in administrators from tracking (will not work properly if you cache pages or use CDN):<\/p>\n\n<pre><code>add_filter( 'sqm_views_should_track', function( $should_track, $data ) {\n    if ( current_user_can( 'manage_options' ) ) {\n        return false;\n    }\n    return $should_track;\n}, 10, 2 );\n<\/code><\/pre>\n\n<p>Modify tracking data before sending:<\/p>\n\n<pre><code>add_filter( 'sqm_views_tracking_data', function( $data ) {\n    \/\/ Add custom metadata\n    $data['custom_field'] = get_post_meta( get_the_ID(), 'my_field', true );\n    return $data;\n} );\n<\/code><\/pre>\n\n<p>Customize which post types are tracked (overrides UI settings):<\/p>\n\n<pre><code>add_filter( 'sqm_views_tracked_post_types', function( $post_types ) {\n    \/\/ Add custom post type\n    $post_types[] = 'portfolio';\n    return $post_types;\n} );\n<\/code><\/pre>\n\n<p><strong>Processing Hooks - Modify Data Before Storage:<\/strong><\/p>\n\n<p>Calculate custom engagement metrics:<\/p>\n\n<pre><code>add_filter( 'sqm_views_calculated_metrics', function( $metrics, $records ) {\n    \/\/ Calculate engagement score\n    $metrics['engagement_score'] = ( $metrics['active'] \/ max( 1, $metrics['on_page'] ) ) * 100;\n\n    \/\/ Calculate bounce rate indicator\n    $metrics['likely_bounce'] = $metrics['on_page'] &lt; 5 ? 1 : 0;\n\n    return $metrics;\n}, 10, 2 );\n<\/code><\/pre>\n\n<p>Filter records before processing:<\/p>\n\n<pre><code>add_filter( 'sqm_views_before_process_record', function( $record ) {\n    \/\/ Exclude specific URLs\n    if ( strpos( $record['url'], '\/test-page\/' ) !== false ) {\n        return null; \/\/ Skip this record\n    }\n    return $record;\n} );\n<\/code><\/pre>\n\n<p><strong>REST API Hooks - Customize Chart Data:<\/strong><\/p>\n\n<p>Modify chart permissions:<\/p>\n\n<pre><code>add_filter( 'sqm_views_rest_permissions', function( $has_permission ) {\n    \/\/ Allow editors to view analytics\n    return current_user_can( 'edit_posts' );\n} );\n<\/code><\/pre>\n\n<p><strong>Activation Hooks - Adjust Default Settings:<\/strong><\/p>\n\n<p>Set custom default settings on activation:<\/p>\n\n<pre><code>add_action( 'sqm_views_activated', function() {\n    \/\/ Set default processing interval\n    update_option( 'sqm_views_cron_interval', 'hourly' );\n\n    \/\/ Enable external JavaScript by default\n    update_option( 'sqm_views_js_mode', 'external' );\n} );\n<\/code><\/pre>\n\n<p><strong>Cron Hooks - Custom Processing Schedules:<\/strong><\/p>\n\n<p>Run custom tasks after processing:<\/p>\n\n<pre><code>add_action( 'sqm_views_after_process', function( $processed_count ) {\n    \/\/ Send notification if processing high volume\n    if ( $processed_count &gt; 10000 ) {\n        wp_mail(\n            get_option( 'admin_email' ),\n            'SQMViews High Volume Alert',\n            sprintf( 'Processed %d records', $processed_count )\n        );\n    }\n}, 10, 1 );\n<\/code><\/pre>\n\n<p><strong>REST API:<\/strong>\n* <code>POST \/wp-json\/sqm-views\/v1\/track<\/code> - Submit tracking data through WordPress API endpoint\n* <code>POST sqm-views-pages.php<\/code> - Submit tracking data through Fast endpoint\n* <code>GET \/wp-json\/sqm-views\/v1\/charts<\/code> - Retrieve chart data<\/p>\n\n<p><strong>WP-CLI:<\/strong>\n* <code>wp sqm-views process<\/code> - Process pending statistics<\/p>\n\n<p><strong>License:<\/strong><\/p>\n\n<p>GPLv3. See LICENSE file for details.<\/p>\n\n<!--section=installation-->\n<h4>Automatic Installation<\/h4>\n\n<ol>\n<li>Log in to your WordPress admin panel<\/li>\n<li>Navigate to <strong>Plugins \u2192 Add New<\/strong><\/li>\n<li>Search for \"SQMViews\"<\/li>\n<li>Click <strong>Install Now<\/strong> then <strong>Activate<\/strong><\/li>\n<li>Go to <strong>SQMViews \u2192 Tracking Settings<\/strong> to configure<\/li>\n<\/ol>\n\n<h4>Manual Installation<\/h4>\n\n<ol>\n<li>Download the plugin zip file<\/li>\n<li>Log in to your WordPress admin panel<\/li>\n<li>Navigate to <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong><\/li>\n<li>Choose the zip file and click <strong>Install Now<\/strong><\/li>\n<li>Click <strong>Activate Plugin<\/strong><\/li>\n<li>Go to <strong>SQMViews \u2192 Tracking Settings<\/strong> to configure<\/li>\n<\/ol>\n\n<h4>First Steps After Installation<\/h4>\n\n<ol>\n<li><p><strong>Configure Tracking<\/strong> - Go to <strong>SQMViews \u2192 Tracking Settings<\/strong><\/p>\n\n<ul>\n<li>Select which post types to track<\/li>\n<li>Choose taxonomy archives to monitor<\/li>\n<li>Select a JavaScript loading method (inline\/external)<\/li>\n<\/ul><\/li>\n<li><p><strong>Set Processing Schedule<\/strong> - Go to <strong>SQMViews \u2192 Processing<\/strong><\/p>\n\n<ul>\n<li>Choose a cron interval (hourly recommended)<\/li>\n<li>Verify endpoint status (fast endpoint preferred)<\/li>\n<\/ul><\/li>\n<li><p><strong>View Analytics<\/strong> (Once you have enough data) - Go to <strong>SQMViews \u2192 Statistics<\/strong><\/p>\n\n<ul>\n<li>Explore interactive dashboard<\/li>\n<li>Filter by date range<\/li>\n<li>Compare different metrics<\/li>\n<\/ul><\/li>\n<\/ol>\n\n<h4>Performance Optimization<\/h4>\n\n<p>For best performance on high-traffic sites:<\/p>\n\n<ol>\n<li><p><strong>Enable Fast Endpoint<\/strong> (automatic on most hosts)<\/p>\n\n<ul>\n<li>Copy sqm-views-pages.php in the WordPress root folder (next to wp-config.php)<\/li>\n<li>Bypasses WordPress load<\/li>\n<li>Reduces tracking overhead from ~250ms to ~5ms<\/li>\n<li>Check status in <strong>Processing Settings<\/strong><\/li>\n<\/ul><\/li>\n<li><p><strong>Use External JavaScript<\/strong> (recommended for caching)<\/p>\n\n<ul>\n<li>Set in <strong>Tracking Settings<\/strong><\/li>\n<li>Allows browser caching<\/li>\n<li>Slightly faster page loads<\/li>\n<\/ul><\/li>\n<li><p><strong>Adjust Cron Interval<\/strong><\/p>\n\n<ul>\n<li>Hourly: Good for most sites<\/li>\n<li>15 minutes: High-traffic sites needing real-time data<\/li>\n<li>6 hours\/Daily: Low-traffic sites saving resources<\/li>\n<\/ul><\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20send%20data%20to%20external%20servers%3F\"><h3>Does this plugin send data to external servers?<\/h3><\/dt>\n<dd><p><strong>No!<\/strong> All data stays on your server. No data is sent to any third-party tracking services. You have complete control and ownership of your analytics data.<\/p><\/dd>\n<dt id=\"will%20this%20slow%20down%20my%20website%3F\"><h3>Will this slow down my website?<\/h3><\/dt>\n<dd><p><strong>No!<\/strong> The plugin is optimized for performance:<\/p>\n\n<ul>\n<li><strong>Fast tracking endpoint<\/strong> bypasses WordPress load (~5ms response time).<\/li>\n<li>Conventional <strong>API endpoint<\/strong> uses WordPress REST API (~250ms response time).<\/li>\n<li><strong>Asynchronous JavaScript<\/strong> doesn't block page rendering.<\/li>\n<li><strong>File-based storage<\/strong> during tracking (zero database write regarding of your traffic).<\/li>\n<li><strong>Background processing<\/strong> via WP-Cron through batch writes into a separate table (minimal impact on the database performance and visitors).<\/li>\n<\/ul>\n\n<p>Most sites should see no noticeable performance impact.<\/p><\/dd>\n<dt id=\"is%20it%20gdpr%20compliant%3F\"><h3>Is it GDPR compliant?<\/h3><\/dt>\n<dd><p>The plugin is <strong>GDPR-friendly<\/strong> by default:<\/p>\n\n<ul>\n<li>No personal data collected (IP present in the raw log files to prevent abuse and removed from aggregated data, no cookies)<\/li>\n<li>No data sent to external services<\/li>\n<li>All data stored on your server<\/li>\n<li>You control data retention policies<\/li>\n<\/ul>\n\n<p>However, you're responsible for:<\/p>\n\n<ul>\n<li>Implementing proper consent mechanisms if required<\/li>\n<li>Updating your privacy policy<\/li>\n<li>Handling data subject access requests<\/li>\n<\/ul><\/dd>\n<dt id=\"can%20i%20track%20custom%20post%20types%3F\"><h3>Can I track custom post types?<\/h3><\/dt>\n<dd><p><strong>Yes!<\/strong> Go to <strong>SQMViews \u2192 Tracking Settings<\/strong> and select any registered post types. The plugin automatically detects all public post types on your site, or use hook <code>sqm_views_trackable_post_types<\/code><\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20caching%20plugins%3F\"><h3>Does it work with caching plugins?<\/h3><\/dt>\n<dd><p><strong>Yes!<\/strong> The JavaScript tracker should work seamlessly with most of the caching plugins and services including:<\/p>\n\n<ul>\n<li>WP Super Cache<\/li>\n<li>W3 Total Cache<\/li>\n<li>WP Rocket<\/li>\n<li>LiteSpeed Cache<\/li>\n<li>Cloudflare<\/li>\n<li>Cloudfront<\/li>\n<\/ul>\n\n<p>The tracking code runs on the client-side, so cached pages are tracked properly.<\/p><\/dd>\n<dt id=\"can%20i%20exclude%20certain%20users%20from%20tracking%3F\"><h3>Can I exclude certain users from tracking?<\/h3><\/dt>\n<dd><p><strong>Yes!<\/strong> Use the <code>sqm_views_should_track<\/code> filter hook:<\/p>\n\n<pre><code>add_filter( 'sqm_views_should_track', function( $should_track, $data ) {\n    \/\/ Exclude logged-in administrators\n    if ( current_user_can( 'manage_options' ) ) {\n        return false;\n    }\n    return $should_track;\n}, 10, 2 );\n<\/code><\/pre>\n\n<p>And adjust your CDN and caching plugins to exclude logged-in users from caching.<\/p><\/dd>\n<dt id=\"how%20much%20disk%20space%20does%20it%20use%3F\"><h3>How much disk space does it use?<\/h3><\/dt>\n<dd><p>Storage requirements depend on traffic (YMMV):<\/p>\n\n<ul>\n<li><strong>Low traffic<\/strong> (1,000 views\/day): ~50 MB\/month<\/li>\n<li><strong>Medium traffic<\/strong> (10,000 views\/day): ~500 MB\/month<\/li>\n<li><strong>High traffic<\/strong> (100,000 views\/day): ~5 GB\/month<\/li>\n<li>TBD based on actual usage<\/li>\n<\/ul>\n\n<p>Raw files are automatically archived into daily files and can be safely deleted after processing.\nWe recommend storing archived files in a cold storage in case you want to replay the processing and aggregation, to remove bot traffic or extend data with more information.<\/p><\/dd>\n<dt id=\"can%20i%20import%2Fexport%20the%20data%3F\"><h3>Can I import\/export the data?<\/h3><\/dt>\n<dd><p>Planned functionality.<\/p><\/dd>\n<dt id=\"what%27s%20the%20difference%20between%20%22active%20time%22%20and%20%22time%20on%20page%22%3F\"><h3>What's the difference between \"active time\" and \"time on page\"?<\/h3><\/dt>\n<dd><ul>\n<li><strong>Time on Page<\/strong>: Total time from page load to exit (includes idle time)<\/li>\n<li><strong>Active Time<\/strong>: Time when user is actively engaging (scrolling, clicking, typing), checked every 10s.<\/li>\n<\/ul>\n\n<p>Active time gives you better insight into actual engagement vs. just having a tab open.<\/p><\/dd>\n<dt id=\"can%20i%20track%20non-wordpress%20pages%3F\"><h3>Can I track non-WordPress pages?<\/h3><\/dt>\n<dd><p>It is possible, see the setup used to track Home page and Search results.<\/p><\/dd>\n<dt id=\"where%20is%20the%20data%20stored%3F\"><h3>Where is the data stored?<\/h3><\/dt>\n<dd><p>Analytics data is stored in two places:<\/p>\n\n<ol>\n<li><strong>Raw files<\/strong>: <code>wp-content\/uploads\/sqm-views\/raw\/*.jsonl<\/code> (temporary)<\/li>\n<li><strong>Database<\/strong>: Four WordPress database tables (<code>sqm_views*<\/code>)<\/li>\n<\/ol>\n\n<p>Raw files are automatically processed and archived by WP-Cron.<\/p><\/dd>\n<dt id=\"how%20do%20i%20uninstall%20the%20plugin%3F\"><h3>How do I uninstall the plugin?<\/h3><\/dt>\n<dd><p><strong>Deactivation<\/strong> keeps all data intact.<\/p>\n\n<p><strong>Deletion<\/strong> removes all plugin files, database tables, and settings permanently. Make sure to export any data you want to keep before deleting.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<p>See separate file CHANGELOG.md<\/p>","raw_excerpt":"Lightweight, privacy-focused plugin for real-time page view analytics. All data stays on your server. Focuses on PageViews tracking.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/259377","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=259377"}],"author":[{"embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/schqm"}],"wp:attachment":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=259377"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=259377"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=259377"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=259377"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=259377"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=259377"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}