Weblix Analytics

Description

🚀 Real-Time Lightweight Analytics for WordPress

Weblix Analytics is a fast, privacy-focused analytics plugin that delivers powerful real-time insights directly inside your WordPress dashboard — with zero impact on site speed.

No external services. No heavy scripts. All data stays on your server.

From live online users to rolling 24-hour comparisons inspired by Google Search Console, Weblix Analytics gives you everything you need in a clean, fast, and developer-friendly package.

❓ Why Weblix?

Unlike cloud analytics services, Weblix Analytics keeps your data inside WordPress.

  • No Google account required
  • No third-party tracking cookies
  • No external tracking scripts or pixels
  • Real-time instant statistics
  • Lightweight and fully self-hosted architecture
  • Built to stay fast on very large sites with a deliberately tiny database footprint

🌟 Key Features

Live Real-Time Monitoring (rethought in 3.0)
* “Pulse” realtime console: the big live counter leads (on the right in RTL) beside the minute-by-minute bar chart covering the last 60 minutes — you see the shape of the last hour immediately
* Peak minute highlighted automatically; the still-running minute shown faded
* Live counter with breathing ring, device chips and automatic refresh
* Trending Now board — pages ranked over your online window (list length configurable, up to 200), with the number of people on each page shown right beside the title (clean plain text, momentum badge vs the previous window, NEW flag reserved for genuine bursts — 3+ visitors with an empty previous window; every page title is a hyperlink carrying its URL as tooltip)
* Recent visitors feed with source chips (its title jumps to the Sources tab)
* Smart insight notes never push the charts down — they live only in a bell icon in the topbar and in the WordPress admin bar, on every tab

Live Status in the WordPress Admin Bar
* Online-visitor counter and insights bell in the fixed admin bar — visible on every admin screen AND on the site’s own pages while you are logged in
* The bell opens the same smart-notes panel as the console, right inside the bar; wording follows the admin profile language, so an English-profile admin on a Persian site reads English everywhere
* Both indicators refresh at exactly the Dashboard Refresh interval chosen in Settings and pause in hidden tabs — one source of truth shared with the console topbar and the dashboard widget, no wasted requests
* Quietly stays out of the way on mobile (below 782px the admin bar has no room); the in-plugin console is untouched

Today at a Glance
* Six live KPI cards — Visitors, Page Views, Views/Visitor, Bot Visits, Peak Hour and a self-explanatory Mobile vs Desktop split bar
* Every KPI carries a delta chip versus yesterday at the same time and a rolling 12-hour sparkline
* Visitors / Page-Views switch attached directly below the hourly chart — every click redraws the chart right in front of you; it also drives the cards and tables
* Optional faded “yesterday” overlay line behind today’s hourly bars
* Top Pages with share bars and trend arrows versus yesterday — or switch to Landing Pages / Exit Pages views
* Traffic Sources donut with counts and percentages, Devices split, Browsers & OS mini-tables, Top Bots

Audience & Acquisition Intelligence (GA-inspired, computed only from data you already store)
* Audience quality strip: New vs Returning visitors, Single-page visit share (bounce proxy), Average active span (first last hit)
* Landing and Exit page reports computed per-visitor inside the raw window
* UTM campaign report (source · medium · campaign) — live from today’s hits, archived nightly to weblix_daily.top_utms forever after
* Publishing Clock: weekday × hour heatmap of views across 30 days so you know exactly when your audience is most active
* All modules optional — one Settings switch hides them; everything is computed from data already stored, the tracking engine stays untouched

Rolling 24-Hour Compare — Google-Search-Console style
* Last 24 hours vs previous 24 hours
* Today so far vs yesterday same time
* Last 24 hours vs the same period last week
* Last 24 hours vs the same period 30 days ago
* Three metrics: Visitors, Page Views and Views-per-Visitor (derived per hour client-side, like GA’s engagement benchmark)
* Hour-by-hour dual-line chart; hover shows both values plus the difference
* Summary cards: current total, comparison total, absolute difference and % change
* Top pages and source-type tables follow the selected metric; referrer detail inside the raw-data window

