Troubleshooting
Find your symptom. Each check takes under a minute, and they are ordered by how often they turn out to be the cause.
No data at all
Section titled “No data at all”Check the script is on the page. Load your site, view source, and search for p.js. If it
is not there, your template did not deploy or a caching layer is serving an old page. Try a
hard refresh, then clear your CDN cache.
Check the key. The ?s= value must match a tag on your pixel exactly. A truncated paste or
a stray space is the most common cause. Copy it again from Pixels.
Check the network request. Open DevTools, the Network tab, filter for your tracking domain
(the host in your snippet), and reload. You should see p.js return 200, then a request
to /e.
| What you see | Means |
|---|---|
No p.js request | The tag is not on the page, or a blocker stopped it |
p.js 404 | The key is wrong |
p.js 200 but no /e | See the console for a script error, or a content security policy blocking the beacon |
/e 204 and no data in the dashboard | Check the date range and filters in the top bar |
Check your own blocker. Testing your own site with a tracking blocker on is a very common false alarm. Use a private window with extensions off.
Check the date range. A range that ends yesterday will never show today’s test visit.
Check which pixel is selected. The picker in the top bar scopes every screen to one pixel.
Data on some pages but not others
Section titled “Data on some pages but not others”The snippet is missing from one template. Sites with a separate layout for the home page, the watch page, or AMP hit this often. View source on a page that works and one that does not and compare.
Video plays are not recorded
Section titled “Video plays are not recorded”Check the pixel’s site type first. A new pixel starts on Dwell, which ignores the player and needs 5 minutes on the page before it counts one play. A 30-second test on a dwell pixel therefore records nothing, which looks identical to a broken install. If your pages have a player you control, switch the site type to File host or Media player and plays come from the player at 30 seconds instead. This is the most common cause on a pixel created in the last few days. See Metrics.
Is it a real <video> element? The pixel instruments <video>, which covers video.js,
hls.js, Plyr, JW Player, and a raw tag. It cannot see inside a Flash-era plugin or a canvas
renderer.
Is the player in an iframe? Then the pixel must go inside the frame. On the parent page you get the visit and no plays. See Iframes.
Is it a YouTube or Vimeo embed? You cannot install anything inside a third-party frame, so there are no player signals. Switch the pixel to a dwell site type and plays are inferred from time on the page instead. See Iframes.
Does the player mount after an API call? It still works, because the pixel watches for
videos appearing. If you name it with webstats('video', ...), use a selector rather than an
element so the rule applies when the element arrives.
Videos show as file names instead of titles
Section titled “Videos show as file names instead of titles”Name them. An unnamed player is grouped by its file URL, so the same film served from two URLs counts twice. See Track video.
A content declaration does nothing
Section titled “A content declaration does nothing”Two things drop it silently:
- Empty
ids. At least oneprovider: idpair must survive. - A
typeoutside the list of 12. Check Content types and ids.
Also check you called it. In an SPA, webstats('content', ...) must run on every route change,
not once at startup.
webstats is not defined
Section titled “webstats is not defined”An inline <script> ran before the deferred pixel loaded. Make it a type="module" script,
which runs after the pixel:
<script defer src="https://10.vidstats.top/js/p.js?s=YOUR_TAG_KEY"></script><script type="module"> webstats('content', { type: 'movie', ids: { tmdb: '278' } });</script>Calls from your own app or framework code already run after the pixel. Confirm the snippet is
on the page, before </body>.
Route changes are not counted in my SPA
Section titled “Route changes are not counted in my SPA”pushState, replaceState, popstate, and hash changes are all handled. If your router
changes the view without touching the URL, call webstats('pageview') yourself. If your routes
differ only by query string or hash, set contentNav. See
React, Vue, and SPAs.
Every pageview is counted twice
Section titled “Every pageview is counted twice”Two snippets on the page. React 18 StrictMode double-invokes effects in development, so a snippet injected from an effect mounts twice. Put the snippet in your HTML or layout instead of a component.
Numbers look lower than another analytics tool
Section titled “Numbers look lower than another analytics tool”Expected, and the gap is usually blockers. Different tools also count differently: a pageview here is every route change, and a visitor is one browser for 365 days. Compare trends, not absolute totals. See Metrics.
My plays are not earning
Section titled “My plays are not earning”Earnings need a validated play on a page whose title you declared. Check Content: if a
title is missing there, the page never sent a content call. See
Get paid.
I rotated my key and lost my history
Section titled “I rotated my key and lost my history”You did not. Tag keys rotate without touching the pixel behind them. See Pixels and install tags. If a new pixel was created by mistake, open a ticket.
Nothing here helped
Section titled “Nothing here helped”Open a ticket from Need help? in your dashboard, which is also where past conversations and replies live. Include your pixel name, the URL of a page that should be sending data, and what you see in the Network tab. That is enough to diagnose almost anything.
Data deletion requests go to the same place.