-
-
Notifications
You must be signed in to change notification settings - Fork 209
Expand file tree
/
Copy pathbounce_domains_top.sql
More file actions
78 lines (72 loc) · 1.97 KB
/
bounce_domains_top.sql
File metadata and controls
78 lines (72 loc) · 1.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
-- noqa: disable=PRS
-- Detection logic explained:
-- https://github.com/privacycg/proposals/issues/6
-- https://github.com/privacycg/nav-tracking-mitigations/blob/main/bounce-tracking-explainer.md
WITH redirect_requests AS (
FROM `httparchive.crawl.requests`
|> WHERE
date = '2025-07-01' AND
--rank = 1000 AND
SAFE.INT64(summary.status) BETWEEN 300 AND 399 AND
index <= 2
|> JOIN UNNEST(response_headers) AS header
|> WHERE LOWER(header.name) = 'location'
|> SELECT
client,
url,
index,
NET.REG_DOMAIN(header.value) AS location_domain,
page
),
-- Find the first navigation redirect
navigation_redirect AS (
FROM redirect_requests
|> WHERE
index = 1 AND
NET.REG_DOMAIN(page) = NET.REG_DOMAIN(url) AND
NET.REG_DOMAIN(url) != location_domain
|> SELECT
client,
page,
location_domain AS bounce_domain
),
-- Find the second navigation redirect
bounce_redirect AS (
FROM redirect_requests
|> WHERE
index = 2 AND
NET.REG_DOMAIN(page) != NET.REG_DOMAIN(url) AND
NET.REG_DOMAIN(url) != location_domain
|> SELECT
client,
url,
page,
location_domain AS bounce_redirect_location_domain
),
-- Combine the first and second navigation redirects
bounce_sequences AS (
FROM navigation_redirect AS nav
|> JOIN bounce_redirect AS bounce
ON
nav.client = bounce.client AND
nav.page = bounce.page
|> AGGREGATE COUNT(DISTINCT nav.page) AS pages_count
GROUP BY nav.client, bounce_domain
),
pages_total AS (
FROM `httparchive.crawl.pages`
|> WHERE date = '2025-07-01' --AND rank = 1000
|> AGGREGATE COUNT(DISTINCT page) AS total_pages GROUP BY client
)
FROM bounce_sequences
|> JOIN pages_total USING (client)
|> EXTEND pages_count / total_pages AS pages_pct
|> DROP total_pages
|> PIVOT(
ANY_VALUE(pages_count) AS cnt,
ANY_VALUE(pages_pct) AS pages_pct
FOR client IN ('desktop', 'mobile')
)
|> RENAME cnt_mobile AS mobile, cnt_desktop AS desktop
|> ORDER BY mobile + desktop DESC
|> LIMIT 100