Skip to content

EP Analytics

EP Analytics gives you a real analytics dashboard for your PageMotor site with none of the privacy baggage. No cookies, no JavaScript tracking pixel, no third-party scripts, no data leaving your server. Your visitors don’t need to click a consent banner because there is nothing to consent to.

Published by ElmsPark Studio.

Page views are recorded server-side during register_shutdown_function(), which runs after the response has already been sent to the browser. Tracking adds zero latency to your pages.

Data storage:

  • Hourly granularity for the last 7 days. Drill into any day’s 24-hour breakdown.
  • Daily aggregates for anything older. Auto-rollup runs nightly.
  • Configurable retention from 30 days to forever.

What you see in the dashboard:

  • Bar chart with Today, 7 Days, 30 Days, 90 Days tabs
  • Top 10 pages with real page titles (resolved from the content database)
  • Top 10 referrers (self-referrals filtered out)
  • All-time, period, and today’s view count cards
  • AJAX tab switching so nothing reloads

What EP Analytics does NOT do:

  • No user identification. No unique visitor count. It is a counter, not a behaviour tracker.
  • No session tracking. A visitor viewing five pages counts as five views, not one session.
  • No event tracking. No click maps, no scroll depth, no form analytics.
  • No geography. No IP-to-country lookup.

If any of those matter to you, EP Analytics is not enough. If none of them matter (and for most sites they don’t), EP Analytics is all you need.

  • PageMotor 0.8.2b or later

That’s it. No external service accounts, no JavaScript SDK, no Google tag manager.

  1. Download ep-analytics.zip from the EP Suite downloads page.
  2. Upload via Plugins → Manage Plugins.
  3. Activate. Tracking starts immediately.

Open the settings page to confirm. You should see status cards with zero counts and a prompt to revisit once data accumulates.

  • Enable tracking. On by default. Turn off temporarily if you need.
  • IP exclusion list. Comma-separated IP addresses to never record. Use this to exclude your own IP and any known bot sources. Supports CIDR (192.168.1.0/24).
  • Keep data for: 30, 60, 90, 180, 365 days, or Forever. Expired data is deleted during the nightly cleanup.
  • Hourly-level data is kept for the most recent 7 days regardless of this setting. After 7 days, hourly rows are rolled up into a single daily row to keep the database lean.

EP Analytics automatically ignores page views from user-agents that look like bots. The blocklist covers 40+ patterns across:

  • Search engine crawlers (Googlebot, Bingbot, DuckDuckBot, Yandex)
  • AI scrapers (GPTBot, ClaudeBot, Bytespider, CCBot)
  • Social previews (Twitterbot, facebookexternalhit, LinkedInBot, WhatsApp, Slackbot)
  • Monitoring tools (UptimeRobot, Pingdom, StatusCake)
  • Generic crawlers (bot, spider, crawler, scraper in the UA)

Legitimate visitors almost never match these patterns. If you spot false positives, log them in your review queue.

Bar chart of the last 24 hours, split into hourly buckets. Most recent hour is on the right. Each bar is clickable for that hour’s top pages (if you hover).

Daily bars for the last 7 days. Click any bar to drill into that day’s 24-hour breakdown, then use the Back button to return to the overview.

Daily bars for the period. No hourly drill-down because hourly data is only retained for 7 days.

Table of the 10 most-viewed pages in the selected period. Page titles resolve from PageMotor’s content tables, so you see /about-us/ as “About us” rather than just a URL.

Table of the 10 domains that sent the most traffic. Direct visits (no referrer) are not counted. Self-referrals (anyone coming from your own site) are excluded.

Every page request triggers a single database write during shutdown:

  1. Check that tracking is enabled.
  2. Check that the page is a real page (not an admin page, not an error page, not an asset).
  3. Check the user-agent against the bot blocklist. Bots get skipped.
  4. Check the client IP against the exclusion list. Excluded IPs get skipped.
  5. Increment the hourly counter for this URL path and this hour.
  6. Record the referrer domain (if present and not self-referral).

The database write happens AFTER flush() has sent the response, so the visitor never waits for it.

  • Automatic cleanup runs nightly (piggybacks on PageMotor’s scheduler).
  • Hourly-to-daily rollup during cleanup for rows older than 7 days.
  • Manual Clear All button in settings, CSRF-protected. Wipes everything. No undo.
