Category: Analytics / Measurement Kind: Point-in-time snapshot (numbers go stale — re-run before trusting) Windows: 30d primary, with 7d + 48h check-ins (heavy
/vpn+ use-case ships landed 7/10–7/16) Source: askbowtie (engagement/scroll/bounce/referrers/search = accurate) + D1 + affiliate report (money truth)
/out is the affiliate redirect — its ~0.2% "conversion rate" is meaningless; real affiliate conversions attribute to the provider pages.| Metric | 30d | 7d | 48h |
|---|---|---|---|
| Sessions | 24,935 | 5,884 | 1,590 |
| Conversion rate | 7.4%* | 9.0% | 10.1% |
| Bounce | 63.5% | 67% | 64% |
| Avg duration | 125s | 129s | 134s |
*30d rate is measurement-confounded (see §0); 10.1% (48h, fully post-fix) is the current true rate.
68% direct + brand-dominated search (§8) = people arrive because they know "vpn.com," not from commercial discovery. It is a click-CAPTURE problem, not a conversion problem.
/ = 11,484 sessions (46% of the site), but 0.3% conversion · 36% avg scroll (13.7% deep) · 49.5% click nothing at all. This is correct by design — the homepage routes onward; conversions fire downstream at provider pages / /out. Its router LINKS work; its copy is barely read. The best interaction on it is the use-case picker (§9).
/cybersecurity (39%, 26% deep), /hosting (39%, 26% deep), /domain-broker/get-started (46%, 21% deep)./vpn/best-free-vpn (12% scroll but 32.8% convert — CTA is above the fold), /vpn hub (20% scroll)./wp-login.php — 98% exit, 105 sessions → bot noise (WordPress probing a non-WP site; block/ignore)./vpn/best-vpn-for-speed (95%), /vpn/best-vpn-for-streaming/disney-plus (94.5%, 274 sess), /vpn/best-vpn-for-streaming hub (85.5%) — streaming/speed long-tail pulls traffic and dumps it at ~0% conversion. Content/intent-match gap.| Role | Pages | Sessions | Conv. rate |
|---|---|---|---|
| conversion | 272 | 9,360 | 15.2% |
| editorial | 427 | 4,472 | 3.3% |
| hub | 42 | 14,544 | 1.7% (by design — routers) |
| untyped | 1,274 | 3,772 | — (needs tagging) |
Top provider pages: /vpn/protonvpn 23.6%, /vpn/best-free-vpn 32.8%, /zh/vpn/best-free-vpn 41.9%, /vpn/best-vpn-for-android 17.2%, /vpn/surfshark 10.6%, /vpn/nordvpn 9.7%. Free-VPN and Proton are the conversion engines. /out (2,998 sessions) is untagged — bowtie suggests conversion.
| Source | Sessions | Conv. rate |
|---|---|---|
| google.com | 5,960 | 9.9% |
| bing.com | 439 | 16.4% |
| cn.bing.com | 64 | 53.1% |
| chatgpt.com | 64 | 31.3% |
| gemini.google.com | 20 | 35% |
| google.com.hk | 95 | 18.9% |
AI and Chinese-search traffic converts 3–5× Google's rate. ChatGPT/Gemini are tiny in volume (~100 AI sessions total) but convert like qualified leads. Chinese-origin demand (cn.bing 53%, HK Google 19%, /zh/ pages at 42%) is real and high-intent. Both are underexposed relative to how well they convert. (Note: most paid clicks strip referrer and land in "direct" — this is referred traffic only.)
6,160 clicks on 812,755 impressions = 0.8% CTR.
vpn.com, vpn .com, vpn com, www.vpn.com free vpn (all position ~1, 40–75% CTR).vpn (27,708 impr, position 39.6), best vpn for android (8,302 impr, pos 6.6, 0.3% CTR), vpn gratis (pos 16.9). The commercial demand is visible to Google but not ranked to capture./fa/ (Persian) pages pull real clicks (windscribe 79 @ pos 7.4), plus /id/, /ja/, /ar/. The language expansion produces genuine search traffic, not just pages./vpn/vpn has proper data-askbowtie-section markers, and they are decisive:
| Section | Share (7d) | Conv. when engaged |
|---|---|---|
| hero | 31.1% | 66% |
| verdict | 2.5% | 88.9% |
| why-it-matters | 0.8% | 83.3% |
| speedlab | 9.4% | 29.9% |
Anyone who touches the /vpn hero converts at ~66%. The highest-converting sections (verdict, why-it-matters) are barely seen (<3% share) — underexposed closers. ~44% of /vpn viewers still click nothing.
Measured accurately TODAY (just not in bowtie):
| Store | How | Answers |
|---|---|---|
D1 clicks.uc | vpn-workers/out/src/index.js:198 INSERT includes uc | click volume by use-case (SELECT uc, COUNT(*) FROM clicks GROUP BY uc) |
Affiliate aff_sub4 | vpn-workers/out/src/redirect.js:76 uc → aff_sub4 | revenue by use-case (affiliate sub-ID report) |
| Bowtie | NOT threaded (bowtie.js omits uc) | — the gap |
SSOT use-cases.ts: 1=security 2=streaming 3=gaming 4=enterprise 5=privacy 6=torrenting 7=free; champions all nordvpn except free→protonvpn.
To add use-case to bowtie — do NOT use a dynamic page tag. A tag is a per-page static ROLE; use-case is a per-session context (one page, many use-cases pass through). It can't be set per-session and would fragment the role table. Instead, two markers:
data-askbowtie-action="select-use-case use:streaming" on each uc-btn (UseCaseSelector.astro, UseCasePicker.astro). Then get_actions {action:'select-use-case'} pivots by use-case → per-use-case downstream conversion.uc onto the server-side conversion event — uc is already in index.js:228 ctxMeta; add it to the bowtie.js payload so the money event is use-case-segmentable, matching D1/affiliate.Checklist: [ ] action markers on both pickers · [ ] uc in bowtie.js payload · [ ] verify get_actions per-use: rows + affiliate_click carries uc · [ ] cross-check bowtie vs D1 clicks.uc vs affiliate aff_sub4.
/vpn hero engagement (the overhaul + section markers, 7/10–7/11):
| Window | hero share | hero conv | note |
|---|---|---|---|
| 30d | 5.8% | 66% | diluted by pre-7/11 (markers renamed 7/11) |
| 7d | 31.1% | 66% | |
| 48h | 34% | 61% |
Post-overhaul, ~1 in 3 /vpn viewers engage the hero at ~61–66% conversion. A new quiz-option/quiz-label element also appears in 7d/48h (28.6% conv, low volume) — a recent ship starting to register.
Homepage use-case picker (uc-btn) — the use-case ship is working:
| Window | Picker share of viewers | Downstream conv. |
|---|---|---|
| 30d | 7.6% (877 sess) | 19.4% |
| 48h | 15.2% (112 sess) | 33.0% |
In the 48h after the mid-July use-case ships, picker reach doubled and its conversion jumped to 33%. It's the best homepage interaction — but we can't see WHICH use-case drives it until §8 is instrumented.
Error-session rate: 30d 29.8% → 7d 49.8% → 48h 83.9%, over the exact window of heavy shipping. Incidents are mostly low severity and bowtie errors are often ad-block noise — but 84% in 48h warrants running the error triage (get_incidents) to separate a real JS regression from third-party noise before assuming it's nothing.
/out + 1,274 pages untyped → tag /out conversion; the untyped bucket (3,772 sessions) is invisible to role analysis./wp-login.php bot noise pollutes exit rankings → block/exclude.sections: []) → all 11k sessions of homepage clicks sit in "unknown."use-cases.ts (SSOT + champion), sticky ?uc= trickle-down to /out.vpn-workers/out/src/bowtie.js, D1 clicks (gateway_template, tier, uc, placement).source:"server" + a descriptive User-Agent or they silently drop.