Troubleshooting Installation

If you have installed the Clickport tracker but data is not appearing in your dashboard, this guide will help you diagnose and fix the issue. Work through the sections below in order.

Verify your installation

The fastest way to check if the tracker is working is to use your browser's developer tools. Open your website, then press F12 (or Cmd+Option+I on Mac) to open DevTools. Click the Network tab, then reload the page.

Look for two requests: the tracker.js script loading from clickport.io, and a POST request to /api/event that sends the pageview. Here is what a successful installation looks like:

Browser DevTools: Network tab
A successful Clickport installation shows these two requests
Name Status Type Size Time
tracker.js 200 script 4.2 KB 42ms
event 200 fetch 68 B 85ms

Filter by "clickport" or "tracker" to find these requests quickly. The event response should contain {"success":true,"session_id":...}

If you see both requests with a 200 status, your installation is working. Data will appear in your dashboard within a few seconds.

If the event request returns 200 but the response body contains a message like {"status":"blocked"}, the server accepted the request but filtered it. See the "Traffic being filtered" section below for details.

Installation checklist

If the tracker is not loading or events are not being sent, walk through this checklist to identify the issue.

Installation checklist
Verify each item to confirm your setup is correct
Script tag is in the <head> section
The tracker script must be inside <head>, not <body> or after the closing </html> tag.
data-domain matches your registered domain
Use "yoursite.com" without https://, www., or trailing slash. Must match what you entered in Clickport.
Script src points to https://clickport.io/tracker.js
Verify the URL is correct and uses https. A typo in the URL will silently fail.
Script is only included once per page
Multiple copies can cause duplicate pageviews. Search your page source for "tracker.js" to verify.
Not testing from localhost
The tracker auto-disables on localhost, 127.0.0.1, and file:// URLs. Deploy to a real domain to test.
No ad blocker or browser extension interfering
Try loading your site in a private/incognito window with all extensions disabled.
Self-exclusion is not enabled
Check that localStorage does not have "clickport_ignore" set to "true" in your browser.

The tracker script is not loading

If you do not see the tracker.js request in the Network tab at all, the script is being blocked before it can load.

Ad blockers and browser extensions

Some ad blockers maintain filter lists that block analytics scripts. To test whether an extension is causing the problem:

  1. Open your site in a private/incognito window (most extensions are disabled by default in incognito mode)
  2. If the tracker loads in incognito but not in your regular browser, an extension is blocking it
  3. Disable extensions one at a time to identify which one is responsible

If you need to work around ad blockers for your visitors, you can proxy the tracker through your own domain. See Script Configuration for setup instructions.

Content Security Policy (CSP)

If your site uses a Content Security Policy, you need to allow connections to clickport.io. Add the following to your CSP header:

script-src https://clickport.io;
connect-src https://clickport.io;

The script-src directive allows the tracker script to load. The connect-src directive allows the tracker to send data to the /api/event endpoint.

To check whether CSP is causing the issue, open the browser Console tab (next to the Network tab) and look for errors mentioning "Content Security Policy" or "CSP".

Caching issues

If you recently added the tracker snippet to your site, your old HTML may still be served from a cache. Purge your site's cache (CDN, hosting provider, or caching plugin) and reload the page. Most caching plugins in WordPress, Squarespace, and similar platforms have a "Purge Cache" or "Clear Cache" button in their settings.

Performance plugins

Some performance optimization tools (like WP Rocket, SiteGround Optimizer, Autoptimize, or W3 Total Cache) may defer, combine, or modify scripts in ways that break the tracker. If you use one of these plugins, try adding an exclusion for tracker.js or clickport.io in the plugin's settings.

The script loads but no data appears

If tracker.js loads with a 200 status but you don't see the /api/event request, or the request fails, one of these is the cause.

Testing from localhost

The tracker automatically disables itself when running on localhost, 127.0.0.1, or file:// URLs. This is intentional: it prevents development traffic from polluting your analytics data.

To test tracking, deploy your site to a real domain. There is no way to override this behavior in production. If you need to test the script locally during development, see Script Configuration for the __CP_TEST__ flag.

Domain mismatch

The data-domain attribute in your script tag must match the domain you registered in Clickport. The server compares the domain you registered with the Origin or Referer header of incoming requests.

