SQMViews Wordpress Plugin - Rating, Reviews, Demo & Download

SQMViews Wordpress Plugin - Rating, Reviews, Demo & Download
No ratings yet
Free
Follow for free plugins, new theme releases and theme news

Plugin Description

SQMViews is a simple and lightweight tracking and analytics plugin that helps you understand how visitors interact with your WordPress content—without sending data to third-party services.
Plugin adds very little overhead, capable of tracking millions of page views per day on a moderately sized website.
Plugin 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).

Key Features

Tracking & Analytics:

  • Near real-time page view tracking
  • Engagement metrics (time on page, active time)
  • Shows user activity (clicks, scrolls, etc.) with privacy-friendly event counting
  • Interactive analytics dashboard with D3.js visualizations
  • Historical data with daily aggregation
  • Filter by date range, content type, and more

Performance:

  • Ultra-fast tracking endpoint (bypasses a core load)
  • Minimal overhead (~5ms per request with the drop-in script)
  • File-based batch processing (no database requests during pageview event collection, only during cron processing)
  • Efficient data storage with automatic archiving
  • Configurable background processing via WP-Cron

Drop-in script
* Created to minimize overhead
* Uses exactly the same code as the API endpoint except two hooks for config modification (sqm_views_ping_interval, sqm_views_session_timeout)
* Run strict JSON request schema validation to minimize attack surface.
* Receives request, run validation, add it to a file for the later batch processing. Very low memory and CPU footprint.

Pageview lifetime
JS code will send an init event, followed by ping events and completed by exit or timeout events. Unique ID is returned during init 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.

Privacy & Control:

  • 100% privacy-focused (no external services)
  • All data stays on your server
  • Encrypted tracking payloads (you don’t need to reveal everything you track)
  • Full control over what gets tracked
  • GDPR-friendly (no personal data collected by default), we focus on pageviews

Flexibility:

  • Track custom post types and taxonomies
  • 30+ developer hooks for customization
  • WP-CLI commands for automation
  • Translation-ready (i18n)
  • REST API for integrations

What Gets Tracked?

Content Types:
* Posts and pages (configurable)
* Custom post types
* Category and tag archives
* Custom taxonomy archives
* Author archives
* Date archives
* Home page
* Search results

Engagement Metrics:
* Count – Total number of views
* Time on Page – Total time spent on page
* Active Time – Time user was actively engaged
* High-Frequency Events – User browsing on the page (scrolling, mouse movement)
* Low-Frequency Events – Deliberate actions (clicks, touches, typing)

Perfect For

  • Publishers monitoring content performance
  • Marketers analyzing user engagement
  • Developers needing custom analytics
  • Privacy-conscious site owners
  • Anyone wanting Google Analytics alternative

How It Works

  1. Lightweight JavaScript tracker injected on tracked pages (inline or external)
  2. Fast endpoint receives tracking data
  3. File-based storage for raw data writes data to JSONL files (no database overhead)
  4. Background processing via WP-Cron aggregates data hourly/daily and put them in the database
  5. Interactive dashboard displays charts and metrics

Extensibility

30+ Developer Hooks:

  • Frontend Hooks – Control what gets tracked and how
  • Processing Hooks – Modify data before database storage
  • REST API Hooks – Customize chart data and permissions
  • Activation Hooks – Adjust default settings and storage

WP-CLI Support

# Process statistics manually
wp sqm-views process

Multisite Compatible

Planned

Why Choose SQMViews?

vs External Analytics:
* No external JavaScript libraries
* No tracking cookies required
* No data sent to Google servers
* Faster page loads (no external requests)
* Complete data ownership

Requirements

  • WordPress 6.0 or higher
  • PHP 8.1 or higher (PHP 8.2+ recommended)
  • PHP Sodium extension (for encryption)
  • MySQL 5.6 or higher / MariaDB 10.0 or higher
  • Write permissions for wp-content/uploads/sqm-views directory

Credits

SearchQueryMaster.com team

Powered by:
* D3.js for visualizations
* WordPress CMS
* Sodium crypto library

Privacy Policy

SQMViews is designed with privacy in mind. The plugin:

