Analytics Deep Dive — 2026-07-16

2026-07-16 · VPN.com Engineering · report

Analytics Deep Dive — 2026-07-16

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)


0. Accuracy frame (read first)


1. Traffic shape — a brand / navigational property

Metric30d7d48h
Sessions24,9355,8841,590
Conversion rate7.4%*9.0%10.1%
Bounce63.5%67%64%
Avg duration125s129s134s

*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.

2. The homepage router paradox (46% of all traffic)

/ = 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).

3. Scroll & bounce — read vs. dumped

4. What converts — by role and by page

RolePagesSessionsConv. rate
conversion2729,36015.2%
editorial4274,4723.3%
hub4214,5441.7% (by design — routers)
untyped1,2743,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.

5. What drives what — referrers & the AI signal

SourceSessionsConv. rate
google.com5,9609.9%
bing.com43916.4%
cn.bing.com6453.1%
chatgpt.com6431.3%
gemini.google.com2035%
google.com.hk9518.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. Search — brand owns clicks, commercial owns impressions (uncaptured)

6,160 clicks on 812,755 impressions = 0.8% CTR.

7. Section engagement — where the money is on /vpn

/vpn has proper data-askbowtie-section markers, and they are decisive:

SectionShare (7d)Conv. when engaged
hero31.1%66%
verdict2.5%88.9%
why-it-matters0.8%83.3%
speedlab9.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.

8. USE CASE — where it's measured + how to add it to bowtie

Measured accurately TODAY (just not in bowtie):

StoreHowAnswers
D1 clicks.ucvpn-workers/out/src/index.js:198 INSERT includes ucclick volume by use-case (SELECT uc, COUNT(*) FROM clicks GROUP BY uc)
Affiliate aff_sub4vpn-workers/out/src/redirect.js:76 uc → aff_sub4revenue by use-case (affiliate sub-ID report)
BowtieNOT 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:

  1. Action marker on the pickerdata-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.
  2. Thread uc onto the server-side conversion eventuc 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.

9. Time-window check-in — the 7/10–7/16 ships are landing

/vpn hero engagement (the overhaul + section markers, 7/10–7/11):

Windowhero sharehero convnote
30d5.8%66%diluted by pre-7/11 (markers renamed 7/11)
7d31.1%66%
48h34%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:

WindowPicker share of viewersDownstream conv.
30d7.6% (877 sess)19.4%
48h15.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.

10. Watch item — error rate climbing

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.

11. Instrumentation gaps / next steps

  1. Use-case picker unmarked → add the §8 action marker (biggest single win — best converter, measured only by accident).
  2. /out + 1,274 pages untyped → tag /out conversion; the untyped bucket (3,772 sessions) is invisible to role analysis.
  3. /wp-login.php bot noise pollutes exit rankings → block/exclude.
  4. Homepage has no section markers (sections: []) → all 11k sessions of homepage clicks sit in "unknown."
  5. Error triage (§10) if the 48h rate holds.