Common mistakes:

  • Using data-domain="www.yoursite.com" when you registered yoursite.com (or vice versa). Clickport strips the www. prefix automatically, so either should work.
  • Using data-domain="https://yoursite.com". The value should be just the domain name, without the protocol.
  • Using data-domain="yoursite.com/" with a trailing slash.

The correct format is simply:

<script defer data-domain="yoursite.com"
  src="https://clickport.io/tracker.js"></script>
Subdomains work automatically. If you register yoursite.com in Clickport, traffic from blog.yoursite.com and shop.yoursite.com will be tracked under the same site. Use data-domain="yoursite.com" on all subdomains.

Self-exclusion (clickport_ignore)

Clickport supports a browser-level self-exclusion mechanism. If the clickport_ignore key in localStorage is set to "true", the tracker silently exits without sending any data.

This is useful for excluding yourself, but you may have enabled it and forgotten. To check:

  1. Open DevTools (F12)
  2. Go to the Console tab
  3. Type: localStorage.getItem('clickport_ignore')
  4. If it returns "true", remove it by typing: localStorage.removeItem('clickport_ignore')

Automated browser detection

The tracker checks for automated browser environments before sending data. If navigator.webdriver is true (which is set by Puppeteer, Playwright, Selenium, and similar automation tools), the tracker will not fire. This also applies to PhantomJS and Cypress test runners.

Traffic being filtered

If the tracker is loading and sending events but your dashboard still shows no data (or fewer visits than expected), the server may be filtering the traffic. Clickport applies several layers of protection to keep your analytics clean.

Server-side filtering layers
Events can be silently dropped for any of these reasons
401
Invalid API key
The data-domain does not match any registered site, or an API key is invalid. Double-check your snippet.
BOT
Bot detection triggered
Blocked by User-Agent pattern matching (crawlers, SEO tools, HTTP libraries), datacenter IP ranges (AWS, GCP, Azure), spam referrer lists, or zero-width viewport.
OPT
Device opt-out
The visitor flipped the "Exclude my visits" toggle on this browser (or set localStorage.clickport_ignore=true). The tracker exits before sending any event.
RATE
Rate limit exceeded
More than 60 events per minute from a single IP address. Normal browsing will never hit this limit.
CAP
Daily event cap reached
The site has exceeded its daily event limit. Events are silently dropped until the next UTC day.
DNT
Do Not Track respected
If "Respect DNT" is enabled in your site settings and the visitor has Do Not Track enabled in their browser, the event is discarded.
Silent responses by design. Most filtering returns a 200 OK with {"success":true} rather than an error code. This prevents attackers from probing to find out why their traffic was rejected.

Device exclusion

If you flipped "Exclude my visits" on this browser, the tracker skips every event before sending anything. The exclusion lives in your browser's localStorage under the key clickport_ignore and survives IP changes.

To check: open your site, press F12, go to Application > Local Storage, select your domain, and look for clickport_ignore=true. To clear it, visit https://yoursite.com/?clickport_exclude=0 directly, or flip the toggle off in the dashboard. See Exclude Your Visits.

Bot detection

Clickport uses multiple layers of bot detection to keep analytics clean:

  • User-Agent pattern matching: Over 50 known bot signatures are checked, including search engine crawlers (Googlebot, Bingbot), SEO tools (Ahrefs, Semrush), AI bots (GPTBot, ChatGPT), social media previews (Twitterbot, LinkedInBot), monitoring services (UptimeRobot, Pingdom), and HTTP libraries (curl, wget, python-requests).
  • Datacenter IP ranges: Traffic from known cloud hosting providers (AWS, Google Cloud, Azure, DigitalOcean, etc.) is blocked. If you are browsing from a VPS or cloud server, your traffic will be filtered.
  • Spam referrer list: Traffic with referrer URLs from known spam domains is blocked.
  • Zero viewport width: Requests that report a screen width of 0 pixels (typical of headless browsers) are filtered.

If your own traffic is being caught by bot detection, the most common cause is testing from a cloud server or VPS. Use a regular browser on a residential internet connection instead.

For more details, see Bot Management.

Hostname mismatch

The server validates that the Origin or Referer header of incoming requests matches the domain registered for your site. If the domain in the header does not match (and is not a subdomain of) your registered domain, the event is silently dropped.