Does NOT collect:
* Personal information
* Cookies not required for tracking
* Sessions – there is no session tracking at the moment, only pageviews tracking
* Usernames or emails
* Browser fingerprints

IP address and user agents are:
* collected in raw log files for troubleshooting, spam, bot, and system abuse prevention
* removed from aggregated data and not used anywhere else

Does collect:
* Page URLs being viewed
* Tags and categories on the current page
* Timestamps of visits
* User interaction metrics (scrolls, clicks) counter
* Browser user-agent string (for bot filtering)
* Referrer URL (if available)

Data storage:
* All data stored on your WordPress server
* No data sent to external services
* You control data retention and deletion

Your responsibilities:
* Update your site’s privacy policy to mention analytics tracking
* Implement cookie consent if required in your jurisdiction
* Handle data subject access requests per GDPR/CCPA requirements
* Configure the plugin to exclude personal data if necessary

Support

Free Support:
* WordPress.org Support Forum

Developer Notes

Architecture:
* Namespaced PHP code (SQMViews)
* PSR-4 autoloading via Composer
* REST API endpoints for integrations
* File-based queueing system

Database Tables:
* sqm_views_trackables – Catalog of tracked content
* sqm_views_events – Event type definitions
* sqm_views_records – Individual tracking records
* sqm_views_daily – Daily aggregated statistics

Hooks:

Hooks Reference:

Filters (apply_filters):

Tracking & Frontend:
* sqm_views_should_track – Control whether tracking should occur (2 params: $should_track, $data)
* sqm_views_tracking_data – Modify tracking data before encryption (1 param: $tracking_data)
* sqm_views_trackable_post_types – Customize which post types can be tracked (1 param: $post_types)
* sqm_views_trackable_taxonomies – Customize which taxonomies can be tracked (1 param: $taxonomies)
* sqm_views_data_taxonomies – Modify taxonomies included in tracking data (1 param: $taxonomies)
* sqm_views_encryption_key – Override encryption key (1 param: $key)
* sqm_views_tracker_endpoint – Customize tracking endpoint URL (2 params: $endpoint, $saved_endpoint)
* sqm_views_minified_js – Control whether to use minified tracker JS (1 param: $use_min)
* sqm_views_tracker_script_path – Customize tracker script file path (2 params: $path, $use_min)
* sqm_views_tracker_script_url – Customize tracker script URL (2 params: $url, $use_min)
* sqm_views_inline_js – Control whether to inline tracker JS (1 param: $use_inline)
* sqm_views_show_debug_comment – Show debug HTML comment (1 param: $show)

Processing:
* sqm_views_raw_record – Filter raw record data during processing (1 param: $data)
* sqm_views_calculated_metrics – Modify calculated metrics (2 params: $metrics, $records)
* sqm_views_session_timeout – Customize session inactivity timeout (1 param: $timeout)
* sqm_views_ping_interval – Customize ping interval for session tracking (1 param: $interval)

Dashboard:
* sqm_views_dashboard_minified_js – Control minified JS for dashboard (1 param: $use_min)
* sqm_views_dashboard_script_path – Dashboard script file path (2 params: $path, $use_min)
* sqm_views_dashboard_script_url – Dashboard script URL (2 params: $url, $use_min)
* sqm_views_dashboard_inline_js – Control inline JS for dashboard (1 param: $use_inline)
* sqm_views_dashboard_default_filters – Customize default dashboard filters (1 param: $defaults)

REST API:
* sqm_views_rest_permissions – Customize REST API permissions (1 param: $capability)
* sqm_views_rest_chart_data – Modify chart data in REST response (2 params: $data, $request)
* sqm_views_chart_cache_expiration – Customize chart cache expiration time (1 param: $seconds)
* sqm_views_rest_chart_filters – Customize available chart filters (1 param: $filters)

Activation & Settings:
* sqm_views_enable_dropin – Enable/disable drop-in file creation (1 param: $enable)
* sqm_views_default_settings – Customize default plugin settings (1 param: $settings)
* sqm_views_data_directory – Customize data storage directory (1 param: $directory)

Actions (do_action):