Multi-Day Compare PRO
* Smart presets: 7 vs previous 7, 28 vs previous 28, this month vs last month, this month vs same month last year, fully custom ranges
* “Align by day of week” option for equal-length custom ranges — a Monday compares with a Monday
* Optional normalised (%) view when comparing series of different scales or lengths
* Dual-series trend chart over day indexes with per-day tooltips
* Full metrics breakdown table: Visitors, Page Views, Views/Visitor, Bots, Desktop/Mobile/Tablet, Search/Social/Direct/Referral — each row showing A, B, difference and % change
* Clear empty-state notices when a range predates your archive instead of silent zeros

Classic Analytics Tabs
* Pages, Sources, Devices, Browsers & OS, Bots across Today / Yesterday / 7 / 30 / 90-day windows
* Percentage share bars on every table
* Pages tab built for reading: page titles are the links, URLs shown decoded, muted and single-line

Smart Insights — quiet by design
* Same-time traffic comparison (e.g. “Traffic up 23% vs yesterday at this time”)
* Top traffic source of the day · Most visited page highlight · Hourly traffic spike detection
* Delivered through one bell icon with a red blinking badge next to the live counter — open it on any tab; no insight banner is ever rendered inside the analytics pages

Privacy, Protection & Access Control
* Numbers-only hourly archive — no IPs, URLs or titles in it
* Optional IP hashing (GDPR friendly)
* Exclude logged-in users, roles, IPs, and URL patterns
* Advanced bot detection with server-side tracking
* Configurable retention for daily data and a hard-capped hourly table
* Rate limiting on all tracking endpoints, same-origin validation on the public tracker, nonce + capability checks on every admin action, prepared SQL everywhere
* Statistics Visibility: pick exactly which user roles can see the console, the dashboard widget and the admin bar status — administrators only by default, enforced server-side through one audited capability gate

Cache & CDN Compatibility (hardened across the whole 3.0 QA line)
* No security token embedded in page HTML — tracking requests are validated by same-origin proof, so arbitrarily old cached pages keep counting
* Zero GET data requests: every live read (admin bar, Realtime page, every dashboard tab) travels as POST with no-store headers and cache-busting parameters — no browser, proxy or “cache everything” CDN can store or replay a Weblix number
* Server-side snapshots are freshness-stamped and self-healing: a cached payload is only served while provably fresh, and a row damaged by database-optimization sweeps (the classic “frozen counter” cause) is rebuilt automatically on the first request
* Crawler user-agent bypass rules registered automatically with WP Rocket and LiteSpeed so bots reach PHP behind full-page cache
* REST API endpoints carry explicit no-store headers, so excluding /wp-json/weblix/ from edge caching is officially supported
* Diagnostics Tracking Self-Test: fires one real request through your cache setup and reports pass/fail

Tools & Diagnostics
* System health, cron status (including the hourly rollup), DB sizes incl. the hourly table
* “Data Safety & Storage” card: every table with its row count, oldest record and exact deletion policy
* Cache/CDN detection card explaining what Weblix did about each layer — and what only edge rules can fix
* “Run Cleanup Now”: one click flushes every live Weblix cache (all locale variants) — an instant manual reset on top of the self-healing guards
* Manual actions: aggregate yesterday, backfill missing hours
* CSV Export · WordPress Dashboard widget · Translation status row showing exactly which language file is active

⚡ Built for Performance

  • Lightweight tracker: one deferred POST per page view
  • Three tiny tables: raw visits (rolling 48 h), daily archive, hourly numbers (~50 bytes/row)
  • Hourly rollup filled by one grouped query per hour in WP-Cron — never on page loads
  • Gaps self-heal automatically when a dashboard view notices them
  • The admin bar, console and dashboard widget all read the same shared, bounded, freshness-guarded snapshot instead of querying separately
  • Batch DELETE with LIMIT prevents MySQL table locks
  • All queries use prepared statements and indexed reads