This can happen if:

  • You registered example.com but are testing on staging.example.org (different root domain)
  • A proxy or CDN is stripping the Origin header. In this case, Clickport falls back to the Referer header. If both are missing, the request is allowed through.

Data not appearing in the dashboard

If the Network tab shows a successful /api/event response with a session_id, the data has been recorded. If it is not visible in your dashboard, check these settings.

Date range

Make sure your dashboard date range includes today. If you are viewing "Last 7 Days" or a custom range that ends yesterday, today's data will not appear. Switch to "Today" to see the most recent events.

Realtime view

The Realtime section (the green "online" indicator in the top-right) updates every 30 seconds and shows visitors from the last 30 minutes. This is the quickest way to confirm that new events are being recorded. If you see your visit there but not in the main panels, it is likely a date range filter issue.

Site selector

If you have multiple sites in Clickport, make sure the correct site is selected in the dashboard. The site name appears in the top-left corner next to the Clickport logo.

SPA navigation not tracked

Clickport automatically handles single-page application (SPA) navigation. It patches history.pushState, history.replaceState, and listens for popstate events. Each client-side navigation triggers a new pageview event.

If SPA navigation is not being tracked:

  • Make sure your framework uses the History API for routing. Hash-based routing (#/page) is detected via popstate, but some frameworks use non-standard navigation methods.
  • Verify the tracker script loads before your SPA framework initializes. The defer attribute ensures the script runs after HTML parsing but before the DOMContentLoaded event, which is correct for most setups.
  • If your framework replaces the entire <head> on navigation, the tracker may be removed. Add the script to a persistent layout that is not replaced during navigation.

For more details, see SPA Tracking.

Using the Verify Installation button

The easiest way to check your setup is from the dashboard itself. Open Settings (the gear icon in the top-right), scroll to the Site section, and click "Verify installation". Clickport will visit your site and check for the tracker script.

Verification results
The "Verify installation" button reports one of these states
Tracker is installed and sending data
Everything is working. Data should appear within seconds.
Tracker script found but not sending data
The script tag is present, but no events are being received. Check your data-domain value.
Tracker not found
No Clickport script tag was detected on your site. Follow the installation guide to add it.
Proxy setups and consent banners: The verification tool visits your site from the server side. If you proxy the tracker through your own domain, or load the tracker only after cookie consent, the tool may not detect it. In these cases, use the browser DevTools method described above instead.

Common issues reference

Quick answers to frequently encountered problems.

Data is delayed

Events typically appear in the dashboard within 1-3 seconds. If you are experiencing a longer delay, check the Realtime section first. If Realtime shows your visit but the main panels do not, try refreshing the dashboard or switching the date range to "Today".

Duplicate pageviews

If you see inflated pageview counts, check that the tracker script is only included once per page. View your page source (Ctrl+U or Cmd+U) and search for "tracker.js". If it appears more than once, remove the duplicate.

Some WordPress themes and plugins can inject the snippet multiple times if you add it manually and also through a plugin. Pick one method and remove the other.

Engagement data missing

Scroll depth and session duration are sent as a pageleave event when the visitor navigates away or closes the tab. This event uses fetch with keepalive: true, which works reliably in most modern browsers. If engagement data is consistently missing for a specific browser, the keepalive request may be failing. There is no action needed on your part; the tracker falls back to sendBeacon as a backup.

Google Tag Manager

If you load the Clickport tracker through Google Tag Manager instead of placing the script tag directly in your HTML, make sure the tag fires on "All Pages" and that the data-domain attribute is set correctly. GTM may also cache scripts in ways that delay the initial load.

Consent banner integration

Clickport does not use cookies and does not require consent under most GDPR implementations. If you have chosen to gate the tracker behind a consent banner, note that the "Verify installation" button will not detect the tracker until consent is given. See Privacy Overview and GDPR Compliance for details on why consent is not legally required.

Still need help?

If you have worked through this guide and your installation is still not working, reach out through the contact page. Include the following details so we can help quickly:

  • Your site's domain name
  • A screenshot of the Network tab showing the tracker.js and /api/event requests
  • A screenshot of any Console errors related to Clickport
  • Which browser and operating system you are using