If your numbers jumped overnight and nothing else changed, the tracking snippet is most likely loading twice on the same page. Each copy fires its own events, so every real visit gets counted two or more times.
Symptoms
A duplicate install has a recognisable shape:
- Pageviews and visitors are roughly doubled compared with the day before the jump, with no campaign or traffic change to explain it.
- Bounce rate sits near zero. When two pageviews fire on the same load, almost no session looks like a single-page visit any more, so the bounce rate collapses.
- Events fire twice. A button click or form submit shows up as two identical events a few milliseconds apart.
- Average session duration looks off, because the extra synthetic pageviews change how time-on-page is calculated.
If you compare against another analytics tool, Zenovay will read high by a clean factor of about two. That clean multiple is the giveaway. Genuine discrepancies between tools are usually messy, not a tidy 2x. See Data discrepancies for the difference.
Common causes
1. The snippet is pasted in two places
This is the most frequent cause. The script ends up in your theme header and in a second spot, for example:
- A theme or template
<head>block and a plugin or app that also injects analytics. - A site-wide layout and a per-page custom-code field where it was added a second time.
- A tag inside Google Tag Manager and the same hard-coded
<script>already in the page. If GTM fires the Zenovay tag, remove the hard-coded one (or the other way round). Keep one.
2. Single-page app route changes fire twice
On a single-page app (React, Vue, Next.js, and similar), navigation happens without a full page reload. If both your router and the tracker send a pageview on the same route change, every navigation is counted twice. This usually traces back to the snippet being initialised more than once, or a manual pageview call layered on top of automatic tracking.
3. More than one site tag for the same property
If two tracking codes for the same site are both live on the page, or the snippet was duplicated when you migrated themes, both will report. This also shows up as traffic split across two website entries in your dashboard.
How to fix it
Count the script tags on a page
Open the live page, view its source (right-click then View Page Source, or DevTools), and search the HTML for the tracker. Look for zenovay or your data-tracking-code value. There should be exactly one match per page.
You can also check from the console on a real visit:
document.querySelectorAll('script[data-tracking-code], script[src*="zenovay"]').length
If that returns anything above 1, you have a duplicate to remove.
Remove the extra copy
- Theme + plugin/GTM: keep the snippet in one place only. If a plugin or GTM handles it, delete the hard-coded tag from the theme, or disable the plugin tag and keep the theme copy.
- Layout + per-page field: keep the shared layout copy and remove the one added to the individual page.
- Duplicate site tags: make sure each page loads a single tracking code, and that you're looking at the right website entry in the dashboard.
Fix double-firing in a single-page app
Initialise the tracker once, at the app root, and let it handle route changes. Don't add a second manual pageview call on top of automatic tracking. If you migrated from another tool, remove any leftover pageview hooks that were wired to the router.
After you remove the duplicate, new data comes in clean right away. Historical days already affected stay as they were recorded, so compare against a day after the fix when you check whether counts are back to normal.
Still seeing doubles?
If the page source shows a single tag but counts still look inflated:
- Check for the snippet loaded inside an
<iframe>or an embedded widget on the same page. - Confirm a service worker or cached bundle isn't serving an older page that still had two tags. Purge the cache and reload.
- Email [email protected] with your page URL and the result of the console count above.