Third-Party Assets

  • Chart.js — bundled at assets/js/chart.min.js (minified, without source changes). Copyright the Chart.js contributors, released under the MIT License: https://github.com/chartjs/Chart.js/blob/master/LICENSE.md
  • Vazirmatn FD — bundled at assets/fonts/Vazirmatn-FD-Regular.woff2 (the official Farsi-Digits Regular build, unmodified), together with its full license text at assets/fonts/OFL.txt. Copyright 2015 The Vazirmatn Project Authors (https://github.com/rastikerdar/vazirmatn), released under the SIL Open Font License 1.1: https://scripts.sil.org/OFL — used by Weblix only for fa* admin locales. In this build the Latin digit codepoints are drawn as Persian digits, so every number in the Persian UI reads ۰–۹

Screenshots

Installation

From WordPress Dashboard: 1. Go to Plugins > Add New 2. Search for “Weblix Analytics” 3. Click Install Now and then Activate

Manual Installation: 1. Download the plugin archive 2. Upload the weblix folder to /wp-content/plugins/ 3. Activate the plugin through the Plugins menu in WordPress

After activation, go to Weblix in the admin menu.

FAQ

Does Weblix Analytics slow down my website?

No. The tracker sends one small deferred request per page view and has zero impact on page load time. Dashboard aggregation happens in WP-Cron, not on page loads.

Is it compatible with caching plugins?

Yes, by design. Since 3.0 there is no rotating token inside page HTML: tracker requests are validated by same-origin plus rate limits, so a page cached for days still counts its visitors correctly. The script URL also carries a version parameter so CDNs refresh it after updates. The same protection now covers every dashboard number: all live reads travel as POST with no-store headers, so nothing between the browser and the server may store them, and the server-side snapshots are freshness-stamped so a stale or damaged cache row is rebuilt instead of replayed.

My counter once froze for hours and only a purge or a language switch fixed it — is that solved?

Yes. The root cause was inside the plugin’s own storage, not the CDN: when a database-optimization tool deletes the internal expiry marker of a WordPress transient, WordPress silently serves that snapshot forever. Weblix now stamps every live cache with a write time and serves it only while provably fresh — a damaged row is rebuilt automatically on the first request after updating, with no purge and no manual step. If you ever want an instant manual reset, Diagnostics “Run Cleanup Now” flushes every live cache in one click.

Who can see the statistics?

Only the roles you explicitly allow. The Statistics Visibility option (first card in Settings) picks which roles can open the console, see the dashboard widget or the admin bar status — administrators only by default. Roles without permission lose every surface at once and their data requests are rejected server-side; administrators can never be locked out, and Settings and Diagnostics always stay administrator-only.

What do the admin bar icons show?

On every admin screen — and on the site’s own pages while you are logged in — the WordPress admin bar carries two live indicators: the current online-visitor count and an insights bell that opens the same smart-notes panel as the console. Wording follows your profile language, both refresh at exactly the Dashboard Refresh interval from Settings, polling pauses in hidden tabs, and both stay hidden on mobile where the admin bar has no room.

Can I change how often the numbers refresh?

Yes. Settings Dashboard Refresh (10–60 seconds) is the single source of truth: the realtime console, the admin-bar counter and the dashboard widget all follow it. High-traffic sites should pick a higher value — counting accuracy never depends on it, only how fresh the numbers feel.

Is the public tracking endpoint safe?

Yes. It accepts only same-origin requests (Origin/Referer must match your site), applies per-IP rate limits, and never embeds an expiring token in page HTML — which is exactly what keeps counting working behind page cache. An optional hourly HMAC token adds a bonus trust signal when present. Internally: prepared SQL everywhere, escaped output, and nonce + capability checks on every admin action.

Are bots counted when full-page caching is active?

Weblix registers crawler UA bypass rules with WP Rocket and LiteSpeed automatically, and marks bot renders as non-cacheable, letting crawlers reach PHP where they are tracked server-side. If a CDN serves HTML entirely from the edge (e.g. Cloudflare “Cache Everything”), PHP cannot run from inside WordPress — add an edge rule for known crawler user-agents. The Diagnostics page detects these situations and tells you plainly, and the Tracking Self-Test verifies your setup end-to-end.

What does the hourly table store?

Only numbers: visitors, views, bots, device totals and source totals per hour — roughly 50 bytes per row, ~1 KB per day, ~30 KB per month at the default 30-day retention. No IPs, no URLs, no titles, ever. Retention (7–90 days) is configurable under Settings, older rows delete themselves automatically.

Why can’t I compare detailed referrers for “same period last week”?

Referrer names are stored only inside the 48-hour raw window by design (tiny database). For older comparisons you still get exact visitor/view/source-type numbers from the hourly archive — only name-level referrer detail is limited to the last two days, and the UI says so explicitly.

Does Weblix use cookies?

No. Weblix does not use tracking cookies.

Does it respect user privacy?

Yes. IP hashing is available, the hourly archive stores numbers only, and nothing leaves your server.

How long is data kept?

Live visit rows: 48 hours. Hourly numbers: 30 days by default (configurable 7–90). Daily summaries: forever, or up to 10 years depending on your retention setting.

Will updating or deleting the plugin erase my statistics?

No. Updating, deactivating or upgrading Weblix never touches stored data — schema changes are additive and every existing row is preserved. After an update the bell icon in the dashboard topbar shows a one-time confirmation note, and the Diagnostics page includes a “Data Safety & Storage” card listing each table with its row count, oldest record and exact deletion policy. Tables are only dropped when you explicitly enable “Delete all data on plugin deletion” in Settings AND then delete the plugin — that switch is off by default.

Can I export my data?

Yes. CSV export is available in the Settings page.

What is “Views / Visitor”?

Page views divided by visitors — the classic GA engagement benchmark (pages per session). Weblix shows it as a Today KPI, and the Compare tab can chart it hour by hour for both windows so you can see whether content depth improved, not just raw traffic.

How do New vs Returning visitors work?

Weblix hashes visitor identity, so history detection works inside the rolling raw window (~48 hours). Visitors already seen in that window count as returning; the panel says so honestly instead of pretending to know years of history.

Where does the UTM campaign report come from?

The tracker has always stored utm_source / utm_medium / utm_campaign with each hit — the dashboard just reports them. Today’s campaigns are live; each night’s top combos are archived in the daily table so campaign history accumulates forever like your other daily stats (starting from your 3.0 activation).

What does the Publishing Clock tell me?

It folds 30 days of the hourly archive into a weekday × hour heatmap of views. Bright cells show when real visitors actually read your site — useful for scheduling posts, newsletters and social pushes.

Where did the insight banners go?

They moved into the bell icon next to the live online counter. The bell shows a red blinking badge whenever fresh notes are waiting; open it on any tab to read them. No insight banner is rendered inside the analytics pages, so your charts always stay at the top.

Weblix shows English even though a Persian translation exists — what is wrong?

WordPress normally prefers wp-content/languages/plugins/weblix-fa_IR.mo — a language pack that is downloaded automatically only for plugins HOSTED on WP.org — over the languages/ folder bundled with the plugin. Since 3.0 the order is deliberately reversed: the file bundled with the plugin loads FIRST, so installing or updating Weblix always brings its freshest translation to every user, and any old language pack left on the server becomes a harmless fallback (nothing to delete). If strings still look English, open Diagnostics — the “Translation” row shows which file is active and whether a file for your locale exists at all. Once Weblix is hosted on WP.org, keep translate.wordpress.org in sync as well; a plugin update still ships the newest strings instantly under this order.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“Weblix Analytics” is open source software. The following people have contributed to this plugin.

Contributors

“Weblix Analytics” has been translated into 1 locale. Thank you to the translators for their contributions.

Translate “Weblix Analytics” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

3.0

A complete rebuild in one release: the Pulse analytics console, Search-Console-style comparisons and GA-inspired audience insights — all computed from data Weblix already stores, tracker still one deferred request per view. Updating from 2.0.1 brings everything below; your statistics are preserved.

New: Pulse Console UI
* Side-rail navigation, sticky topbar with the live online pill, responsive down to phones
* Realtime: live counter beside a minute-by-minute chart of the last 60 minutes (peak highlighted), Trending Now board with per-page online counts, clickable recent-visitors feed
* Today: six KPI cards with deltas and sparklines, hourly chart with the metric switch below it, yesterday overlay, share bars, landing/exit views
* Smart insights live only in a bell badge (topbar and admin bar) — never inside the charts
* Complete Persian translation; the bundled translation wins over stale language packs; Vazirmatn FD font (SIL OFL) for fa* locales only

New: Comparisons & audience intelligence
* Rolling 24-hour Compare, Search-Console-style: four modes, three metrics including Views-per-Visitor, dual lines with deltas
* Multi-Day Compare PRO: 7v7 / 28v28 / month presets, weekday alignment, normalised view, metrics table
* Audience strip (new vs returning, single-page share, active span), archived UTM campaigns, Publishing Clock heatmap

New: Tiny Hourly Stats Engine
* One numeric row per hour (~50 bytes), backfilled on upgrade, filled by WP-Cron, 7–90 day retention — numbers only, no IPs, URLs or titles
* Bots never enter human analytics; they stay in their own places

New: Admin bar status & access control
* Online counter + insights bell in the admin bar (admin screens and the frontend), profile-language wording, refreshed at exactly the Dashboard Refresh interval
* Statistics Visibility: choose which roles see any statistics surface — administrators only by default, enforced server-side

Fixed: cache, CDN & storage hardening
* No token in page HTML — same-origin proof keeps old cached pages counting; crawler UA bypass for WP Rocket/LiteSpeed
* Live reads travel as POST with no-store headers; server snapshots are freshness-stamped and self-heal after database sweeps (the “frozen counter” root cause)
* Diagnostics: cache detection, Tracking Self-Test, Data Safety card, one-click “Run Cleanup Now”
* Widget page titles are hyperlinks (new tab) and the widget follows the Dashboard Refresh cadence

Security & compliance
* Plugin Check clean: sanitized input, prepared SQL, nonce + capability checks, per-IP rate limits, schema-width caps, numbers-only CSV export
* Updating or deactivating never deletes statistics; data removal on uninstall stays opt-in

2.0.1

  • Improved bot detection logic
  • Fixed duplicate check for bots (better counting)
  • Updated Chart.js handling for better compatibility
  • Minor UI and performance improvements

2.0

Major rewrite — complete rebuild from the ground up.

This version transforms Weblix from a simple online-user counter into a full real-time analytics suite.

New: Dual-Table Database Architecture
* Introduced a separate weblix_daily table for storing aggregated daily summaries
* Live weblix table now holds only the last 48 hours of raw visit data
* Nightly cron job aggregates yesterday’s data into the daily table at 00:05 (WP timezone)
* Batch DELETE with LIMIT prevents MySQL table locks on high-traffic sites

New: Full Analytics Dashboard
* Today tab: hourly bar chart, visitor/view/bot cards, top pages, traffic sources donut chart
* Compare tab: period-over-period comparison with line charts, quick presets
* Pages/Sources/Devices/Bots tabs with percentage share columns

New: Server-Side Bot Tracking
* Bots tracked server-side via template_redirect hook — no JavaScript required
* Bot visits stored separately with bot name detection

New: Smart Insights Bar
* Compares traffic today so far vs yesterday at the exact same time of day
* Detects hourly traffic spikes (2.5x above daily average)

New: Cache-Compatible Tracker
* Custom hourly rotating HMAC token instead of WordPress nonces

New: Diagnostics Page & CSV Export

1.4.1

  • Fix: Resolved nonce validation conflicts for logged-in users
  • Optimization: Improved REST API request handling for smoother tracking

1.4

  • Improved user identification method for more accurate online user tracking
  • Enhanced cron job scheduling for better performance and efficiency

1.3

  • Improved resource usage efficiency
  • Added compatibility with caching plugins
  • Enhanced online user tracking accuracy

1.2

  • Optimized and improved the retrieval of page titles
  • Enhanced resource usage efficiency
  • Improved bot detection
  • Fixed minor bugs related to cron scheduling

1.1

  • Added weekly cleanup schedule for old records
  • Improved database query performance

1.0

  • Initial release