Website-owner guidance
Explain TrafficWisp on your own privacy page.
The opt-out preference belongs to the visitor’s browser on your domain. Every website using TrafficWisp should therefore provide its own disclosure and opt-out control.
Suggested privacy policy wording
Adapt the wording below to match your website, retention period and wider privacy policy. It is general implementation guidance, not legal advice.
Website analytics
We use TrafficWisp to understand, in aggregate, how people use this website. It records page views, referring websites, scroll depth and interactions such as button, form, telephone, email, WhatsApp and outbound-link clicks. It does not record information entered into forms.
TrafficWisp stores a random session identifier in your browser’s sessionStorage so that activity during one browser-tab session can be understood. It sets no analytics cookies and we do not use this information to build advertising profiles.
You can disable TrafficWisp analytics at any time using the control below. Your choice applies to this browser on this website and remains in place until you enable analytics again.
Add the opt-out control
Place a clearly labelled button and status text on your own privacy page. The button must set localStorage.tw_wisp_excluded to "1" and remove sessionStorage.tw_wisp_session when disabling analytics. When enabling it, remove the exclusion value; tracking will restart only after the next page load.
Do not link visitors to TrafficWisp’s privacy-page control as a substitute: browser storage is specific to each website’s domain. Do not use the administrator device-exclusion URL for visitors.
<button type="button" id="trafficwisp-opt-out"
aria-describedby="trafficwisp-status">
Disable TrafficWisp analytics
</button>
<p id="trafficwisp-status" role="status" aria-live="polite"></p>
<script>
(() => {
const button = document.querySelector('#trafficwisp-opt-out');
const status = document.querySelector('#trafficwisp-status');
const render = (changed = false) => {
const disabled = localStorage.getItem('tw_wisp_excluded') === '1';
button.textContent = disabled
? 'Enable TrafficWisp analytics'
: 'Disable TrafficWisp analytics';
button.setAttribute('aria-pressed', String(disabled));
status.textContent = disabled
? `TrafficWisp analytics ${changed ? 'has been' : 'is'} disabled for this browser.`
: changed
? 'TrafficWisp analytics will be enabled from the next page load for this browser.'
: 'TrafficWisp analytics is enabled for this browser.';
};
button.addEventListener('click', () => {
if (localStorage.getItem('tw_wisp_excluded') === '1') {
localStorage.removeItem('tw_wisp_excluded');
localStorage.removeItem('tw_wisp_public_choice');
} else {
localStorage.setItem('tw_wisp_excluded', '1');
localStorage.setItem('tw_wisp_public_choice', '1');
sessionStorage.removeItem('tw_wisp_session');
}
render(true);
});
render();
})();
</script>
Use your site’s normal button styling, but retain a visible keyboard-focus indicator and the live status text.