Activation & Upgrade:
* sqm_views_activated – Fires after plugin activation (0 params)
* sqm_views_upgraded – Fires after plugin upgrade (2 params: $from_version, $to_version)
* sqm_views_before_upgrade – Fires before upgrade process (2 params: $from_version, $to_version)
* sqm_views_after_upgrade – Fires after upgrade process (2 params: $from_version, $to_version)
* sqm_views_uninstalled – Fires during plugin uninstallation (0 params)

Tracking:
* sqm_views_before_tracker_output – Before tracker script output (2 params: $tracking_data, $tracker_config)
* sqm_views_after_tracker_output – After tracker script output (1 param: $tracking_data)

Processing:
* sqm_views_before_processing – Before statistics processing starts (1 param: $verbose)
* sqm_views_after_processing – After statistics processing completes (1 param: $processor_instance)
* sqm_views_record_processed – After individual record processed (1 param: $record)
* sqm_views_daily_aggregated – After daily aggregation completes (1 param: $result)

Cache:
* sqm_views_chart_cache_invalidated – When chart cache is cleared (0 params)

Examples
Frontend Hooks – Control Tracking Behavior:

Exclude logged-in administrators from tracking (will not work properly if you cache pages or use CDN):

add_filter( 'sqm_views_should_track', function( $should_track, $data ) {
    if ( current_user_can( 'manage_options' ) ) {
        return false;
    }
    return $should_track;
}, 10, 2 );

Modify tracking data before sending:

add_filter( 'sqm_views_tracking_data', function( $data ) {
    // Add custom metadata
    $data['custom_field'] = get_post_meta( get_the_ID(), 'my_field', true );
    return $data;
} );

Customize which post types are tracked (overrides UI settings):

add_filter( 'sqm_views_tracked_post_types', function( $post_types ) {
    // Add custom post type
    $post_types[] = 'portfolio';
    return $post_types;
} );

Processing Hooks – Modify Data Before Storage:

Calculate custom engagement metrics:

add_filter( 'sqm_views_calculated_metrics', function( $metrics, $records ) {
    // Calculate engagement score
    $metrics['engagement_score'] = ( $metrics['active'] / max( 1, $metrics['on_page'] ) ) * 100;

    // Calculate bounce rate indicator
    $metrics['likely_bounce'] = $metrics['on_page'] < 5 ? 1 : 0;

    return $metrics;
}, 10, 2 );

Filter records before processing:

add_filter( 'sqm_views_before_process_record', function( $record ) {
    // Exclude specific URLs
    if ( strpos( $record['url'], '/test-page/' ) !== false ) {
        return null; // Skip this record
    }
    return $record;
} );

REST API Hooks – Customize Chart Data:

Modify chart permissions:

add_filter( 'sqm_views_rest_permissions', function( $has_permission ) {
    // Allow editors to view analytics
    return current_user_can( 'edit_posts' );
} );

Activation Hooks – Adjust Default Settings:

Set custom default settings on activation:

add_action( 'sqm_views_activated', function() {
    // Set default processing interval
    update_option( 'sqm_views_cron_interval', 'hourly' );

    // Enable external JavaScript by default
    update_option( 'sqm_views_js_mode', 'external' );
} );

Cron Hooks – Custom Processing Schedules:

Run custom tasks after processing:

add_action( 'sqm_views_after_process', function( $processed_count ) {
    // Send notification if processing high volume
    if ( $processed_count > 10000 ) {
        wp_mail(
            get_option( 'admin_email' ),
            'SQMViews High Volume Alert',
            sprintf( 'Processed %d records', $processed_count )
        );
    }
}, 10, 1 );

REST API:
* POST /wp-json/sqm-views/v1/track – Submit tracking data through WordPress API endpoint
* POST sqm-views-pages.php – Submit tracking data through Fast endpoint
* GET /wp-json/sqm-views/v1/charts – Retrieve chart data

WP-CLI:
* wp sqm-views process – Process pending statistics

License:

GPLv3. See LICENSE file for details.

Screenshots

  1. Interactive analytics dashboard with D3.js visualizations showing page view trends, engagement metrics, and filtering options

    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

    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

    Processing settings page showing cron status, scheduled runs, and manual processing options

  4. Statistics overview displaying total records, recent activity, and active endpoint configuration

    Statistics overview displaying total records, recent activity, and active endpoint configuration


Reviews & Comments