DevDome Analytics – Real Traffic Without Bot Noise
DevDome Analytics shows you how many real people visit your site. Bots and crawlers are counted separately, so your numbers are not inflated.
Install the plugin, connect your free DevDome account, done. The plugin stays light: no analytics tables in your WordPress database. Key numbers show in wp-admin; the full dashboard lives in your DevDome account.
What you get
- Visitors, pageviews, sessions, live visitors, top pages, referrers, countries, devices.
- Bots and AI crawlers (Googlebot, GPTBot, ClaudeBot and others) reported separately from humans.
- Visits referred by AI assistants such as ChatGPT and Perplexity.
- Outbound-link click tracking that keeps counting when ad blockers stop the analytics script.
- Reports from the last 24 hours up to 12 months.
First-Party Delivery (Pro plans and above)
An optional switch. The tracking script is served from your own domain and events go through your own server, with randomized names unique to your site, so ad blockers that block third-party analytics domains cannot drop them. Bypasses most, not all, blockers. Works with caching and speed plugins without configuration.
Private by default
- Cookieless on new installs: nothing is stored on your visitors’ devices, so no cookie banner is needed for DevDome.
- Returning-visitor tracking is optional and off on new installs.
- Administrators and editors are not tracked by default, and you can exclude any role.
- The browser Do Not Track signal is respected by default.
- No form values, post content, user accounts, customer or order data are collected.
- Every tracking feature has its own switch, plus one master switch.
A free DevDome account is required: collection and reports run on the hosted DevDome service. Nothing is tracked or sent before you connect the site.
External services
DevDome Analytics is a connector for the DevDome Analytics service. It talks to two hosts, both operated by DevDome.
Terms of service: https://devdome.com/terms-of-service Privacy policy: https://devdome.com/privacy-policy
analytics.devdome.com – the analytics service
The tracking script, https://analytics.devdome.com/track.js Loaded in your visitors’ browsers on public pages, once the site is connected and Enable Tracking is on. It is not added to your pages before you connect. With First-Party Delivery on, a copy of this script that ships inside the plugin is placed in your uploads folder and served from your own domain instead; nothing is downloaded from DevDome for it.
The event ingest, https://analytics.devdome.com/api/event This is where analytics events are recorded, and there are four ways it is reached.
- From the visitor’s browser, by the tracking script above. Each event carries: your Site ID (this site’s domain), your DevDome Account ID, the page URL and path, the page title, the referring URL, browser, operating system, device type, user agent, browser language, country, the target URL of a click, and a visitor ID and session ID only when the browser is storing them (see Privacy). The browser contacts the service directly, so its IP address is visible to it, as with any web server.
- From your server, when it forwards an outbound-link click. The visitor’s browser sends the click to the
/dd-epath on your own domain and your server relays it. Your server adds two fields to that relayed event: the visitor’s country code and the visitor’s IP address, so location and per-visitor counts stay correct when the event arrives from your server instead of from the browser. - From your server, when First-Party Delivery is on: the visitor’s browser sends every tracking event (the same fields as item 1) to a randomized path on your own domain and your server relays it, authenticated with this site’s secret token. The relay adds the same two fields as item 2, the visitor’s country code and the visitor’s IP address, and forwards nothing else: each event is rebuilt from an allowlist and the site and account identity always come from the plugin’s own settings.
- From your server, when a known crawler requests a page and Track Bot Visits is on. That event carries the crawler’s user agent, the bot name and type, the requested URL and path, your Site ID and a timestamp. No human visitor data is in it.
The plan check, https://analytics.devdome.com/api/plugin/entitlements Asks whether this site’s DevDome plan includes First-Party Delivery. Sent only while that switch is on (once a day) or when you turn it on, carrying your Site ID and this site’s secret token. No visitor data.
The connection handshake, https://analytics.devdome.com/api/plugin/status Sent when you connect the site and when the connection is re-verified. Contains your Site ID, this site’s secret token, your Account ID, the site URL, the site name, the site administrator’s email address, the WordPress version, the PHP version, the plugin version, the active theme name, the timezone, the site language and whether this is a multisite install. No visitor data.
A shorter form (Site ID and secret token only) also runs when you open the plugin’s screen, at most once per 15 minutes: a site already connected on devdome.com shows as connected here without a second connect step. No visitor data, nothing on public pages.
The one-click connect handshake, https://analytics.devdome.com/api/plugin/connect/start and /api/plugin/connect/claim
connect/start runs only when you press the “Connect Via DevDome Account” button, never on its own (opening the plugin’s screen makes only the connection-status check described above). It sends this site’s domain, its secret token and the wp-admin address to return to, and receives a short-lived connect link. connect/claim runs when your browser returns from devdome.com and exchanges that link for your Account ID.
The stats read, https://analytics.devdome.com/api/plugin/stats Sends your Site ID, this site’s secret token (so only your own site can read its numbers) and the selected day range. Used to fill the Overview tiles in wp-admin, and the bot-visit figure shared with DevDome Bot Protection when that plugin is installed.
Deleting your data, https://analytics.devdome.com/api/plugin/purge Sends your Site ID and this site’s secret token, and only when you press Reset Analytics, or tick “Also delete my data on DevDome” while disconnecting.
api.devdome.com – DevDome account services
These two are made by the shared DevDome library bundled with every plugin in the suite.
The account check, https://api.devdome.com/plugin/account A GET carrying this site’s domain and its secret token, answered with the Account ID and account email address that the token belongs to, so the DevDome screen can show which account this site is linked to. It runs when the DevDome screen is displayed, at most once every twelve hours, and never before you have acted: until you press a Connect button, save an Account ID or complete a connection, this check is not made at all.
Disconnecting, https://api.devdome.com/plugin/disconnect A POST carrying this site’s domain and its secret token, sent only when you press Disconnect, to unlink the site from the account.
Not contacted on this WordPress.org build
The bundled shared library also references endpoints this build never calls: the https://api.devdome.com/bot-protection/ signature feeds (used by other DevDome plugins; never fetched here, no cron scheduled) and https://api.devdome.com/plugin-updates/ (self-hosted updates, disabled here; updates come from WordPress.org).
devdome.com
https://devdome.com/connect/ is a link you click, not a request the plugin makes. Your browser goes there to sign in and approve the connection, and comes back. The plugin makes no server-side call to devdome.com.
Never sent, in any request
- Passwords and password hashes.
- Form field values submitted by visitors.
- Post, page, comment or any other WordPress content.
- User accounts, user lists, or the email addresses of your registered users. The one exception is the site’s administration email address, which is sent once during the connection handshake described above.
- Customer, order or payment data.
- Anything at all about what happens inside wp-admin.
Privacy
What is stored on your site. Roughly thirty option rows: the tracking switches, the service addresses, this site’s ID and secret token, your Account ID and account email, the timestamp of the connection, and, for First-Party Delivery, the switch itself and the randomized path and file names generated for this site. When that switch is on, one JavaScript file (the tracking script copied out of the plugin’s own package) is placed under your uploads folder; it is removed at uninstall. Nothing else. No custom tables, no post meta, no user meta, and not one analytics event. The short-lived transients: a connect handle (10 minutes), the cached bot-visit figure (1 hour), the cached plan answer for First-Party Delivery (a day), and flood counters for the /dd-e and First-Party relay endpoints that live for 2 minutes and are keyed by an MD5 hash of the visitor’s IP address.
Public paths the plugin adds. Up to four. /dd-e (only while connected) accepts the outbound-click beacon described in External services; it answers empty to everything else, requires the browser’s own same-site Origin header, ignores requests from excluded roles, is rate limited per IP address and stores nothing. The First-Party Delivery relay (only while that switch is on) is a randomized path unique to your site that accepts the tracking events described in External services under the same rules and stores nothing. /.well-known/devdome-analytics.txt (only while connected) returns one short line of fixed text, so DevDome can confirm the plugin really is installed on the domain you connected. /.well-known/devdome-connect-proof.txt returns a one-way SHA-256 fingerprint of this site’s secret token (never the token itself), so DevDome can confirm during connection that the request really came from this site.
What is stored on a visitor’s device. Two settings decide this, and they are independent of each other.
- Track Returning Visitors, off on new installs. While it is off, the DevDome tracking script writes nothing at all: no cookie, no localStorage, no sessionStorage. Unique visitors are still counted, using an identifier DevDome derives on its own server from the request (site, date, IP address and user agent, combined with a secret key); it changes daily, differs per site, and cannot be reversed to identify a person. The trade-off: a visitor who returns tomorrow counts as new. Turning the setting on stores a random visitor ID in a first-party cookie and localStorage, plus a session ID in sessionStorage, so the same person is recognised across days and a click can be tied back to its visit. Random values, nothing personal in them, but they are storage on a visitor’s device, so you may need visitor consent for it. The setting says so where you switch it on.
- Track Outbound Links, on by default. This is the exception to “nothing is stored”. The built-in click detector stores two randomly generated IDs the first time a visitor clicks a link that leaves your site:
td_vidin localStorage andtd_sidin sessionStorage. It does this even when Track Returning Visitors is off, because a click has to be tied to the visit it came from to be worth anything. Visitors who never click an outbound link are unaffected. If you do not want it, switch Track Outbound Links off; a visitor whose browser sends the Do Not Track header never gets it either.
Sites upgrading from an earlier version keep returning-visitor tracking on, exactly as they behaved before, so nothing changes on a live site until you decide otherwise.
IP addresses. The plugin never stores a visitor’s IP address on your site in readable form. It reaches DevDome two ways: the tracking script connects to the service from the visitor’s browser, like any web request; and relayed events (outbound clicks, First-Party Delivery) deliberately carry the visitor’s real address, else they would all be attributed to your server. DevDome uses it for geolocation and per-visitor counts.
How to turn things off. Enable Tracking is the master switch, and turning it off stops all collection. Track Clicks, Track Outbound Links, Track AI Referrals and Track Bot Visits each switch off on their own. Do Not Track Admins is on by default. Excluded roles lets you name any role that must never be tracked; new installs start with Administrator and Editor. Respect Do Not Track is on by default and honours the browser signal.
How to remove your data. Disconnect stops everything immediately: the tracking script is no longer added to your pages, the /dd-e endpoint stops relaying, and the domain-verification file is no longer served. To delete what DevDome has already collected, either press Reset Analytics, or tick “Also delete my data on DevDome” while disconnecting. If you do neither, DevDome deletes it automatically after 90 days of inactivity. On your own site there is nothing to clean up beyond the option rows listed above: the plugin creates no tables and stores no analytics data locally.
Source code
All of this plugin’s PHP and JavaScript ships unminified and human-readable.
One file is generated: assets/devdome-tools-tw.css, the admin screen’s stylesheet. It is a Tailwind CSS v3 utility bundle built from src/tw.css and tailwind.config.cjs with:
npx tailwindcss -c tailwind.config.cjs -i src/tw.css -o assets/devdome-tools-tw.css --minify
Those two build inputs are not included in the distributed package. Ask for them at https://devdome.com/contact and we will send them.
