diff --git a/suite-traffic.js b/suite-traffic.js index 8df8ec9..7714b40 100644 --- a/suite-traffic.js +++ b/suite-traffic.js @@ -183,6 +183,20 @@ async function launch(opts) { if (!opts.hasPage) throw new Error('Build your personal page first, then you can point ads at it.'); target = 'https://rmcircle.team/p/' + opts.id; } + // Tag the destination so a click can be traced back to this network. + // + // Without this the Traffic Desk is unmeasurable: track.js reads ?v= BEFORE + // it reads the referrer, so every angle-linked ad click was filed under + // "angle:graveyard" and the referring domain thrown away. Ad clicks, flyer + // QR scans and massifly angle links all landed in the same four buckets, + // and networkadspace.com showed a grand total of 1 visit across ~45,000 + // served impressions — not because the ads produced nothing, but because + // nothing carried a source. + // + // `src` wins over `v` in track.js, and the landing page still reads ?v= + // separately, so the hook keeps working. Split by format because we believe + // text outperforms banners and have never been able to show it. + target += (target.indexOf('?') === -1 ? '?' : '&') + 'src=nas-' + (isText ? 'text' : 'banner'); const idem = 'rmc-' + opts.id + '-' + monthKey() + '-' + crypto.randomBytes(6).toString('hex'); const payload = {