1<!DOCTYPE html><html lang="en" class="dark"><head><meta charset="utf-8"><link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="shortcut icon" href="/favicon.ico"><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="manifest" href="/site.webmanifest"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="generator" content="Astro v7.3.5"><title>Blog | AxiTrace - Server-Side Tracking Insights & Guides</title><meta name="description" content="Guides, tutorials, and deep dives on server-side tracking, Facebook CAPI, TikTok Events API, conversion optimization, and e-commerce analytics."><link rel="canonical" href="https://axitrace.com/blog/"><link rel="sitemap" href="/sitemap-index.xml"><meta name="theme-color" content="#ff7f00"><meta name="p:domain_verify" content="c6608cdbc3bc2791ee0e36e66d4e6a6d"><!-- Open Graph --><meta property="og:type" content="website"><meta property="og:url" content="https://axitrace.com/blog/"><meta property="og:title" content="Blog | AxiTrace - Server-Side Tracking Insights & Guides"><meta property="og:description" content="Guides, tutorials, and deep dives on server-side tracking, Facebook CAPI, TikTok Events API, conversion optimization, and e-commerce analytics."><meta property="og:image" content="https://axitrace.com/images/og-default.png"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630"><meta property="og:site_name" content="AxiTrace"><meta property="og:locale" content="en_US"><!-- Twitter --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Blog | AxiTrace - Server-Side Tracking Insights & Guides"><meta name="twitter:description" content="Guides, tutorials, and deep dives on server-side tracking, Facebook CAPI, TikTok Events API, conversion optimization, and e-commerce analytics."><meta name="twitter:image" content="https://axitrace.com/images/og-default.png"><!-- JSON-LD Structured Data -->
1<script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","@id":"https://axitrace.com/#organization","name":"AxiTrace","alternateName":"Axitrace","legalName":"Veltis Krzysztof Gaudy","url":"https://axitrace.com/","sameAs":["https://apps.shopify.com/partners/veltis-krzysztof-gaudy","https://profiles.wordpress.org/axitrace/","https://github.com/axitrace","https://www.linkedin.com/company/axitrace"],"founder":{"@type":"Person","name":"Krzysztof Gaudy","sameAs":"https://linkedin.com/in/krzysztofgaudy"},"logo":{"@type":"ImageObject","url":"https://axitrace.com/images/axitracelogo.png"},"description":"Server-side event tracking and conversion API platform for e-commerce businesses and digital advertisers.","foundingDate":"2025","address":{"@type":"PostalAddress","streetAddress":"CzÄstochowska 185","addressLocality":"Mstów","postalCode":"42-244","addressCountry":"PL"},"contactPoint":{"@type":"ContactPoint","contactType":"Customer Support","email":"[email protected]","availableLanguage":"English"},"vatID":"PL9491910146"}</script>
1<script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https://axitrace.com","name":"Home"}},{"@type":"ListItem","position":2,"item":{"@id":"https://axitrace.com/blog/","name":"Blog"}}]}</script>
1<script type="application/ld+json">{"@context":"https://schema.org","@type":"CollectionPage","@id":"https://axitrace.com/blog#webpage","url":"https://axitrace.com/blog/","name":"AxiTrace Blog - Server-Side Tracking Insights & Guides","description":"Guides, tutorials, and deep dives on server-side tracking, Facebook CAPI, TikTok Events API, conversion optimization, and e-commerce analytics.","isPartOf":{"@id":"https://axitrace.com/#website"}}</script>
1<!-- Third-party and self-tracking tags (GA4, Reddit, Meta, Clarity, Crisp, AxiTrace) --><!-- Google tag (gtag.js) -->
vendor: 63 bytes, line 1
1<script async src="https://www.googletagmanager.com/gtag/js?id=
1G-MKZSSX3HP7
vendor: 11 bytes, line 1
1"></script>
1<script> 2
vendor: 134 bytes, lines 2-6
2window.dataLayer = window.dataLayer || []; 3 function gtag(){dataLayer.push(arguments);} 4 gtag('js', new Date()); 5 6 gtag('config', '
6G-MKZSSX3HP7
vendor: 4 bytes, line 6
6');
7</script>
7<!-- Reddit Pixel - init only: init alone writes the _rdt_uuid cookie (the 8 match key AxiTrace forwards as Reddit CAPI user.uuid) without sending an 9 event. PageVisit is left to the CAPI feed, which carries a 10 conversion_id; the raw pixel call sends m.conversionId= empty, so the 11 two could never deduplicate and every visit was counted twice 12 (verified on production 2026-08-17). -->
12<script> 13 !function(w,d){if(!w.rdt){var p=w.rdt=function(){p.sendEvent?p.sendEvent.apply(p,arguments):p.callQueue.push(arguments)};p.callQueue=[];var t=d.createElement("script");t.src="https://www.redditstatic.com/ads/pixel.js",t.async=!0;var s=d.getElementsByTagName("script")[0];s.parentNode.insertBefore(t,s)}}(window,document); 14 rdt('init','a2_jhv49bhy61si'); 15</script>
15<!-- Meta Pixel Code -->
15<script>
vendor: 417 bytes, lines 15-24
15 16 !function(f,b,e,v,n,t,s) 17 {if(f.fbq)return;n=f.fbq=function(){n.callMethod? 18 n.callMethod.apply(n,arguments):n.queue.push(arguments)}; 19 if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; 20 n.queue=[];t=b.createElement(e);t.async=!0; 21 t.src=v;s=b.getElementsByTagName(e)[0]; 22 s.parentNode.insertBefore(t,s)}(window, document,'script', 23 'https://connect.facebook.net/en_US/fbevents.js'); 24 fbq('init', '
242259492327922699
vendor: 4 bytes, line 24
24');
25</script>
25<noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=2259492327922699&ev=PageView&noscript=1"></noscript><!-- End Meta Pixel Code --><!-- Microsoft Clarity -->
25<script>(function(){const CLARITY_PROJECT_ID = "y3cl6kmwok"; 26 27 (function(c,l,a,r,i,t,y){ 28 c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; 29 t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i; 30 y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); 31 })(window, document, "clarity", "script", CLARITY_PROJECT_ID); 32})();</script>
32<!-- End Microsoft Clarity -->
32<script>(function(){const crispWebsiteId = "7d3d1384-dfd4-4616-b5ca-68a7b5c0b027"; 33 34 // Force English chatbox locale (CRISP_RUNTIME_CONFIG must be declared 35 // before the widget script loads, per Crisp docs). 36 window.CRISP_RUNTIME_CONFIG = { locale: "en" }; 37 window.$crisp = []; 38 window.CRISP_WEBSITE_ID = crispWebsiteId; 39 (function () { 40 d = document; 41 s = d.createElement("script"); 42 s.src = "https://client.crisp.chat/l.js"; 43 s.async = 1; 44 d.getElementsByTagName("head")[0].appendChild(s); 45 })(); 46})();</script>
46<!-- AxiTrace SDK - self-tracking, loaded synchronously (mirrors the documented customer install pattern) -->
46<script src="https://stat.axitrace.com/axitrack.js"></script>
46<script>(function(){const axitracePublicKey = "pk_live_b732367a3cd36b2c3f38671a84827b20"; 47 48 Axitrace.init({ apiUrl: 'https://stat.axitrace.com', publicKey: axitracePublicKey }); 49 })();</script>
49<link rel="stylesheet" href="/_astro/BaseLayout.DX6z9C0u.css"></head><body class="min-h-screen bg-bg text-text"><header class="fixed top-0 left-0 right-0 z-50 border-b border-white/[0.04]" id="navbar" data-astro-cid-l7arcky5><div class="absolute inset-0 bg-bg/60 backdrop-blur-xl saturate-150 -z-10" data-astro-cid-l7arcky5></div><nav class="mx-auto flex max-w-7xl items-center justify-between px-6 py-3.5 lg:px-8" aria-label="Main" data-astro-cid-l7arcky5><!-- Logo --><a href="/" class="flex items-center group" data-astro-cid-l7arcky5><img src="/images/axitracelogo.png" alt="AxiTrace - Server-Side Tracking Platform" class="h-11 w-auto" data-astro-cid-l7arcky5></a><!-- Desktop nav --><div class="hidden items-center gap-1 md:flex" data-astro-cid-l7arcky5><a href="/features/" class="rounded-lg px-3.5 py-2 text-[13px] font-medium text-text-secondary transition-colors hover:text-text hover:bg-white/[0.06] aria-[current=page]:text-text" data-astro-cid-l7arcky5>Features</a><a href="/click-fraud-protection/" class="rounded-lg px-3.5 py-2 text-[13px] font-medium text-text-secondary transition-colors hover:text-text hover:bg-white/[0.06] aria-[current=page]:text-text" data-astro-cid-l7arcky5>Click protection</a><a href="/pricing/" class="rounded-lg px-3.5 py-2 text-[13px] font-medium text-text-secondary transition-colors hover:text-text hover:bg-white/[0.06] aria-[current=page]:text-text" data-astro-cid-l7arcky5>Pricing</a><a href="/blog/" aria-current="page" class="rounded-lg px-3.5 py-2 text-[13px] font-medium text-text-secondary transition-colors hover:text-text hover:bg-white/[0.06] aria-[current=page]:text-text" data-astro-cid-l7arcky5>Blog</a><a href="/docs" class="rounded-lg px-3.5 py-2 text-[13px] font-medium text-text-secondary transition-colors hover:text-text hover:bg-white/[0.06] aria-[current=page]:text-text" data-astro-cid-l7arcky5>Docs</a><div class="flex items-center" data-tools-menu data-astro-cid-l7arcky5><div class="tools-trigger flex items-center rounded-lg transition-colors" data-astro-cid-l7arcky5><a href="/tools/" class="rounded-l-lg py-2 pl-3.5 pr-1 text-[13px] font-medium text-text-secondary transition-colors hover:text-text" data-astro-cid-l7arcky5>Free tools</a><button type="button" class="tools-chevron flex h-8 w-7 items-center justify-center rounded-r-lg text-text-muted transition-colors hover:text-text focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent-light" aria-expanded="false" aria-controls="tools-menu" aria-label="Show free tools" data-tools-menu-button data-astro-cid-l7arcky5><svg class="h-3.5 w-3.5 transition-transform duration-200" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true" data-astro-cid-l7arcky5><path stroke-linecap="round" stroke-linejoin="round" d="M5.5 8l4.5 4.5L14.5 8" data-astro-cid-l7arcky5></path></svg></button></div><div id="tools-menu" class="tools-panel pointer-events-none absolute inset-x-0 top-full flex justify-center px-6" data-state="closed" data-testid="tools-menu" data-astro-cid-l7arcky5><div class="pointer-events-auto w-full max-w-[880px] pt-2" data-astro-cid-l7arcky5><div class="rounded-2xl border border-white/[0.08] bg-[#0C0D0F]/[0.97] p-2 shadow-[0_28px_70px_-20px_rgba(0,0,0,0.85),0_0_0_1px_rgba(0,0,0,0.4)] backdrop-blur-xl" data-astro-cid-l7arcky5><div class="grid grid-cols-[232px_1fr] gap-2 lg:grid-cols-[300px_1fr]" data-astro-cid-l7arcky5><a href="/tools/website-tracking-checker/" class="tools-featured group relative flex flex-col overflow-hidden rounded-xl p-5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent-light" data-testid="tools-menu-featured" data-astro-cid-l7arcky5><span class="pointer-events-none absolute inset-0 tools-featured-dots" aria-hidden="true" data-astro-cid-l7arcky5></span><span class="relative flex items-center justify-between gap-3" data-astro-cid-l7arcky5><span class="icon-box h-10 w-10 border border-accent/25 bg-accent/15 text-accent-light" data-astro-cid-l7arcky5><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-globe h-5 w-5" aria-hidden="true" data-astro-cid-l7arcky5="true"><circle cx="12" cy="12" r="10"></circle><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"></path><path d="M2 12h20"></path></svg></span><span aria-hidden="true" class="rounded-full border border-white/10 bg-black/30 px-2.5 py-1 text-[11px] font-medium text-text-secondary" data-astro-cid-l7arcky5>
49Full report</span></span><span class="relative mt-4 text-[15px] font-semibold text-text" data-astro-cid-l7arcky5>Website tracking checker</span><span class="relative mt-1.5 text-[13px] leading-relaxed text-text-secondary" data-astro-cid-l7arcky5>Scan your store in about 40 seconds and get a fix for every issue.</span><span class="relative mt-4 flex flex-wrap gap-1.5" aria-hidden="true" data-astro-cid-l7arcky5><span class="inline-flex items-center gap-1.5 rounded-md bg-black/30 px-2 py-1 text-[11px] text-text-secondary" data-astro-cid-l7arcky5><span class="h-1.5 w-1.5 rounded-full bg-error" data-astro-cid-l7arcky5></span>Fix today</span><span class="inline-flex items-center gap-1.5 rounded-md bg-black/30 px-2 py-1 text-[11px] text-text-secondary" data-astro-cid-l7arcky5><span class="h-1.5 w-1.5 rounded-full bg-warning" data-astro-cid-l7arcky5></span>Improve</span><span class="inline-flex items-center gap-1.5 rounded-md bg-black/30 px-2 py-1 text-[11px] text-text-secondary" data-astro-cid-l7arcky5><span class="h-1.5 w-1.5 rounded-full bg-success" data-astro-cid-l7arcky5></span>Working</span></span><span class="relative mt-auto inline-flex items-center gap-1.5 pt-5 text-[13px] font-semibold text-accent-light" data-astro-cid-l7arcky5>Run a free scan<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right h-4 w-4 transition-transform duration-200 group-hover:translate-x-0.5" aria-hidden="true" data-astro-cid-l7arcky5="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></span></a><div class="flex flex-col py-1" data-astro-cid-l7arcky5><p class="px-3 pb-1.5 pt-2 text-[11px] font-semibold uppercase tracking-[0.08em] text-text-muted" data-astro-cid-l7arcky5>More free tools</p><ul class="grid flex-1 auto-rows-fr grid-cols-2 gap-1" data-astro-cid-l7arcky5><li data-astro-cid-l7arcky5><a href="/tools/meta-pixel-capi-checker/" class="tools-item group flex h-full items-center gap-3 rounded-xl p-3 transition-colors hover:bg-white/[0.04] focus-visible:bg-white/[0.04] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent-light aria-[current=page]:bg-accent/[0.07]" data-astro-cid-l7arcky5><span class="icon-box h-9 w-9 shrink-0 border border-white/[0.07] bg-white/[0.03] text-text-secondary transition-colors group-hover:border-accent/30 group-hover:text-accent-light group-aria-[current=page]:border-accent/30 group-aria-[current=page]:text-accent-light" data-astro-cid-l7arcky5><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-target h-[18px] w-[18px]" aria-hidden="true" data-astro-cid-l7arcky5="true"><circle cx="12" cy="12" r="10"></circle><circle cx="12" cy="12" r="6"></circle><circle cx="12" cy="12" r="2"></circle></svg></span><span class="min-w-0" data-astro-cid-l7arcky5><span class="block text-[13.5px] font-semibold text-text transition-colors group-hover:text-white" data-astro-cid-l7arcky5>Meta Pixel and CAPI checker</span><span class="mt-0.5 block text-[12.5px] leading-snug text-text-muted" data-astro-cid-l7arcky5>Duplicate pixels, missing event_id and short-lived _fbp cookies.</span></span></a></li><li data-astro-cid-l7arcky5><a href="/tools/consent-mode-v2-checker/" class="tools-item group flex h-full items-center gap-3 rounded-xl p-3 transition-colors hover:bg-white/[0.04] focus-visible:bg-white/[0.04] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent-light aria-[current=page]:bg-accent/[0.07]" data-astro-cid-l7arcky5><span class="icon-box h-9 w-9 shrink-0 border border-white/[0.07] bg-white/[0.03] text-text-secondary transition-colors group-hover:border-accent/30 group-hover:text-accent-light group-aria-[current=page]:border-accent/30 group-aria-[current=page]:text-accent-light" data-astro-cid-l7arcky5><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield-check h-[18px] w-[18px]" aria-hidden="true" data-astro-cid-l7arcky5="true"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path><path d="m9 12 2 2 4-4"></path></svg></span><span class="min-w-0" data-astro-cid-l7arcky5><span class="block text-[13.5px] font-semibold text-text transition-colors group-hover:text-white" data-astro-cid-l7arcky5>Consent Mode v2 checker</span><span class="mt-0.5 block text-[12.5px] leading-snug text-text-muted" data-astro-cid-l7arcky5>What your tags send before consent and after Reject.</span></span></a></li><li data-astro-cid-l7arcky5><a href="/tools/capi-deduplication-checker/" class="tools-item group flex h-full items-center gap-3 rounded-xl p-3 transition-colors hover:bg-white/[0.04] focus-visible:bg-white/[0.04] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent-light aria-[current=page]:bg-accent/[0.07]" data-astro-cid-l7arcky5><span class="icon-box h-9 w-9 shrink-0 border border-white/[0.07] bg-white/[0.03] text-text-secondary transition-colors group-hover:border-accent/30 group-hover:text-accent-light group-aria-[current=page]:border-accent/30 group-aria-[current=page]:text-accent-light" data-astro-cid-l7arcky5><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-braces h-[18px] w-[18px]" aria-hidden="true" data-astro-cid-l7arcky5="true"><path d="M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1"></path><path d="M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1"></path></svg></span><span class="min-w-0" data-astro-cid-l7arcky5><span class="block text-[13.5px] font-semibold text-text transition-colors group-hover:text-white" data-astro-cid-l7arcky5>CAPI deduplication checker</span><span class="mt-0.5 block text-[12.5px] leading-snug text-text-muted" data-astro-cid-l7arcky5>Will Meta, TikTok, Pinterest or Reddit deduplicate your events?</span></span></a></li><li data-astro-cid-l7arcky5><a href="/tools/utm-builder/" class="tools-item group flex h-full items-center gap-3 rounded-xl p-3 transition-colors hover:bg-white/[0.04] focus-visible:bg-white/[0.04] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent-light aria-[current=page]:bg-accent/[0.07]" data-astro-cid-l7arcky5><span class="icon-box h-9 w-9 shrink-0 border border-white/[0.07] bg-white/[0.03] text-text-secondary transition-colors group-hover:border-accent/30 group-hover:text-accent-light group-aria-[current=page]:border-accent/30 group-aria-[current=page]:text-accent-light" data-astro-cid-l7arcky5><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link2 lucide-link-2 h-[18px] w-[18px]" aria-hidden="true" data-astro-cid-l7arcky5="true"><path d="M9 17H7A5 5 0 0 1 7 7h2"></path><path d="M15 7h2a5 5 0 1 1 0 10h-2"></path><line x1="8" x2="16" y1="12" y2="12"></line></svg></span><span class="min-w-0" data-astro-cid-l7arcky5><span class="block text-[13.5px] font-semibold text-text transition-colors group-hover:text-white" data-astro-cid-l7arcky5>UTM builder</span><span class="mt-0.5 block text-[12.5px] leading-snug text-text-muted" data-astro-cid-l7arcky5>UTM templates with the right macros for every ad platform.</span></span></a></li></ul></div></div>
49<div class="mt-2 flex items-center justify-end gap-4 rounded-xl lg:justify-between border border-white/[0.05] bg-white/[0.02] px-4 py-2.5" data-astro-cid-l7arcky5><p class="hidden text-[12.5px] text-text-muted lg:block" data-astro-cid-l7arcky5>Free, no signup. Real browser scans with a fix for every issue.</p><div class="flex items-center gap-5" data-astro-cid-l7arcky5><a href="/tools/" class="group inline-flex items-center gap-1 rounded-md py-1 text-[12.5px] font-semibold text-text-secondary transition-colors hover:text-accent-light focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent-light" data-astro-cid-l7arcky5>All free tools<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right h-3.5 w-3.5 transition-transform duration-200 group-hover:translate-x-0.5" aria-hidden="true" data-astro-cid-l7arcky5="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a><a href="/tools/about-our-scanner/" class="group inline-flex items-center gap-1 rounded-md py-1 text-[12.5px] font-semibold text-text-secondary transition-colors hover:text-accent-light focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent-light" data-astro-cid-l7arcky5>How our scanner works<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right h-3.5 w-3.5 transition-transform duration-200 group-hover:translate-x-0.5" aria-hidden="true" data-astro-cid-l7arcky5="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a></div></div></div></div></div></div></div><!-- CTA buttons --><div class="hidden items-center gap-3 md:flex" data-astro-cid-l7arcky5><a href="/login" class="rounded-lg px-3.5 py-2 text-[13px] text-text-secondary transition-colors hover:text-text" data-astro-cid-l7arcky5>Log in</a><a href="/register" class="btn-glass rounded-lg px-4 py-2 text-[13px] font-medium text-white" data-astro-cid-l7arcky5>Start Free</a></div><!-- Mobile hamburger --><button id="mobile-menu-btn" type="button" class="flex h-9 w-9 items-center justify-center rounded-lg text-text-secondary transition-colors hover:bg-white/[0.06] hover:text-text md:hidden" aria-label="Toggle menu" aria-expanded="false" aria-controls="mobile-menu" data-astro-cid-l7arcky5><svg class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true" data-astro-cid-l7arcky5><path stroke-linecap="round" stroke-linejoin="round" d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5" data-astro-cid-l7arcky5></path></svg></button></nav><!-- Mobile menu --><div id="mobile-menu" class="hidden max-h-[calc(100dvh-4.5rem)] overflow-y-auto overscroll-contain border-t border-white/[0.04] bg-bg/95 px-6 py-5 md:hidden" data-astro-cid-l7arcky5><div class="flex flex-col gap-1" data-astro-cid-l7arcky5><a href="/features/" class="rounded-lg px-3 py-2.5 text-sm text-text-secondary transition-colors hover:text-text hover:bg-white/[0.04] aria-[current=page]:text-text" data-astro-cid-l7arcky5>Features</a><a href="/click-fraud-protection/" class="rounded-lg px-3 py-2.5 text-sm text-text-secondary transition-colors hover:text-text hover:bg-white/[0.04] aria-[current=page]:text-text" data-astro-cid-l7arcky5>Click protection</a><a href="/pricing/" class="rounded-lg px-3 py-2.5 text-sm text-text-secondary transition-colors hover:text-text hover:bg-white/[0.04] aria-[current=page]:text-text" data-astro-cid-l7arcky5>Pricing</a><a href="/blog/" aria-current="page" class="rounded-lg px-3 py-2.5 text-sm text-text-secondary transition-colors hover:text-text hover:bg-white/[0.04] aria-[current=page]:text-text" data-astro-cid-l7arcky5>Blog</a><a href="/docs" class="rounded-lg px-3 py-2.5 text-sm text-text-secondary transition-colors hover:text-text hover:bg-white/[0.04] aria-[current=page]:text-text" data-astro-cid-l7arcky5>Docs</a><div data-mobile-tools data-astro-cid-l7arcky5><button type="button" class="mobile-tools-toggle flex min-h-[44px] w-full items-center justify-between rounded-lg px-3 text-left text-sm transition-colors hover:bg-white/[0.04] hover:text-text text-text-secondary" aria-expanded="false" aria-controls="mobile-tools" data-mobile-tools-button data-astro-cid-l7arcky5>Free tools<svg class="h-4 w-4 text-text-muted transition-transform duration-200" viewB
49ox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true" data-astro-cid-l7arcky5><path stroke-linecap="round" stroke-linejoin="round" d="M5.5 8l4.5 4.5L14.5 8" data-astro-cid-l7arcky5></path></svg></button><div id="mobile-tools" class="mobile-tools-panel" hidden data-testid="mobile-tools" data-astro-cid-l7arcky5><ul class="mt-1 flex flex-col gap-0.5 border-l border-white/[0.06] pl-2 ml-3" data-astro-cid-l7arcky5><li data-astro-cid-l7arcky5><a href="/tools/website-tracking-checker/" class="group flex min-h-[44px] items-center gap-3 rounded-lg px-2 py-2 transition-colors hover:bg-white/[0.04] aria-[current=page]:bg-accent/[0.07]" data-astro-cid-l7arcky5><span class="icon-box h-8 w-8 shrink-0 border border-white/[0.07] bg-white/[0.03] text-text-secondary group-aria-[current=page]:border-accent/30 group-aria-[current=page]:text-accent-light" data-astro-cid-l7arcky5><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-globe h-4 w-4" aria-hidden="true" data-astro-cid-l7arcky5="true"><circle cx="12" cy="12" r="10"></circle><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"></path><path d="M2 12h20"></path></svg></span><span class="min-w-0" data-astro-cid-l7arcky5><span class="block text-sm font-medium text-text" data-astro-cid-l7arcky5>Website tracking checker</span><span class="mt-0.5 block text-xs leading-snug text-text-muted" data-astro-cid-l7arcky5>Scan your store in about 40 seconds and get a fix for every issue.</span></span></a></li><li data-astro-cid-l7arcky5><a href="/tools/meta-pixel-capi-checker/" class="group flex min-h-[44px] items-center gap-3 rounded-lg px-2 py-2 transition-colors hover:bg-white/[0.04] aria-[current=page]:bg-accent/[0.07]" data-astro-cid-l7arcky5><span class="icon-box h-8 w-8 shrink-0 border border-white/[0.07] bg-white/[0.03] text-text-secondary group-aria-[current=page]:border-accent/30 group-aria-[current=page]:text-accent-light" data-astro-cid-l7arcky5><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-target h-4 w-4" aria-hidden="true" data-astro-cid-l7arcky5="true"><circle cx="12" cy="12" r="10"></circle><circle cx="12" cy="12" r="6"></circle><circle cx="12" cy="12" r="2"></circle></svg></span><span class="min-w-0" data-astro-cid-l7arcky5><span class="block text-sm font-medium text-text" data-astro-cid-l7arcky5>Meta Pixel and CAPI checker</span><span class="mt-0.5 block text-xs leading-snug text-text-muted" data-astro-cid-l7arcky5>Duplicate pixels, missing event_id and short-lived _fbp cookies.</span></span></a></li><li data-astro-cid-l7arcky5><a href="/tools/consent-mode-v2-checker/" class="group flex min-h-[44px] items-center gap-3 rounded-lg px-2 py-2 transition-colors hover:bg-white/[0.04] aria-[current=page]:bg-accent/[0.07]" data-astro-cid-l7arcky5><span class="icon-box h-8 w-8 shrink-0 border border-white/[0.07] bg-white/[0.03] text-text-secondary group-aria-[current=page]:border-accent/30 group-aria-[current=page]:text-accent-light" data-astro-cid-l7arcky5><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield-check h-4 w-4" aria-hidden="true" data-astro-cid-l7arcky5="true"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path><path d="m9 12 2 2 4-4"></path></svg></span><span class="min-w-0" data-astro-cid-l7arcky5><span class="block text-sm font-medium text-text" data-astro-cid-l7arcky5>Consent Mode v2 checker</span><span class="mt-0.5 block text-xs leading-snug text-text-muted" data-astro-cid-l7arcky5>What your tags send before consent and after Reject.</span></span></a></li><li data-astro-cid-l7arcky5><a href="/tools/capi-deduplication-checker/" class="group flex min-h-[44px] items-center gap-3 rounded-lg px-2 py-2 transition-colors hover:bg-white/[0.04] aria-[current=page]:bg-accent/[0.07]" data-astro-cid-l7arcky5><span class="icon-box h-8 w-8 shrink-0 border border-white/[0.07] bg-white/[0.03] text-text-secondary group-aria-[current=page]:border-accent/30 group-aria-[current=page]:text-accent-light" data-astro-cid-l7arcky5><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-braces h-4 w-4" aria-hidden="true" data-astro-cid-l7arcky5="true"><path d="M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1"></path><path d="M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1"></path></svg></span><span class="min-w-0" data-astro-cid-l7arcky5><span class="block text-sm font-medium text-text" data-astro-cid-l7arcky5>CAPI deduplication checker</span><span class="mt-0.5 block text-xs leading-snug text-text-muted" data-astro-cid-l7arcky5>Will Meta, TikTok, Pinterest or Reddit deduplicate your events?</span></span></a></li><li data-astro-cid-l7arcky5><a href="/tools/utm-builder/" class="group flex min-h-[44px] items-center gap-3 rounded-lg px-2 py-2 transition-colors hover:bg-white/[0.04] aria-[current=page]:bg-accent/[0.07]" data-astro-cid-l7arcky5><span class="icon-box h-8 w-8 shrink-0 border border-white/[0.07] bg-white/[0.03] text-text-secondary group-aria-[current=page]:border-accent/30 group-aria-[current=page]:text-accent-light" data-astro-cid-l7arcky5><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link2 lucide-link-2 h-4 w-4" aria-hidden="true" data-astro-cid-l7arcky5="true"><path d="M9 17H7A5 5 0 0 1 7 7h2"></path><path d="M15 7h2a5 5 0 1 1 0 10h-2"></path><line x1="8" x2="16" y1="12" y2="12"></line></svg></span><span class="min-w-0" data-astro-cid-l7arcky5><span class="block text-sm font-medium text-text" data-astro-cid-l7arcky5>UTM builder</span><span class="mt-0.5 block text-xs leading-snug text-text-muted" data-astro-cid-l7arcky5>UTM templates with the right macros for every ad platform.</span></span></a></li></ul><div class="ml-3 mt-1 flex flex-wrap gap-x-5 pl-2" data-astro-cid-l7arcky5><a href="/tools/" class="inline-flex min-h-[44px] items-center gap-1 px-2 text-[13px] font-semibold text-accent-light" data-astro-cid-l7arcky5>All free tools<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right h-3.5 w-3.5" aria-hidden="true" data-astro-cid-l7arcky5="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a><a href="/tools/about-our-scanner/" class="inline-flex min-h-[44px] items-center gap-1 px-2 text-[13px] font-semibold text-accent-light" data-astro-cid-l7arcky5>How our scanner works<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right h-3.5 w-3.5" aria-hidden="true" data-astro-cid-l7arcky5="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a></div></div></div><div class="my-3 h-px bg-white/[0.06]" data-astro-cid-l7arcky5></div><a href="/login" class="rounded-lg px-3 py-2.5 text-sm text-text-secondary transition-colors hover:text-text" data-astro-cid-l7arcky5>Log in</a><a href="/register" class="btn-glass mt-1 rounded-lg px-4 py-2.5 text-center text-sm font-medium text-white" data-astro-cid-l7arcky5>Start Free</a></div></div></header>
49<script type="module">function e(){let e=document.getElementById(`mobile-menu-btn`),t=document.getElementById(`mobile-menu`);if(!e||!t)return;e.addEventListener(`click`,()=>{let n=t.classList.toggle(`hidden`);e.setAttribute(`aria-expanded`,String(!n))});let n=t.querySelector(`[data-mobile-tools-button]`),r=document.getElementById(n?.getAttribute(`aria-controls`)??``);n&&r&&n.addEventListener(`click`,()=>{let e=n.getAttribute(`aria-expanded`)!==`true`;n.setAttribute(`aria-expanded`,String(e)),r.hidden=!e})}function t(){let e=document.querySelector(`[data-tools-menu]`),t=e?.querySelector(`[data-tools-menu-button]`),n=document.getElementById(t?.getAttribute(`aria-controls`)??``);if(!e||!t||!n)return;let r,i,a=null,o=()=>{window.clearTimeout(r),window.clearTimeout(i)},s=()=>t.getAttribute(`aria-expanded`)===`true`,c=(e,r=null)=>{o(),a=e?r:null,t.setAttribute(`aria-expanded`,String(e)),n.dataset.state=e?`open`:`closed`},l=()=>n.querySelector(`a[href]`);e.addEventListener(`pointerenter`,e=>{e.pointerType===`mouse`&&(window.clearTimeout(i),s()||(r=window.setTimeout(()=>c(!0,`hover`),80)))}),e.addEventListener(`pointerleave`,t=>{t.pointerType===`mouse`&&(window.clearTimeout(r),s()&&a===`hover`&&!e.contains(document.activeElement)&&(i=window.setTimeout(()=>c(!1),200)))}),t.addEventListener(`click`,()=>{s()&&a!==`hover`?c(!1):c(!0,`click`)}),t.addEventListener(`keydown`,e=>{e.key===`ArrowDown`&&(e.preventDefault(),c(!0,`click`),l()?.focus())}),e.addEventListener(`keydown`,e=>{e.key===`Escape`&&s()&&(e.preventDefault(),c(!1),t.focus())}),e.addEventListener(`focusout`,t=>{let n=t.relatedTarget;s()&&n instanceof Node&&!e.contains(n)&&c(!1)}),document.addEventListener(`pointerdown`,t=>{s()&&t.target instanceof Node&&!e.contains(t.target)&&c(!1)})}e(),t();</script>
49<main><section class="relative pt-28 pb-8 lg:pt-36 lg:pb-12"><div class="mx-auto max-w-3xl px-6 text-center lg:px-8"><div class="fade-in-up"><div class="badge mx-auto mb-4 text-text-muted"><svg class="h-3.5 w-3.5 text-accent-light" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M12 7.5h1.5m-1.5 3h1.5m-7.5 3h7.5m-7.5 3h7.5m3-9h3.375c.621 0 1.125.504 1.125 1.125V18a2.25 2.25 0 01-2.25 2.25M16.5 7.5V18a2.25 2.25 0 002.25 2.25M16.5 7.5V4.875c0-.621-.504-1.125-1.125-1.125H4.125C3.504 3.75 3 4.254 3 4.875V18a2.25 2.25 0 002.25 2.25h13.5M6 7.5h3v3H6v-3z"></path></svg>Blog</div><h1 class="text-3xl font-bold tracking-tight sm:text-4xl lg:text-5xl">Insights on <span class="gradient-text">Server-Side Tracking</span></h1><p class="mt-5 text-base text-text-secondary sm:text-lg">Guides, tutorials, and deep dives on conversion tracking, ad platform APIs, and e-commerce analytics.</p></div></div></section><section class="relative py-8 lg:py-12"><div class="mx-auto max-w-7xl px-6 lg:px-8"><div class="fade-in-up"><a href="/blog/facebook-pixel-vs-conversions-api/" class="card group grid lg:grid-cols-2 gap-0 overflow-hidden"><!-- Image side --><div class="relative aspect-[16/9] lg:aspect-auto overflow-hidden"><img src="/images/blog/facebook-pixel-vs-conversions-api.png" alt="Facebook Pixel vs Conversions API" class="h-full w-full object-cover transition-transform duration-500 group-hover:scale-105"><!-- Featured badge overlay --><div class="absolute top-4 left-4"><span class="inline-flex items-center gap-1.5 rounded-full bg-accent/90 px-3 py-1 text-xs font-semibold text-white shadow-lg"><svg class="h-3 w-3" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z"></path></svg>Featured</span></div></div><!-- Text side --><div class="flex flex-col justify-center p-8 lg:p-10"><span class="inline-flex w-fit items-center rounded-full border border-accent/20 bg-accent/5 px-2.5 py-0.5 text-[11px] font-medium text-accent-light mb-4">Guide</span><h2 class="text-2xl font-bold text-text leading-tight group-hover:text-accent-light transition-colors lg:text-3xl">Facebook Pixel vs Conversions API</h2><p class="mt-3 text-sm text-text-secondary leading-relaxed line-clamp-3">Not two ways of doing the same thing. The Pixel creates the _fbp cookie that CAPI depends on, and CAPI sees conversions the browser never will. What each one can and cannot observe, and why removing either one costs you money.</p><div class="mt-6 flex items-center gap-3 text-xs text-text-muted"><span class="font-medium text-text-secondary">Chris Gaudy</span><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><time datetime="2026-09-08T00:00:00.000Z">Sep 8, 2026</time><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><span>14 min read</span></div><div class="mt-6"><span class="inline-flex items-center gap-1.5 text-sm font-medium text-accent-light group-hover:gap-2.5 transition-all">Read article<svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M13.5 4.5L21 12m0 0l-7.5 7.5M21 12H3"></path></svg></span></div></div></a></div></div></section><section class="relative py-8 lg:py-12"><div class="mx-auto max-w-7xl px-6 lg:px-8"><div class="grid gap-6 sm:grid-cols-2 lg:grid-cols-3"><div class="fade-in-up stagger-1"><a href="/blog/check-meta-pixel-conversions-api/" class="card group flex flex-col"><!-- Image / Fallback gradient --><div class="relative aspect-[16/9] overflow-hidden rounded-t-2xl"><img src="/images/blog/check-meta-pixel-conversions-api.png" alt="How to Check if Your Meta Pixel and Conversions API Are Working" class="h-full w-full object-cover transition-transform duration-500 group-hover:scale-105" loading="lazy"></div><!-- Content --><div class="flex flex-1 flex-col p-6"><!-- Category badge --><div class="mb-3"><span class="inline-flex items-center rounded-full border border-accent/20 bg-accent/5 px-2.5 py-0.5 text-[11px] font-medium text-accent-light">Guide</span></div><!-- Title -->
49<h3 class="text-lg font-semibold text-text leading-snug group-hover:text-accent-light transition-colors line-clamp-2">How to Check if Your Meta Pixel and Conversions API Are Working</h3><!-- Description --><p class="mt-2 text-sm text-text-secondary leading-relaxed line-clamp-2 flex-1">A green Pixel Helper icon is not proof that your Meta tracking works. The five checks that matter (pixel loads once, PageView, ViewContent with value, event_id for deduplication, _fbp and _fbc cookies), how to run each one by hand, and how to run all of them in about 40 seconds.</p><!-- Meta --><div class="mt-4 flex items-center gap-3 text-xs text-text-muted"><span class="font-medium text-text-secondary">Chris Gaudy</span><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><time datetime="2026-09-30T00:00:00.000Z">Sep 30, 2026</time><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><span>11 min read</span></div></div></a></div><div class="fade-in-up stagger-2"><a href="/blog/safari-itp-7-day-cookie-limit/" class="card group flex flex-col"><!-- Image / Fallback gradient --><div class="relative aspect-[16/9] overflow-hidden rounded-t-2xl"><img src="/images/blog/safari-itp-7-day-cookie-limit.png" alt="Safari Deletes Your Tracking Cookies After 7 Days: How to Check Your Store" class="h-full w-full object-cover transition-transform duration-500 group-hover:scale-105" loading="lazy"></div><!-- Content --><div class="flex flex-1 flex-col p-6"><!-- Category badge --><div class="mb-3"><span class="inline-flex items-center rounded-full border border-accent/20 bg-accent/5 px-2.5 py-0.5 text-[11px] font-medium text-accent-light">Guide</span></div><!-- Title --><h3 class="text-lg font-semibold text-text leading-snug group-hover:text-accent-light transition-colors line-clamp-2">Safari Deletes Your Tracking Cookies After 7 Days: How to Check Your Store</h3><!-- Description --><p class="mt-2 text-sm text-text-secondary leading-relaxed line-clamp-2 flex-1">Safari caps cookies written by JavaScript at 7 days (24 hours after an ad click), and applies the same cap to cookies from a CNAME or a server on a different IP. What that does to returning visitors and attribution, how to check it in Safari, and how to fix it.</p><!-- Meta --><div class="mt-4 flex items-center gap-3 text-xs text-text-muted"><span class="font-medium text-text-secondary">Chris Gaudy</span><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><time datetime="2026-09-30T00:00:00.000Z">Sep 30, 2026</time><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><span>10 min read</span></div></div></a></div><div class="fade-in-up stagger-3"><a href="/blog/test-capi-deduplication-pair/" class="card group flex flex-col"><!-- Image / Fallback gradient --><div class="relative aspect-[16/9] overflow-hidden rounded-t-2xl"><img src="/images/blog/test-capi-deduplication-pair.png" alt="Meta CAPI Deduplication: Why Events Count Twice and How to Test a Pair" class="h-full w-full object-cover transition-transform duration-500 group-hover:scale-105" loading="lazy"></div><!-- Content --><div class="flex flex-1 flex-col p-6"><!-- Category badge --><div class="mb-3"><span class="inline-flex items-center rounded-full border border-accent/20 bg-accent/5 px-2.5 py-0.5 text-[11px] font-medium text-accent-light">Guide</span></div><!-- Title --><h3 class="text-lg font-semibold text-text leading-snug group-hover:text-accent-light transition-colors line-clamp-2">Meta CAPI Deduplication: Why Events Count Twice and How to Test a Pair</h3><!-- Description --><p class="mt-2 text-sm text-text-secondary leading-relaxed line-clamp-2 flex-1">How Meta matches a browser pixel event with its Conversions API copy (event_name plus event_id, 48 hour window), the six ways the match breaks, how TikTok, Pinterest and Reddit differ, and how to test one browser and server pair in your browser without uploading anything.</p><!-- Meta --><div class="mt-4 flex items-center gap-3 text-xs text-text-muted"><span class="font-medium text-text-secondary">Chris Gaudy</span><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><time datetime="2026-09-30T00:00:00.000Z">Sep 30, 2026</time><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><span>10 min read</span></div></div></a></div><div class="fade-in-up stagger-4"><a href="/blog/test-consent-mode-v2/" class="card group flex flex-col"><!-- Image / Fallback gradient --><div class="relative aspect-[16/9] overflow-hidden rounded-t-2xl"><img src="/images/blog/test-consent-mode-v2.png" alt="Consent Mode v2: How to Test What Your Site Sends Before and After Reject" class="h-full w-full object-cover transition-transform duration-500 group-hover:scale-105" loading="lazy"></div><!-- Content --><div class="flex flex-1 flex-col p-6"><!-- Category badge --><div class="mb-3"><span class="inline-flex items-center rounded-full border border-accent/20 bg-accent/5 px-2.5 py-0.5 text-[11px] font-medium text-accent-light">Guide</span></div><!-- Title -->
49<h3 class="text-lg font-semibold text-text leading-snug group-hover:text-accent-light transition-colors line-clamp-2">Consent Mode v2: How to Test What Your Site Sends Before and After Reject</h3><!-- Description --><p class="mt-2 text-sm text-text-secondary leading-relaxed line-clamp-2 flex-1">How to check Google Consent Mode v2 on your own site: read the gcs and gcd parameters in the Network tab, test what fires before anyone touches the banner and after a visitor clicks Reject, and find the tags that ignore the choice.</p><!-- Meta --><div class="mt-4 flex items-center gap-3 text-xs text-text-muted"><span class="font-medium text-text-secondary">Chris Gaudy</span><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><time datetime="2026-09-30T00:00:00.000Z">Sep 30, 2026</time><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><span>10 min read</span></div></div></a></div><div class="fade-in-up stagger-5"><a href="/blog/tiktok-events-api-woocommerce/" class="card group flex flex-col"><!-- Image / Fallback gradient --><div class="relative aspect-[16/9] overflow-hidden rounded-t-2xl"><img src="/images/blog/tiktok-events-api-woocommerce.png" alt="TikTok Events API for WooCommerce" class="h-full w-full object-cover transition-transform duration-500 group-hover:scale-105" loading="lazy"></div><!-- Content --><div class="flex flex-1 flex-col p-6"><!-- Category badge --><div class="mb-3"><span class="inline-flex items-center rounded-full border border-accent/20 bg-accent/5 px-2.5 py-0.5 text-[11px] font-medium text-accent-light">Guide</span></div><!-- Title --><h3 class="text-lg font-semibold text-text leading-snug group-hover:text-accent-light transition-colors line-clamp-2">TikTok Events API for WooCommerce</h3><!-- Description --><p class="mt-2 text-sm text-text-secondary leading-relaxed line-clamp-2 flex-1">How TikTok's server-side Events API actually works - the v1.3 payload, the hashed-vs-clear match keys, the 48-hour deduplication window - and why a WooCommerce store loses purchases without it. With the exact WooCommerce hooks that fix it.</p><!-- Meta --><div class="mt-4 flex items-center gap-3 text-xs text-text-muted"><span class="font-medium text-text-secondary">Chris Gaudy</span><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><time datetime="2026-09-08T00:00:00.000Z">Sep 8, 2026</time><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><span>17 min read</span></div></div></a></div><div class="fade-in-up stagger-6"><a href="/blog/utm-parameters-facebook-google-tiktok-reddit/" class="card group flex flex-col"><!-- Image / Fallback gradient --><div class="relative aspect-[16/9] overflow-hidden rounded-t-2xl"><img src="/images/blog/utm-parameters-facebook-google-tiktok-reddit.png" alt="UTM Parameters for Facebook, Google, TikTok &
49 Reddit Ads: 2026 Cheat Sheet" class="h-full w-full object-cover transition-transform duration-500 group-hover:scale-105" loading="lazy"></div><!-- Content --><div class="flex flex-1 flex-col p-6"><!-- Category badge --><div class="mb-3"><span class="inline-flex items-center rounded-full border border-accent/20 bg-accent/5 px-2.5 py-0.5 text-[11px] font-medium text-accent-light">Guide</span></div><!-- Title --><h3 class="text-lg font-semibold text-text leading-snug group-hover:text-accent-light transition-colors line-clamp-2">UTM Parameters for Facebook, Google, TikTok & Reddit Ads: 2026 Cheat Sheet</h3><!-- Description --><p class="mt-2 text-sm text-text-secondary leading-relaxed line-clamp-2 flex-1">Every ad platform has its own URL macros: {{campaign.name}}, {campaignid}, __CAMPAIGN_NAME__, {{CAMPAIGN_ID}}. Copy-paste UTM templates for Facebook, Google, TikTok and Reddit ads - plus a free UTM builder that generates your tagged URL in seconds.</p><!-- Meta --><div class="mt-4 flex items-center gap-3 text-xs text-text-muted"><span class="font-medium text-text-secondary">Chris Gaudy</span><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><time datetime="2026-08-12T00:00:00.000Z">Aug 12, 2026</time><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><span>12 min read</span></div></div></a></div><div class="fade-in-up stagger-6"><a href="/blog/woocommerce-conversion-tracking/" class="card group flex flex-col"><!-- Image / Fallback gradient --><div class="relative aspect-[16/9] overflow-hidden rounded-t-2xl"><div class="h-full w-full bg-gradient-to-br from-accent/10 via-surface to-surface-hover flex items-center justify-center"><svg class="h-12 w-12 text-accent/20" fill="none" viewBox="0 0 24 24" stroke-width="1" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M12 7.5h1.5m-1.5 3h1.5m-7.5 3h7.5m-7.5 3h7.5m3-9h3.375c.621 0 1.125.504 1.125 1.125V18a2.25 2.25 0 01-2.25 2.25M16.5 7.5V18a2.25 2.25 0 002.25 2.25M16.5 7.5V4.875c0-.621-.504-1.125-1.125-1.125H4.125C3.504 3.75 3 4.254 3 4.875V18a2.25 2.25 0 002.25 2.25h13.5M6 7.5h3v3H6v-3z"></path></svg></div></div><!-- Content --><div class="flex flex-1 flex-col p-6"><!-- Category badge --><div class="mb-3"><span class="inline-flex items-center rounded-full border border-accent/20 bg-accent/5 px-2.5 py-0.5 text-[11px] font-medium text-accent-light">Guide</span></div><!-- Title --><h3 class="text-lg font-semibold text-text leading-snug group-hover:text-accent-light transition-colors line-clamp-2">WooCommerce Conversion Tracking: Why Your Pixel Misses Sales (and the Server-Side Fix)</h3><!-- Description --><p class="mt-2 text-sm text-text-secondary leading-relaxed line-clamp-2 flex-1">WooCommerce reports fewer purchases than your store actually sold - or randomly doubles them. The real causes: the unreliable thank-you page, off-site gateways, Cart/Checkout Blocks, HPOS, and consent plugins. With the server-side fix.</p><!-- Meta --><div class="mt-4 flex items-center gap-3 text-xs text-text-muted"><span class="font-medium text-text-secondary">Chris Gaudy</span><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><time datetime="2026-06-19T00:00:00.000Z">Jun 19, 2026</time><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><span>17 min read</span></div></div></a></div><div class="fade-in-up stagger-6"><a href="/blog/ga4-server-side-events-not-showing/" class="card group flex flex-col"><!-- Image / Fallback gradient --><div class="relative aspect-[16/9] overflow-hidden rounded-t-2xl"><div class="h-full w-full bg-gradient-to-br from-accent/10 via-surface to-surface-hover flex items-center justify-center"><svg class="h-12 w-12 text-accent/20" fill="none" viewBox="0 0 24 24" stroke-width="1" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M12 7.5h1.5m-1.5 3h1.5m-7.5 3h7.5m-7.5 3h7.5m3-9h3.375c.621 0 1.125.504 1.125 1.125V18a2.25 2.25 0 01-2.25 2.25M16.5 7.5V18a2.25 2.25 0 002.25 2.25M16.5 7.5V4.875c0-.621-.504-1.125-1.125-1.125H4.125C3.504 3.75 3 4.254 3 4.875V18a2.25 2.25 0 002.25 2.25h13.5M6 7.5h3v3H6v-3z"></path></svg></div></div><!-- Content --><div class="flex flex-1 flex-col p-6"><!-- Category badge --><div class="mb-3"><span class="inline-flex items-center rounded-full border border-accent/20 bg-accent/5 px-2.5 py-0.5 text-[11px] font-medium text-accent-light">Guide</span></div><!-- Title -->
49<h3 class="text-lg font-semibold text-text leading-snug group-hover:text-accent-light transition-colors line-clamp-2">Why Your GA4 Server-Side Events Return Success but Never Show Up (and How to Fix It)</h3><!-- Description --><p class="mt-2 text-sm text-text-secondary leading-relaxed line-clamp-2 flex-1">You POST events to the GA4 Measurement Protocol, get a 2xx success, and nothing appears in your reports - or they land as ghost sessions and (not set) traffic. Here's every Measurement Protocol gotcha and the fix.</p><!-- Meta --><div class="mt-4 flex items-center gap-3 text-xs text-text-muted"><span class="font-medium text-text-secondary">Chris Gaudy</span><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><time datetime="2026-06-17T00:00:00.000Z">Jun 17, 2026</time><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><span>17 min read</span></div></div></a></div><div class="fade-in-up stagger-6"><a href="/blog/improve-event-match-quality/" class="card group flex flex-col"><!-- Image / Fallback gradient --><div class="relative aspect-[16/9] overflow-hidden rounded-t-2xl"><div class="h-full w-full bg-gradient-to-br from-accent/10 via-surface to-surface-hover flex items-center justify-center"><svg class="h-12 w-12 text-accent/20" fill="none" viewBox="0 0 24 24" stroke-width="1" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M12 7.5h1.5m-1.5 3h1.5m-7.5 3h7.5m-7.5 3h7.5m3-9h3.375c.621 0 1.125.504 1.125 1.125V18a2.25 2.25 0 01-2.25 2.25M16.5 7.5V18a2.25 2.25 0 002.25 2.25M16.5 7.5V4.875c0-.621-.504-1.125-1.125-1.125H4.125C3.504 3.75 3 4.254 3 4.875V18a2.25 2.25 0 002.25 2.25h13.5M6 7.5h3v3H6v-3z"></path></svg></div></div><!-- Content --><div class="flex flex-1 flex-col p-6"><!-- Category badge --><div class="mb-3"><span class="inline-flex items-center rounded-full border border-accent/20 bg-accent/5 px-2.5 py-0.5 text-[11px] font-medium text-accent-light">Guide</span></div><!-- Title --><h3 class="text-lg font-semibold text-text leading-snug group-hover:text-accent-light transition-colors line-clamp-2">Why Your Facebook Event Match Quality Score Is Low (and How to Raise It Above 8)</h3><!-- Description --><p class="mt-2 text-sm text-text-secondary leading-relaxed line-clamp-2 flex-1">Your Event Match Quality is stuck at 4-6 even on Maximum data sharing. Here's exactly what EMQ measures, the parameters Meta scores, the real reasons your score is low, and the server-side fix that lifts it past 8.</p><!-- Meta --><div class="mt-4 flex items-center gap-3 text-xs text-text-muted"><span class="font-medium text-text-secondary">Chris Gaudy</span><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><time datetime="2026-06-16T00:00:00.000Z">Jun 16, 2026</time><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><span>16 min read</span></div></div></a></div><div class="fade-in-up stagger-6"><a href="/blog/google-ads-conversions-disappearing/" class="card group flex flex-col"><!-- Image / Fallback gradient --><div class="relative aspect-[16/9] overflow-hidden rounded-t-2xl"><div class="h-full w-full bg-gradient-to-br from-accent/10 via-surface to-surface-hover flex items-center justify-center"><svg class="h-12 w-12 text-accent/20" fill="none" viewBox="0 0 24 24" stroke-width="1" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M12 7.5h1.5m-1.5 3h1.5m-7.5 3h7.5m-7.5 3h7.5m3-9h3.375c.621 0 1.125.504 1.125 1.125V18a2.25 2.25 0 01-2.25 2.25M16.5 7.5V18a2.25 2.25 0 002.25 2.25M16.5 7.5V4.875c0-.621-.504-1.125-1.125-1.125H4.125C3.504 3.75 3 4.254 3 4.875V18a2.25 2.25 0 002.25 2.25h13.5M6 7.5h3v3H6v-3z"></path></svg></div></div><!-- Content --><div class="flex flex-1 flex-col p-6"><!-- Category badge --><div class="mb-3"><span class="inline-flex items-center rounded-full border border-accent/20 bg-accent/5 px-2.5 py-0.5 text-[11px] font-medium text-accent-light">Guide</span></div><!-- Title --><h3 class="text-lg font-semibold text-text leading-snug group-hover:text-accent-light transition-colors line-clamp-2">Why Your Google Ads Conversions Keep Disappearing (and How to Fix It)</h3><!-- Description --><p class="mt-2 text-sm text-text-secondary leading-relaxed line-clamp-2 flex-1">Google Ads shows fewer conversions than your store actually sold - or counts them, then removes them days later. The real causes: lost GCLID, the 90-day window, iOS wbraid/gbraid, indexing delay, and the wrong conversion action. With the server-side fix.</p><!-- Meta --><div class="mt-4 flex items-center gap-3 text-xs text-text-muted"><span class="font-medium text-text-secondary">Chris Gaudy</span><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><time datetime="2026-06-15T00:00:00.000Z">Jun 15, 2026</time><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><span>17 min read</span></div></div></a></div><div class="fade-in-up stagger-6"><a href="/blog/facebook-conversions-api-setup-guide/" class="card group flex flex-col"><!-- Image / Fallback gradient --><div class="relative aspect-[16/9] overflow-hidden rounded-t-2xl"><img src="/images/blog/facebook-conversions-api-setup-guide.png" alt="How to Set Up the Facebook Conversions API: The Complete 2026 Implementation Guide" class="h-full w-full object-cover transition-transform duration-500 group-hover:scale-105" loading="lazy"></div><!-- Content --><div class="flex flex-1 flex-col p-6"><!-- Category badge --><div class="mb-3"><span class="inline-flex items-center rounded-full border border-accent/20 bg-accent/5 px-2.5 py-0.5 text-[11px] font-medium text-accent-light">Guide</span></div><!-- Title -->
49<h3 class="text-lg font-semibold text-text leading-snug group-hover:text-accent-light transition-colors line-clamp-2">How to Set Up the Facebook Conversions API: The Complete 2026 Implementation Guide</h3><!-- Description --><p class="mt-2 text-sm text-text-secondary leading-relaxed line-clamp-2 flex-1">Step-by-step facebook capi setup guide: access token, all 4 implementation methods, hashing rules, EMQ, deduplication, and troubleshooting for 2026.</p><!-- Meta --><div class="mt-4 flex items-center gap-3 text-xs text-text-muted"><span class="font-medium text-text-secondary">Chris Gaudy</span><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><time datetime="2026-06-11T00:00:00.000Z">Jun 11, 2026</time><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><span>18 min read</span></div></div></a></div><div class="fade-in-up stagger-6"><a href="/blog/shopify-server-side-tracking/" class="card group flex flex-col"><!-- Image / Fallback gradient --><div class="relative aspect-[16/9] overflow-hidden rounded-t-2xl"><img src="/images/blog/shopify-server-side-tracking.png" alt="Shopify Server-Side Tracking: The Complete 2026 Guide to the Conversions API" class="h-full w-full object-cover transition-transform duration-500 group-hover:scale-105" loading="lazy"></div><!-- Content --><div class="flex flex-1 flex-col p-6"><!-- Category badge --><div class="mb-3"><span class="inline-flex items-center rounded-full border border-accent/20 bg-accent/5 px-2.5 py-0.5 text-[11px] font-medium text-accent-light">Guide</span></div><!-- Title --><h3 class="text-lg font-semibold text-text leading-snug group-hover:text-accent-light transition-colors line-clamp-2">Shopify Server-Side Tracking: The Complete 2026 Guide to the Conversions API</h3><!-- Description --><p class="mt-2 text-sm text-text-secondary leading-relaxed line-clamp-2 flex-1">Master shopify server side tracking and the Shopify Conversions API: sandbox limits, CAPI setup, deduplication gotchas, EMQ, and which approach fits your store.</p><!-- Meta --><div class="mt-4 flex items-center gap-3 text-xs text-text-muted"><span class="font-medium text-text-secondary">Chris Gaudy</span><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><time datetime="2026-06-11T00:00:00.000Z">Jun 11, 2026</time><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><span>18 min read</span></div></div></a></div><div class="fade-in-up stagger-6"><a href="/blog/facebook-capi-deduplication/" class="card group flex flex-col"><!-- Image / Fallback gradient --><div class="relative aspect-[16/9] overflow-hidden rounded-t-2xl"><div class="h-full w-full bg-gradient-to-br from-accent/10 via-surface to-surface-hover flex items-center justify-center"><svg class="h-12 w-12 text-accent/20" fill="none" viewBox="0 0 24 24" stroke-width="1" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M12 7.5h1.5m-1.5 3h1.5m-7.5 3h7.5m-7.5 3h7.5m3-9h3.375c.621 0 1.125.504 1.125 1.125V18a2.25 2.25 0 01-2.25 2.25M16.5 7.5V18a2.25 2.25 0 002.25 2.25M16.5 7.5V4.875c0-.621-.504-1.125-1.125-1.125H4.125C3.504 3.75 3 4.254 3 4.875V18a2.25 2.25 0 002.25 2.25h13.5M6 7.5h3v3H6v-3z"></path></svg></div></div><!-- Content --><div class="flex flex-1 flex-col p-6"><!-- Category badge --><div class="mb-3"><span class="inline-flex items-center rounded-full border border-accent/20 bg-accent/5 px-2.5 py-0.5 text-[11px] font-medium text-accent-light">Guide</span></div><!-- Title --><h3 class="text-lg font-semibold text-text leading-snug group-hover:text-accent-light transition-colors line-clamp-2">Facebook CAPI Deduplication: Why Your Conversions Doubled After Adding the API</h3><!-- Description --><p class="mt-2 text-sm text-text-secondary leading-relaxed line-clamp-2 flex-1">Diagnose and fix Facebook Conversions API double-counting with event_id. The exact failure modes, how to verify deduplication in Events Manager, and why a shared event_id is the only reliable fix.</p><!-- Meta --><div class="mt-4 flex items-center gap-3 text-xs text-text-muted"><span class="font-medium text-text-secondary">Chris Gaudy</span><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><time datetime="2026-06-02T00:00:00.000Z">Jun 2, 2026</time><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><span>12 min read</span></div></div></a></div><div class="fade-in-up stagger-6"><a href="/blog/why-server-side-tracking-matters/" class="card group flex flex-col"><!-- Image / Fallback gradient --><div class="relative aspect-[16/9] overflow-hidden rounded-t-2xl"><div class="h-full w-full bg-gradient-to-br from-accent/10 via-surface to-surface-hover flex items-center justify-center"><svg class="h-12 w-12 text-accent/20" fill="none" viewBox="0 0 24 24" stroke-width="1" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M12 7.5h1.5m-1.5 3h1.5m-7.5 3h7.5m-7.5 3h7.5m3-9h3.375c.621 0 1.125.504 1.125 1.125V18a2.25 2.25 0 01-2.25 2.25M16.5 7.5V18a2.25 2.25 0 002.25 2.25M16.5 7.5V4.875c0-.621-.504-1.125-1.125-1.125H4.125C3.504 3.75 3 4.254 3 4.875V18a2.25 2.25 0 002.25 2.25h13.5M6 7.5h3v3H6v-3z"></path></svg></div></div><!-- Content --><div class="flex flex-1 flex-col p-6"><!-- Category badge --><div class="mb-3"><span class="inline-flex items-center rounded-full border border-accent/20 bg-accent/5 px-2.5 py-0.5 text-[11px] font-medium text-accent-light">Guide</span></div><!-- Title -->
49<h3 class="text-lg font-semibold text-text leading-snug group-hover:text-accent-light transition-colors line-clamp-2">Why Server-Side Tracking Matters in 2026</h3><!-- Description --><p class="mt-2 text-sm text-text-secondary leading-relaxed line-clamp-2 flex-1">A complete guide to understanding why client-side tracking is broken and how server-side tracking fixes it.</p><!-- Meta --><div class="mt-4 flex items-center gap-3 text-xs text-text-muted"><span class="font-medium text-text-secondary">Chris Gaudy</span><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><time datetime="2026-04-07T00:00:00.000Z">Apr 7, 2026</time><span class="h-0.5 w-0.5 rounded-full bg-text-muted"></span><span>8 min read</span></div></div></a></div></div></div></section><section class="relative py-12 lg:py-16"><div class="mx-auto max-w-3xl px-6 lg:px-8"><div class="fade-in-up"><section class="rounded-2xl border border-border bg-surface p-8 md:p-12 relative overflow-hidden"><!-- Subtle glow background --><div class="absolute top-0 right-0 w-64 h-64 bg-accent/[0.05] rounded-full blur-[80px] -translate-y-1/2 translate-x-1/2 pointer-events-none"></div><div class="relative z-10 text-center max-w-lg mx-auto"><!-- Icon --><div class="mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-xl bg-accent/10"><svg class="h-5 w-5 text-accent-light" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M21.75 6.75v10.5a2.25 2.25 0 01-2.25 2.25h-15a2.25 2.25 0 01-2.25-2.25V6.75m19.5 0A2.25 2.25 0 0019.5 4.5h-15a2.25 2.25 0 00-2.25 2.25m19.5 0v.243a2.25 2.25 0 01-1.07 1.916l-7.5 4.615a2.25 2.25 0 01-2.36 0L3.32 8.91a2.25 2.25 0 01-1.07-1.916V6.75"></path></svg></div><h3 class="text-xl font-bold text-text">Get tracking insights in your inbox</h3><p class="mt-2 text-sm text-text-secondary">Tips on server-side tracking, conversion optimization, and product updates. Delivered weekly.</p><!-- Form --><form id="newsletter-form" novalidate class="mt-6 flex flex-col sm:flex-row items-center gap-3 max-w-md mx-auto"><!-- Honeypot - hidden from real users, visible to bots --><input type="text" name="website" tabindex="-1" autocomplete="off" aria-hidden="true" style="position:absolute;left:-9999px;opacity:0;height:0;width:0;"><input type="email" name="email" id="newsletter-email" placeholder="[email protected]" required class="w-full flex-1 rounded-xl border border-border bg-bg px-4 py-3 text-sm text-text placeholder:text-text-muted focus:outline-none focus:border-accent/40 focus:ring-1 focus:ring-accent/20 transition-colors"><button id="newsletter-submit" type="submit" class="btn-glass w-full sm:w-auto shrink-0 rounded-xl px-6 py-3 text-sm font-semibold text-white">Subscribe</button></form><p id="newsletter-status" class="mt-3 text-sm hidden" role="status" aria-live="polite"></p><p class="mt-3 text-xs text-text-muted">No spam. Unsubscribe anytime.</p></div></section>
49<script type="module">var e=document.getElementById(`newsletter-form`);e&&e.addEventListener(`submit`,async t=>{t.preventDefault();let n=document.getElementById(`newsletter-email`),r=e.querySelector(`input[name="website"]`),i=document.getElementById(`newsletter-submit`),a=document.getElementById(`newsletter-status`),o=n?n.value:``,s=r?r.value:``;i&&(i.disabled=!0,i.textContent=`Subscribingâ¦`);try{let t=await fetch(`/api/newsletter/subscribe`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({email:o,website:s})}),n;try{n=await t.json()}catch{n={success:!1,message:`Something went wrong. Please try again later.`}}a&&(a.classList.remove(`hidden`,`text-emerald-400`,`text-red-400`),n.success?(a.classList.add(`text-emerald-400`),a.textContent=n.message??`Almost there! Check your inbox and click the confirmation link.`,e.reset()):(a.classList.add(`text-red-400`),a.textContent=n.message??`Something went wrong. Please try again later.`))}catch{a&&(a.classList.remove(`hidden`,`text-emerald-400`,`text-red-400`),a.classList.add(`text-red-400`),a.textContent=`Something went wrong. Please try again later.`)}finally{i&&(i.disabled=!1,i.textContent=`Subscribe`)}});</script>
49</div></div></section></main><footer class="relative border-t border-border bg-bg"><div class="mx-auto max-w-7xl px-6 py-16 lg:px-8 lg:py-20"><div class="grid grid-cols-2 gap-8 md:grid-cols-4"><!-- Brand --><div class="col-span-2 md:col-span-1"><a href="/" class="flex items-center group"><img src="/images/axitracelogo.png" alt="AxiTrace" class="h-11 w-auto"></a><p class="mt-4 text-sm leading-6 text-text-muted max-w-xs">Server-side tracking platform for e-commerce. Accurate conversions, zero double-counting.</p></div><!-- Product --><div><h3 class="text-xs font-semibold uppercase tracking-wider text-text-muted">Product</h3><ul class="mt-5 space-y-3"><li><a href="/features/" class="text-sm text-text-secondary transition-colors hover:text-text">Features</a></li><li><a href="/click-fraud-protection/" class="text-sm text-text-secondary transition-colors hover:text-text">Click fraud protection</a></li><li><a href="/pricing/" class="text-sm text-text-secondary transition-colors hover:text-text">Pricing</a></li><li><a href="/blog/" class="text-sm text-text-secondary transition-colors hover:text-text">Blog</a></li><li><a href="/partners/" class="text-sm text-text-secondary transition-colors hover:text-text">Partners</a></li><li><a href="/contact/" class="text-sm text-text-secondary transition-colors hover:text-text">Contact</a></li></ul></div><!-- Resources --><div><h3 class="text-xs font-semibold uppercase tracking-wider text-text-muted">Resources</h3><ul class="mt-5 space-y-3"><li><a href="/docs" class="text-sm text-text-secondary transition-colors hover:text-text">Documentation</a></li><li><a href="/glossary/" class="text-sm text-text-secondary transition-colors hover:text-text">Glossary</a></li><li><a href="/tools/" class="text-sm text-text-secondary transition-colors hover:text-text">Free tools</a></li><li><a href="/tools/website-tracking-checker/" class="text-sm text-text-secondary transition-colors hover:text-text">Website tracking checker</a></li><li><a href="/tools/meta-pixel-capi-checker/" class="text-sm text-text-secondary transition-colors hover:text-text">Meta Pixel and CAPI checker</a></li><li><a href="/tools/consent-mode-v2-checker/" class="text-sm text-text-secondary transition-colors hover:text-text">Consent Mode v2 checker</a></li><li><a href="/integrations/shopify/" class="text-sm text-text-secondary transition-colors hover:text-text">Shopify tracking</a></li><li><a href="/integrations/woocommerce/" class="text-sm text-text-secondary transition-colors hover:text-text">WooCommerce tracking</a></li><li><a href="/integrations/magento/" class="text-sm text-text-secondary transition-colors hover:text-text">Magento tracking</a></li><li><a href="/integrations/shopware/" class="text-sm text-text-secondary transition-colors hover:text-text">Shopware tracking</a></li><li><a href="/integrations/facebook-capi/" class="text-sm text-text-secondary transition-colors hover:text-text">Facebook CAPI</a></li><li><a href="/integrations/tiktok-events-api/" class="text-sm text-text-secondary transition-colors hover:text-text">TikTok Events API</a></li><li><a href="/integrations/google-ads/" class="text-sm text-text-secondary transition-colors hover:text-text">Google Ads</a></li><li><a href="/integrations/ga4/" class="text-sm text-text-secondary transition-colors hover:text-text">GA4 tracking</a></li><li><a href="/integrations/reddit-capi/" class="text-sm text-text-secondary transition-colors hover:text-text">Reddit CAPI</a></li><li><a href="/integrations/openai-ads/" class="text-sm text-text-secondary transition-colors hover:text-text">OpenAI Ads</a></li><li><a href="/integrations/pinterest-capi/" class="text-sm text-text-secondary transition-colors hover:text-text">Pinterest CAPI</a></li><li><a href="/integrations/linkedin-capi/" class="text-sm text-text-secondary transition-colors hover:text-text">LinkedIn CAPI</a></li><li><a href="/integrations/microsoft-ads/" class="text-sm text-text-secondary transition-colors hover:text-text">Microsoft Ads</a></li><li><a href="/integrations/ai-assistants/" class="text-sm text-text-secondary transition-colors hover:text-text">AI assistants (MCP)</a></li><li><a href="/alternatives/" class="text-sm text-text-secondary transition-colors hover:text-text">Alternatives</a></li></ul></div><!-- Legal --><div><h3 class="text-xs font-semibold uppercase tracking-wider text-text-muted">Legal</h3><ul class="mt-5 space-y-3"><li><a href="/privacy/" class="text-sm text-text-secondary transition-colors hover:text-text">Privacy Policy</a></li><li><a href="/terms/" class="text-sm text-text-secondary transition-colors hover:text-text">Terms of Service</a></li><li><a href="/partners/terms/" class="text-sm text-text-secondary transition-colors hover:text-text">Partner terms</a></li></ul></div></div><div class="mt-14 flex flex-col items-center justify-between gap-4 border-t border-border pt-8 md:flex-row"><p class="text-xs text-text-muted">© 2026 AxiTrace. All rights reserved.</p><p class="text-[11px] text-text-muted">This page uses AxiTrace for its own tracking · [email protected]</p></div></div></footer><div id="ssl-lightbox" class="ssl-lightbox" aria-hidden="true"><button type="button" class="ssl-lightbox-backdrop" data-lightbox-close aria-label="Close enlarged screenshot"></button><div class="ssl-lightbox-content" role="dialog" aria-modal="true" aria-label="Enlarged screenshot" tabindex="0"><button type="button" class="ssl-lightbox-close" data-lightbox-close aria-label="Close"><svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"></path></svg></button><img class="ssl-lightbox-img" alt=""></div></div>
49<script type="module">var e=document.getElementById(`ssl-lightbox`),t=e?.querySelector(`.ssl-lightbox-content`),n=e?.querySelector(`.ssl-lightbox-img`),r=null,i=()=>e?.classList.contains(`is-open`)??!1,a=i=>{if(!e||!n)return;let a=i.getAttribute(`data-lightbox-src`);if(!a)return;r=i;let o=i.getAttribute(`data-lightbox-natural`)===`true`,s=i.getAttribute(`data-lightbox-width`),c=i.getAttribute(`data-lightbox-height`);e.classList.toggle(`is-natural`,o),o&&s&&c?(n.setAttribute(`width`,s),n.setAttribute(`height`,c)):(n.removeAttribute(`width`),n.removeAttribute(`height`)),n.src=a,n.alt=i.getAttribute(`data-lightbox-alt`)??``,t?.scrollTo(0,0),e.classList.add(`is-open`),e.setAttribute(`aria-hidden`,`false`),document.body.classList.add(`ssl-lightbox-locked`),e.querySelector(`.ssl-lightbox-close`)?.focus()},o=()=>{e&&i()&&(e.classList.remove(`is-open`),e.setAttribute(`aria-hidden`,`true`),document.body.classList.remove(`ssl-lightbox-locked`),r?.focus(),r=null)};document.addEventListener(`click`,e=>{let t=e.target;if(!(t instanceof Element))return;let n=t.closest(`[data-lightbox-src]`);if(n){e.preventDefault(),a(n);return}t.closest(`[data-lightbox-close]`)&&o()}),document.addEventListener(`keydown`,e=>{e.key===`Escape`&&i()&&o()});</script>
49<!-- Scroll-triggered animations (.fade-in-up) and count-up numbers ([data-count-to]) -->
49<script type="module">var e=Array.from(document.querySelectorAll(`.fade-in-up`)),t=e=>{let t=e.getBoundingClientRect();return t.top<window.innerHeight&&t.bottom>0},n=e=>e.classList.add(`visible`),r=()=>{e.forEach(e=>{!e.classList.contains(`visible`)&&t(e)&&n(e)})},i=()=>{e.forEach(e=>n(e))},a=new IntersectionObserver(e=>{e.forEach(e=>{e.isIntersecting&&(n(e.target),a.unobserve(e.target))})},{threshold:.1,rootMargin:`0px 0px -40px 0px`});e.forEach(e=>{t(e)?n(e):a.observe(e)});var o=!1,s=!1;window.addEventListener(`scroll`,()=>{o||(o=!0,requestAnimationFrame(()=>{r(),o=!1})),s||(s=!0,setTimeout(i,900))},{passive:!0}),window.addEventListener(`load`,()=>{r(),setTimeout(i,5e3)});var c=window.matchMedia(`(prefers-reduced-motion: reduce)`).matches,l=Array.from(document.querySelectorAll(`[data-count-to]`)),u=(e,t)=>{let n=Number(e.dataset.decimals??`0`),r=e.dataset.prefix??``,i=e.dataset.suffix??``,a=e.dataset.separator===`true`,o=t.toFixed(n);return`${r}${a?Number(o).toLocaleString(`en-US`,{minimumFractionDigits:n,maximumFractionDigits:n}):o}${i}`},d=e=>{let t=Number(e.dataset.countTo??`0`);if(c||Number.isNaN(t)){e.textContent=u(e,t);return}let n=performance.now(),r=i=>{let a=Math.min(1,(i-n)/1400),o=1-(1-a)**3;e.textContent=u(e,t*o),a<1&&requestAnimationFrame(r)};requestAnimationFrame(r)},f=new IntersectionObserver(e=>{e.forEach(e=>{e.isIntersecting&&(d(e.target),f.unobserve(e.target))})},{threshold:.4});l.forEach(e=>f.observe(e));</script>
49</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.