More in Getting started
- Install TapCub on your website
- Migrate from Google Analytics 4 or Baidu Tongji
- Add a website, app or mini-program
- How do I add TapCub to WordPress?
- How do I add TapCub to Shopify?
- Can I install TapCub with Google Tag Manager?
- How do I track a React, Vue or Next.js app?
- How do I check that TapCub is collecting data?
- Why does TapCub show no data after I installed it?
- What is a site, and how many can I add?
- Which time zone should I pick for a site?
- Which domains do I need to register?
- How do I keep my own visits out of the reports?
- Why does my visitor count differ from Google Analytics 4?
- Can I run TapCub alongside Google Analytics 4?
- How do I move my goals and events from GA4?
- Can I import my historical data from GA4?
- How do I add TapCub to Squarespace?
- How do I add TapCub to Wix?
- Which Content Security Policy rules does TapCub need?
- Do ad blockers block TapCub?
- How do I send events from my server?
- How do I install TapCub on React?
- How do I install TapCub on Nuxt?
- How do I install TapCub on Vue?
- How do I install TapCub on Next.js?
- How do I capture a HAR file for TapCub support?
- How do I create and manage API keys?
- How do I send events with the HTTP API?
- All guides in this category
Still have a question?
Could not find it? A person reads every message, usually within a few hours on business days.
Chat with usShort answer
Before the closing </head> tag, once, in the template or layout that every page of your site uses.
Add the snippet
- Copy the snippet. Copy your snippet from Web analyticsConfigurationSDK code. It already contains your site key and looks like this:
SDK code <script defer src="https://static.pathclue.com/client.js" data-site="YOUR_SITE_KEY"></script> - Paste it before
</head>. Put it in the shared head template or layout, not in individual pages: the theme’s head partial for Hugo, Hexo, Jekyll or Ghost, the base template for a server-rendered site, or every HTML file if the site really is a folder of pages. - Register the domain and deploy. Make sure the domain visitors use is listed on the same page. Subdomains of a listed domain are accepted automatically; hits from any other host are dropped.
The script is under 3 KB compressed and loads with defer, so it does not block rendering. It sends a pageview when the page loads and again when the URL changes inside the site.
What if the snippet is on a page twice?
Only the first copy runs; the second one notices the first and stops. You will not see double pageviews, but remove the extra copy anyway so the next person editing the template is not confused.
Content-Security-Policy and SRI
If your site sends a Content-Security-Policy header, allow the script host in script-src and the collection host in connect-src. Both are visible in your snippet: the script’s own host, and the host in data-api if the snippet has one; otherwise the script host with static replaced by api. If you turn on chat later, the browser console names any further host it blocks.
To pin the exact file with Subresource Integrity, switch on SRI on the SDK code page. The snippet then points to a versioned file with an integrity hash; copy it again whenever you want to move to a newer version.
Confirm it works
Open a page on the registered domain in a normal browser tab and watch Web analyticsRealtime. Pages opened from disk with file:// are never counted. Next: check that data is arriving.
Did this answer your question?
We use your answers to fix and expand this page.
Couldn’t send. Please try again in a minute.
Thanks for the feedback. We’ll use it to improve this page.You’ve already sent feedback on this page. Thanks.