prefix . 'accessiq_sessions'; // Top pages (use time_spent; schema has no duration). // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $accessiq_top_pages = $wpdb->get_results( $wpdb->prepare( 'SELECT t.page_url, COUNT(*) AS sessions, AVG(t.time_spent) AS avg_duration, SUM(CASE WHEN t.is_bounce = 1 THEN 1 ELSE 0 END) AS bounces, (SELECT s2.device_type FROM `' . esc_sql( $accessiq_sessions_tbl ) . '` s2 WHERE s2.page_url = t.page_url AND s2.created_at >= DATE_SUB(NOW(), INTERVAL %d DAY) GROUP BY s2.device_type ORDER BY COUNT(*) DESC LIMIT 1) AS device_type FROM `' . esc_sql( $accessiq_sessions_tbl ) . '` t WHERE t.created_at >= DATE_SUB(NOW(), INTERVAL %d DAY) AND t.page_url IS NOT NULL AND TRIM(t.page_url) != \'\' GROUP BY t.page_url ORDER BY sessions DESC LIMIT 10', $accessiq_days, $accessiq_days ) ); // Stat cards: use same $accessiq_days (created_at; schema has no started_at). // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $accessiq_stat_total_sessions = (int) $wpdb->get_var( $wpdb->prepare( 'SELECT COUNT(*) FROM `' . esc_sql( $accessiq_sessions_tbl ) . '` WHERE created_at >= DATE_SUB(NOW(), INTERVAL %d DAY)', $accessiq_days ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $accessiq_stat_avg_time_raw = $wpdb->get_var( $wpdb->prepare( 'SELECT AVG(time_spent) FROM `' . esc_sql( $accessiq_sessions_tbl ) . '` WHERE created_at >= DATE_SUB(NOW(), INTERVAL %d DAY) AND time_spent < 3600', $accessiq_days ) ); $accessiq_stat_avg_time_secs = $accessiq_stat_avg_time_raw ? (int) round( (float) $accessiq_stat_avg_time_raw ) : 0; $accessiq_stat_avg_time = $accessiq_stat_avg_time_secs >= 60 ? ( floor( $accessiq_stat_avg_time_secs / 60 ) . 'm ' . ( $accessiq_stat_avg_time_secs % 60 ) . 's' ) : ( $accessiq_stat_avg_time_secs . 's' ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $accessiq_stat_bounces = (int) $wpdb->get_var( $wpdb->prepare( 'SELECT COUNT(*) FROM `' . esc_sql( $accessiq_sessions_tbl ) . '` WHERE created_at >= DATE_SUB(NOW(), INTERVAL %d DAY) AND is_bounce = 1', $accessiq_days ) ); $accessiq_stat_bounce_rate = $accessiq_stat_total_sessions > 0 ? round( ( $accessiq_stat_bounces / $accessiq_stat_total_sessions ) * 100 ) : 0; // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $accessiq_stat_top_device = $wpdb->get_var( $wpdb->prepare( 'SELECT device_type FROM `' . esc_sql( $accessiq_sessions_tbl ) . '` WHERE created_at >= DATE_SUB(NOW(), INTERVAL %d DAY) GROUP BY device_type ORDER BY COUNT(*) DESC LIMIT 1', $accessiq_days ) ); $accessiq_stat_top_device = $accessiq_stat_top_device ? $accessiq_stat_top_device : '—'; $accessiq_current_days = $accessiq_days; ?>

📈 Behavior Analytics

Understand how visitors interact with your site

🟢 Last updated: just now
70 ? 'var(--aiq-red)' : ( $accessiq_stat_bounce_rate >= 40 ? 'var(--aiq-amber)' : 'var(--aiq-green)' ); $accessiq_br_hint = $accessiq_stat_bounce_rate > 70 ? __( '⚠️ High — consider improving content', 'accessiq' ) : ( $accessiq_stat_bounce_rate >= 40 ? __( '→ Average range', 'accessiq' ) : __( '✅ Excellent engagement', 'accessiq' ) ); ?>
👥
Total Sessions
in selected period
⏱️
Avg Time on Page
per session
📉
%
Bounce Rate
💻
Top Device
most common visitor

📊 Daily Sessions

Visitor activity over selected period

Sessions

🏆 Top Pages Performance

Ranked by session count
page_url, PHP_URL_PATH ); $accessiq_path = ( is_string( $accessiq_path ) && $accessiq_path !== '' ) ? $accessiq_path : '/'; $accessiq_avg_secs = (int) $accessiq_page->avg_duration; $accessiq_avg_time = $accessiq_avg_secs >= 60 ? ( floor( $accessiq_avg_secs / 60 ) . 'm ' . ( $accessiq_avg_secs % 60 ) . 's' ) : ( $accessiq_avg_secs . 's' ); $accessiq_bounce_pct = $accessiq_page->sessions > 0 ? round( ( $accessiq_page->bounces / $accessiq_page->sessions ) * 100 ) : 0; $accessiq_bounce_color = $accessiq_bounce_pct > 70 ? '#f87171' : ( $accessiq_bounce_pct > 40 ? '#fbbf24' : '#10d98e' ); $accessiq_device = isset( $accessiq_page->device_type ) ? $accessiq_page->device_type : 'Desktop'; $accessiq_device_icons = array( 'desktop' => '💻', 'mobile' => '📱', 'tablet' => '📟' ); $accessiq_icon = isset( $accessiq_device_icons[ strtolower( $accessiq_device ) ] ) ? $accessiq_device_icons[ strtolower( $accessiq_device ) ] : '💻'; ?>
PAGE SESSIONS AVG TIME BOUNCE RATE TOP DEVICE
📊 No page data yet for this period.
Visitors will appear here after browsing your site.
sessions; ?> %
💡
Pro Tip
Combine Heatmap + Behavior data to find pages where users click a lot but still bounce quickly.
View Heatmap →