Skip to content
// ============================================
// UTM TRACKER - Add to ALL regional sites
// ============================================
const UTMTracker = {
keys: ['utm_source','utm_medium','utm_campaign','utm_content','utm_term'],
cookieDays: 30,
// Call on every page load
init() {
this.captureFromURL();
this.attachRedirectHooks();
},
captureFromURL() {
const params = new URLSearchParams(window.location.search);
const found = {};
this.keys.forEach(k => { if (params.has(k)) found[k] = params.get(k); });
if (Object.keys(found).length > 0) {
if (!params.has('_carried')) {
this.store(found);
}
}
},
store(utms) {
const expires = new Date(Date.now() + this.cookieDays * 86400000).toUTCString();
document.cookie = `_utms=${encodeURIComponent(JSON.stringify(utms))};expires=${expires};path=/;SameSite=Lax`;
if (!this.getSessionId()) {
const sid = 'sid_' + Date.now() + '_' + Math.random().toString(36).slice(2);
document.cookie = `_sid=${sid};expires=${expires};path=/;SameSite=Lax`;
}
},
get() {
const raw = this.getCookie('_utms');
try { return raw ? JSON.parse(decodeURIComponent(raw)) : {}; } catch { return {}; }
},
getSessionId() {
return this.getCookie('_sid');
},
getCookie(name) {
return document.cookie.split('; ').find(r => r.startsWith(name + '='))?.split('=')[1] || null;
},
attachRedirectHooks() {
const REGIONAL_DOMAINS = [
'mackbooks.co.uk',
'mackbooks.eu',
'mackpublishing.au'
];
document.addEventListener('click', (e) => {
const link = e.target.closest('a');
if (!link) return;
const isRegional = REGIONAL_DOMAINS.some(d => link.href.includes(d));
if (!isRegional) return;
e.preventDefault();
const url = new URL(link.href);
const utms = this.get();
const sid = this.getSessionId();
Object.entries(utms).forEach(([k, v]) => url.searchParams.set(k, v));
if (sid) url.searchParams.set('_sid', sid);
url.searchParams.set('_carried', '1');
url.searchParams.set('_origin', 'us');
window.location.href = url.toString();
});
}
};
UTMTracker.init();