WordPress plugin
The official Quiet Metrics plugin connects your WordPress site without touching code: first-party script, unblockable server-side tracking, or both.
Installation
During the private beta, the plugin ships as a .zip on request from support (Protected contact detail: enable JavaScript to reveal it), the WordPress.org directory not being populated yet: Plugins → Add New → Upload Plugin, activate it, then open Settings → Quiet Metrics. (Publication on the WordPress.org directory will come with the public launch; to update, reinstall the .zip on top and your settings are preserved.)
| Setting | Purpose |
|---|---|
| Site key | qm_pub_… (dashboard → Install). Nothing is sent while it is empty. |
| Secret key | qm_sec_…, optional, used by server mode: signed hits (HMAC), the service uses the visitor's IP and browser, not your server's. |
| Service URL | https://quietmetrics.dev. Only change this for a dedicated instance or a test environment. |
| Mode | Script, Server, or both (see below). |
| Exclusions | Logged-in roles (administrators and editors by default) and path prefixes, one per line (e.g. /staging). |
Choosing a mode
Script (first-party). The qm.js file is a local copy served by your own site, and hits would go through your site's REST API (/wp-json/quiet-metrics/v1/collect) before being relayed to the service. No third-party domain in the browser: domain-based blocklists are ineffective. This mode is not available yet: its relay runs through your server and would require a site signature that is not implemented yet, whatever secret key you enter. No visit is measured by this mode for now, and a message tells you so in the WordPress admin. This will be fixed when the plugin is published; use server mode in the meantime (see below).
Server (unblockable). Page views are sent by PHP at the end of the request, with no JavaScript: invisible to ad blockers. Fill in the secret key: without it, all your visitors would be counted with your server's IP (a single visitor!).
Both. The script tracks fine-grained navigation (SPAs, highly dynamic themes) and the server catches visitors who block JS. No double counting: the service deduplicates identical page views (same page, same visitor) received less than 2 seconds apart.
Edge cases
Full-page caching (WP Rocket, WP Super Cache, Varnish, Cloudflare APO…). In server mode, PHP does not run on pages served from the cache: those visits are not counted. With a full-page cache, use script mode (or both): the JS runs in the visitor's browser, cache or not.
Security plugins that restrict the REST API. Script mode relays hits via POST /wp-json/quiet-metrics/v1/collect: this public route must remain accessible (whitelist the quiet-metrics/v1 namespace in your security plugin). Symptom of a block: 401/403 errors on this route in the browser's Network tab.
Multisite. Settings are specific to each site in the network. Create one Quiet Metrics site (and key) per WordPress site to keep statistics separate.
Logged-in accounts. The roles checked in the settings are never counted, neither on the script side (the file is not injected) nor on the server side.
Visitor-requested exclusion. Anyone loading any page of your site with ?qm_ignore=1 stops being counted, and ?qm_ignore=0 puts them back into measurement. The plugin handles it with no setting to touch, across all three collection modes: see the opt-out marker. This does not replace the excluded roles and paths: those belong to the administrator, the marker belongs to the visitor.
Custom events
In the browser (script mode active):
<script>qm('signup', { plan: 'pro' });</script>
In PHP (theme, hook, anywhere after plugins are loaded):
quiet_metrics_event( 'purchase', array( 'amount' => 49 ) );
A WooCommerce example that counts confirmed orders:
add_action( 'woocommerce_thankyou', function ( $order_id ) { $order = wc_get_order( $order_id ); if ( $order ) { quiet_metrics_event( 'purchase', array( 'amount' => (float) $order->get_total(), 'items' => $order->get_item_count(), ) ); } } );
The PHP call is non-blocking and silent on failure: analytics never breaks your store. To count a conversion, create the purchase goal (event type) in the dashboard.
Can't find your answer?
Support replies on business days.