FeatureEP AnalyticsGA4
Server-sideYesNo (JS pixel)
CookiesNoneYes
Requires consentNoYes, everywhere in Europe
External serviceNoneGoogle
Unique visitor countNoYes
Session trackingNoYes
Event trackingNoYes
GeographyNoYes
Data ownershipYour serverGoogle’s servers
GDPR paperworkNoneFull DPA chain

EP Analytics is the better choice when you need page view numbers and nothing else. Many sites discover they never needed the rest.

“No data is showing up after I installed”

Section titled ““No data is showing up after I installed””

Wait a few minutes and reload. First-load wait is normal. If you still see zeros after an hour:

  • Is tracking actually enabled in settings? Toggle it off and on.
  • Is your IP in the exclusion list? Check.
  • Are you testing from a machine running an ad-blocker that identifies as a bot? Unlikely, but possible.

Add your IP to the exclusion list. Find your IP at ifconfig.me.

Some bots are new and not yet in the blocklist. Log the offending user-agent in your review queue; bot patterns can be extended.

“The Today tab shows fewer views than the 7 Days tab for today”

Section titled ““The Today tab shows fewer views than the 7 Days tab for today””

This is not a bug. Today data comes from hourly buckets. The 7-day bar for today is the sum of today’s hourly buckets. They should match. If they don’t, check whether your server clock is in the timezone you expect.

“Dashboard loads slowly on a site with millions of page views”

Section titled ““Dashboard loads slowly on a site with millions of page views””

Top pages and referrers queries aggregate at read time. On very large datasets this can be slow. Dropping retention from Forever to 180 or 365 days usually fixes it.

For a quick question about this plugin, EP Support inside your admin is the fastest option. The chat widget sits on every EP plugin settings page and knows which one you’re on, with starter questions and links preloaded for that exact screen.

For anything bigger — a bug report, a feature request, or a “how do I…” that needs a real reply — open a ticket at help.elmspark.com. A real person, helped by AI, writes the reply. Usually within a few hours. Tickets don’t disappear into the void.

  • Settings language menu. The language menu in this plugin’s settings now lists only the languages it is actually translated into, plus English, so you can no longer pick a language that changes nothing.
  • Danish. Adds a Danish translation.
  • Fixes a doubled cache-busting tag on its admin scripts. On PageMotor 0.11 and later the page asked for each file with two version tags on the end of its address (?v=…?v=…), because the core had started adding its own tag and the plugin was still adding one too. The files loaded correctly, so nothing was visibly broken; the addresses were just malformed and every cache saw a longer key than it needed. The plugin now leaves the tag to the core on 0.11 and later, and still adds its own on older cores, where nothing else would.
  • No change to what these files do.
  • Stops counting machine traffic as page views. If your site has an AI connector wired to it, or anything else talking to its API, every one of those calls was being recorded as a visit, showing up in your figures as traffic to /mcp/ or /api/. Only real page views are recorded now. OAuth handshakes and .well-known lookups are excluded for the same reason.
  • Views already recorded that way stay in your history. They are visible as page paths beginning /mcp/, /api/ or /oauth/ and can be deleted by hand if you want the figures clean.
  • Nothing else changed, and a site with no connector wired sees no difference at all.
  • Fixes a crash on the first visit to your site after you activate the plugin. Nothing had created the plugin’s tables yet, and the part that records the visit wrote to them anyway, which ended in a fatal error in your site’s error log. The tables are now created on that first visit if they are missing.
  • A missing or dropped table now repairs itself instead of failing every time. If a table disappears, the next visit rebuilds it and records the visit.
  • Recording a visit can no longer take your site down. The tracking step and the daily tidy-up are now sealed off: if either fails, the failure is written to your error log and the page carries on serving.
  • This also carries the current shared EP Suite code. Older copies of this plugin could stop other EP plugins working on the same site, so updating it is worth doing even if you never saw the crash above.
  • Fixes “Your session has expired. Please reload to ensure your security.” on PageMotor 0.11. The message appeared on this plugin’s admin screens even though you were signed in perfectly normally, and whatever you were doing failed to save.
  • Nothing was wrong with your session. PageMotor 0.11 started handling part of the security check that this plugin was already handling itself, and the two together made every save look invalid. The plugin now checks whether PageMotor has already done it.
  • Visitors who were not signed in were never affected, on any version.
  • There is nothing to reconfigure, and nothing else changed.