diff --git a/sql/2025/cms/cms_adoption.sql b/sql/2025/cms/cms_adoption.sql new file mode 100644 index 00000000000..4f2a70b8620 --- /dev/null +++ b/sql/2025/cms/cms_adoption.sql @@ -0,0 +1,161 @@ +#standardSQL +# CMS adoption OVER time +# cms_adoption.sql + +SELECT + client, + 2025 AS year, + COUNT(DISTINCT page) AS freq, + total, + COUNT(DISTINCT page) / total AS pct +FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats +JOIN ( + SELECT + client, + COUNT(0) AS total + FROM + `httparchive.crawl.pages` + WHERE + date = '2025-07-01' AND + is_root_page + GROUP BY + client +) +USING (client) +WHERE + cats = 'CMS' AND + date = '2025-07-01' AND + is_root_page +GROUP BY + client, + total +UNION ALL +SELECT + client, + 2024 AS year, + COUNT(DISTINCT page) AS freq, + total, + COUNT(DISTINCT page) / total AS pct +FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats +JOIN ( + SELECT + client, + COUNT(0) AS total + FROM + `httparchive.crawl.pages` + WHERE + date = '2024-06-01' AND + is_root_page + GROUP BY + client +) +USING (client) +WHERE + cats = 'CMS' AND + date = '2024-06-01' AND + is_root_page +GROUP BY + client, + total +UNION ALL +SELECT + client, + 2023 AS year, + COUNT(DISTINCT page) AS freq, + total, + COUNT(DISTINCT page) / total AS pct +FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats +JOIN ( + SELECT + client, + COUNT(0) AS total + FROM + `httparchive.crawl.pages` + WHERE + date = '2023-06-01' AND + is_root_page + GROUP BY + client +) +USING (client) +WHERE + cats = 'CMS' AND + date = '2023-06-01' AND + is_root_page +GROUP BY + client, + total +UNION ALL +SELECT + client, + 2022 AS year, + COUNT(DISTINCT page) AS freq, + total, + COUNT(DISTINCT page) / total AS pct +FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats +JOIN ( + SELECT + client, + COUNT(0) AS total + FROM + `httparchive.crawl.pages` + WHERE + date = '2022-06-01' AND + is_root_page + GROUP BY + client +) +USING (client) +WHERE + cats = 'CMS' AND + date = '2022-06-01' AND + is_root_page +GROUP BY + client, + total +UNION ALL +SELECT + client, + 2021 AS year, + COUNT(DISTINCT page) AS freq, + total, + COUNT(DISTINCT page) / total AS pct +FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats +JOIN ( + SELECT + client, + COUNT(0) AS total + FROM + `httparchive.crawl.pages` + WHERE + date = '2021-07-01' AND + is_root_page + GROUP BY + client +) +USING (client) +WHERE + cats = 'CMS' AND + date = '2021-07-01' AND + is_root_page +GROUP BY + client, + total +ORDER BY + year DESC, + pct DESC diff --git a/sql/2025/cms/cms_adoption_by_geo.sql b/sql/2025/cms/cms_adoption_by_geo.sql new file mode 100644 index 00000000000..2415f6fdcc8 --- /dev/null +++ b/sql/2025/cms/cms_adoption_by_geo.sql @@ -0,0 +1,56 @@ +#standardSQL +# All CMS popularity per geo +# cms_adoption_by_geo.sql + +WITH geo_summary AS ( + SELECT + `chrome-ux-report`.experimental.GET_COUNTRY(country_code) AS geo, + IF(device = 'desktop', 'desktop', 'mobile') AS client, + origin, + COUNT(DISTINCT origin) OVER (PARTITION BY country_code, IF(device = 'desktop', 'desktop', 'mobile')) AS total + FROM + `chrome-ux-report.materialized.country_summary` + WHERE + yyyymm = 202507 +) + +SELECT + * +FROM ( + SELECT + client, + geo, + COUNT(0) AS pages, + ANY_VALUE(total) AS total, + COUNT(0) / ANY_VALUE(total) AS pct + FROM ( + SELECT DISTINCT + geo, + client, + total, + CONCAT(origin, '/') AS page + FROM + geo_summary + ) + JOIN ( + SELECT + client, + page + FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + date = '2025-07-01' AND + cats = 'CMS' AND + is_root_page + ) + USING (client, page) + GROUP BY + client, + geo +) +WHERE + pages > 1000 +ORDER BY + pages DESC diff --git a/sql/2025/cms/cms_adoption_by_rank_all.sql b/sql/2025/cms/cms_adoption_by_rank_all.sql new file mode 100644 index 00000000000..a217a8842f5 --- /dev/null +++ b/sql/2025/cms/cms_adoption_by_rank_all.sql @@ -0,0 +1,51 @@ +#standardSQL +# CMS adoption per rank +SELECT + client, + rank_grouping, + CASE rank_grouping + WHEN 1e8 THEN 'all' + ELSE TRIM(CAST(rank_grouping AS STRING FORMAT '99,999,999')) + END AS rank_grouping_text, + COUNT(DISTINCT page) AS pages, + MAX(total) AS total, + COUNT(DISTINCT page) / MAX(total) AS pct +FROM ( + SELECT + client, + page, + rank_grouping + FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS tech, + UNNEST(tech.categories) AS category, + UNNEST([1e3, 1e4, 1e5, 1e6, 1e7, 1e8]) AS rank_grouping + WHERE + date = '2025-07-01' AND + rank <= rank_grouping AND + is_root_page AND + category = 'CMS' +) +JOIN ( + SELECT + client, + rank_grouping, + COUNT(0) AS total + FROM + `httparchive.crawl.pages`, + UNNEST([1e3, 1e4, 1e5, 1e6, 1e7, 1e8]) AS rank_grouping + WHERE + date = '2025-07-01' AND + rank <= rank_grouping AND + is_root_page + GROUP BY + client, + rank_grouping +) +USING (client, rank_grouping) +GROUP BY + client, + rank_grouping +ORDER BY + rank_grouping, + pages DESC diff --git a/sql/2025/cms/cms_adoption_by_region.sql b/sql/2025/cms/cms_adoption_by_region.sql new file mode 100644 index 00000000000..3816fc5b070 --- /dev/null +++ b/sql/2025/cms/cms_adoption_by_region.sql @@ -0,0 +1,775 @@ +#standardSQL # ALL CMS popularity per geo +CREATE TEMP FUNCTION +GET_GEO(country_code STRING, geo STRING) +RETURNS STRING +LANGUAGE js AS ''' var countries = { "af": { "name": "Afghanistan", + "region": "Asia", + "sub-region": "Southern Asia" }, + "ax": { "name": "Åland Islands", + "region": "Europe", + "sub-region": "Northern Europe" }, + "al": { "name": "Albania", + "region": "Europe", + "sub-region": "Southern Europe" }, + "dz": { "name": "Algeria", + "region": "Africa", + "sub-region": "Northern Africa" }, + "as": { "name": "American Samoa", + "region": "Oceania", + "sub-region": "Polynesia" }, + "ad": { "name": "Andorra", + "region": "Europe", + "sub-region": "Southern Europe" }, + "ao": { "name": "Angola", + "region": "Africa", + "sub-region": "Middle Africa" }, + "ai": { "name": "Anguilla", + "region": "Americas", + "sub-region": "Caribbean" }, + "ag": { "name": "Antigua and Barbuda", + "region": "Americas", + "sub-region": "Caribbean" }, + "ar": { "name": "Argentina", + "region": "Americas", + "sub-region": "South America" }, + "am": { "name": "Armenia", + "region": "Asia", + "sub-region": "Western Asia" }, + "aw": { "name": "Aruba", + "region": "Americas", + "sub-region": "Caribbean" }, + "au": { "name": "Australia", + "region": "Oceania", + "sub-region": "Australia and New Zealand" }, + "at": { "name": "Austria", + "region": "Europe", + "sub-region": "Western Europe" }, + "az": { "name": "Azerbaijan", + "region": "Asia", + "sub-region": "Western Asia" }, + "bs": { "name": "Bahamas", + "region": "Americas", + "sub-region": "Caribbean" }, + "bh": { "name": "Bahrain", + "region": "Asia", + "sub-region": "Western Asia" }, + "bd": { "name": "Bangladesh", + "region": "Asia", + "sub-region": "Southern Asia" }, + "bb": { "name": "Barbados", + "region": "Americas", + "sub-region": "Caribbean" }, + "by": { "name": "Belarus", + "region": "Europe", + "sub-region": "Eastern Europe" }, + "be": { "name": "Belgium", + "region": "Europe", + "sub-region": "Western Europe" }, + "bz": { "name": "Belize", + "region": "Americas", + "sub-region": "Central America" }, + "bj": { "name": "Benin", + "region": "Africa", + "sub-region": "Western Africa" }, + "bm": { "name": "Bermuda", + "region": "Americas", + "sub-region": "Northern America" }, + "bt": { "name": "Bhutan", + "region": "Asia", + "sub-region": "Southern Asia" }, + "bo": { "name": "Bolivia (Plurinational State of)", + "region": "Americas", + "sub-region": "South America" }, + "bq": { "name": "Bonaire, Sint Eustatius and Saba", + "region": "Americas", + "sub-region": "Caribbean" }, + "ba": { "name": "Bosnia and Herzegovina", + "region": "Europe", + "sub-region": "Southern Europe" }, + "bw": { "name": "Botswana", + "region": "Africa", + "sub-region": "Southern Africa" }, + "br": { "name": "Brazil", + "region": "Americas", + "sub-region": "South America" }, + "io": { "name": "British Indian Ocean Territory", + "region": null, + "sub-region": null }, + "bn": { "name": "Brunei Darussalam", + "region": "Asia", + "sub-region": "South-Eastern Asia" }, + "bg": { "name": "Kosovo", + "region": "Europe", + "sub-region": "Eastern Europe" }, + "bf": { "name": "Burkina Faso", + "region": "Africa", + "sub-region": "Western Africa" }, + "bi": { "name": "Burundi", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "kh": { "name": "Cambodia", + "region": "Asia", + "sub-region": "South-Eastern Asia" }, + "cm": { "name": "Cameroon", + "region": "Africa", + "sub-region": "Middle Africa" }, + "ca": { "name": "Canada", + "region": "Americas", + "sub-region": "Northern America" }, + "cv": { "name": "Cabo Verde", + "region": "Africa", + "sub-region": "Western Africa" }, + "ky": { "name": "Cayman Islands", + "region": "Americas", + "sub-region": "Caribbean" }, + "cf": { "name": "Central African Republic", + "region": "Africa", + "sub-region": "Middle Africa" }, + "td": { "name": "Chad", + "region": "Africa", + "sub-region": "Middle Africa" }, + "cl": { "name": "Chile", + "region": "Americas", + "sub-region": "South America" }, + "cn": { "name": "China", + "region": "Asia", + "sub-region": "Eastern Asia" }, + "cx": { "name": "Christmas Island", + "region": null, + "sub-region": null }, + "co": { "name": "Colombia", + "region": "Americas", + "sub-region": "South America" }, + "km": { "name": "Comoros", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "cg": { "name": "Congo", + "region": "Africa", + "sub-region": "Middle Africa" }, + "cd": { "name": "Congo (Democratic Republic of the)", + "region": "Africa", + "sub-region": "Middle Africa" }, + "ck": { "name": "Cook Islands", + "region": "Oceania", + "sub-region": "Polynesia" }, + "cr": { "name": "Costa Rica", + "region": "Americas", + "sub-region": "Central America" }, + "ci": { "name": "Côte d'Ivoire", + "region": "Africa", + "sub-region": "Western Africa" }, + "hr": { "name": "Croatia", + "region": "Europe", + "sub-region": "Southern Europe" }, + "cu": { "name": "Cuba", + "region": "Americas", + "sub-region": "Caribbean" }, + "cw": { "name": "Curaçao", + "region": "Americas", + "sub-region": "Caribbean" }, + "cy": { "name": "Cyprus", + "region": "Asia", + "sub-region": "Western Asia" }, + "cz": { "name": "Czech Republic", + "region": "Europe", + "sub-region": "Eastern Europe" }, + "dk": { "name": "Denmark", + "region": "Europe", + "sub-region": "Northern Europe" }, + "dj": { "name": "Djibouti", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "dm": { "name": "Dominica", + "region": "Americas", + "sub-region": "Caribbean" }, + "do": { "name": "Dominican Republic", + "region": "Americas", + "sub-region": "Caribbean" }, + "ec": { "name": "Ecuador", + "region": "Americas", + "sub-region": "South America" }, + "eg": { "name": "Egypt", + "region": "Africa", + "sub-region": "Northern Africa" }, + "sv": { "name": "El Salvador", + "region": "Americas", + "sub-region": "Central America" }, + "gq": { "name": "Equatorial Guinea", + "region": "Africa", + "sub-region": "Middle Africa" }, + "er": { "name": "Eritrea", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "ee": { "name": "Estonia", + "region": "Europe", + "sub-region": "Northern Europe" }, + "et": { "name": "Ethiopia", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "fk": { "name": "Falkland Islands (Malvinas)", + "region": "Americas", + "sub-region": "South America" }, + "fo": { "name": "Faroe Islands", + "region": "Europe", + "sub-region": "Northern Europe" }, + "fj": { "name": "Fiji", + "region": "Oceania", + "sub-region": "Melanesia" }, + "fi": { "name": "Finland", + "region": "Europe", + "sub-region": "Northern Europe" }, + "fr": { "name": "France", + "region": "Europe", + "sub-region": "Western Europe" }, + "gf": { "name": "French Guiana", + "region": "Americas", + "sub-region": "South America" }, + "pf": { "name": "French Polynesia", + "region": "Oceania", + "sub-region": "Polynesia" }, + "ga": { "name": "Gabon", + "region": "Africa", + "sub-region": "Middle Africa" }, + "gm": { "name": "Gambia", + "region": "Africa", + "sub-region": "Western Africa" }, + "ge": { "name": "Georgia", + "region": "Asia", + "sub-region": "Western Asia" }, + "de": { "name": "Germany", + "region": "Europe", + "sub-region": "Western Europe" }, + "gh": { "name": "Ghana", + "region": "Africa", + "sub-region": "Western Africa" }, + "gi": { "name": "Gibraltar", + "region": "Europe", + "sub-region": "Southern Europe" }, + "gr": { "name": "Greece", + "region": "Europe", + "sub-region": "Southern Europe" }, + "gl": { "name": "Greenland", + "region": "Americas", + "sub-region": "Northern America" }, + "gd": { "name": "Grenada", + "region": "Americas", + "sub-region": "Caribbean" }, + "gp": { "name": "Guadeloupe", + "region": "Americas", + "sub-region": "Caribbean" }, + "gu": { "name": "Guam", + "region": "Oceania", + "sub-region": "Micronesia" }, + "gt": { "name": "Guatemala", + "region": "Americas", + "sub-region": "Central America" }, + "gg": { "name": "Guernsey", + "region": "Europe", + "sub-region": "Northern Europe" }, + "gn": { "name": "Guinea", + "region": "Africa", + "sub-region": "Western Africa" }, + "gw": { "name": "Guinea-Bissau", + "region": "Africa", + "sub-region": "Western Africa" }, + "gy": { "name": "Guyana", + "region": "Americas", + "sub-region": "South America" }, + "ht": { "name": "Haiti", + "region": "Americas", + "sub-region": "Caribbean" }, + "hn": { "name": "Honduras", + "region": "Americas", + "sub-region": "Central America" }, + "hk": { "name": "Hong Kong", + "region": "Asia", + "sub-region": "Eastern Asia" }, + "hu": { "name": "Hungary", + "region": "Europe", + "sub-region": "Eastern Europe" }, + "is": { "name": "Iceland", + "region": "Europe", + "sub-region": "Northern Europe" }, + "in": { "name": "India", + "region": "Asia", + "sub-region": "Southern Asia" }, + "id": { "name": "Indonesia", + "region": "Asia", + "sub-region": "South-Eastern Asia" }, + "ir": { "name": "Iran (Islamic Republic of)", + "region": "Asia", + "sub-region": "Southern Asia" }, + "iq": { "name": "Iraq", + "region": "Asia", + "sub-region": "Western Asia" }, + "ie": { "name": "Ireland", + "region": "Europe", + "sub-region": "Northern Europe" }, + "im": { "name": "Isle of Man", + "region": "Europe", + "sub-region": "Northern Europe" }, + "il": { "name": "Israel", + "region": "Asia", + "sub-region": "Western Asia" }, + "it": { "name": "Italy", + "region": "Europe", + "sub-region": "Southern Europe" }, + "jm": { "name": "Jamaica", + "region": "Americas", + "sub-region": "Caribbean" }, + "jp": { "name": "Japan", + "region": "Asia", + "sub-region": "Eastern Asia" }, + "je": { "name": "Jersey", + "region": "Europe", + "sub-region": "Northern Europe" }, + "jo": { "name": "Jordan", + "region": "Asia", + "sub-region": "Western Asia" }, + "kz": { "name": "Kazakhstan", + "region": "Asia", + "sub-region": "Central Asia" }, + "ke": { "name": "Kenya", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "ki": { "name": "Kiribati", + "region": "Oceania", + "sub-region": "Micronesia" }, + "kp": { "name": "Korea (Democratic People's Republic of)", + "region": "Asia", + "sub-region": "Eastern Asia" }, + "kr": { "name": "Korea (Republic of)", + "region": "Asia", + "sub-region": "Eastern Asia" }, + "kw": { "name": "Kuwait", + "region": "Asia", + "sub-region": "Western Asia" }, + "kg": { "name": "Kyrgyzstan", + "region": "Asia", + "sub-region": "Central Asia" }, + "la": { "name": "Lao People's Democratic Republic", + "region": "Asia", + "sub-region": "South-Eastern Asia" }, + "lv": { "name": "Latvia", + "region": "Europe", + "sub-region": "Northern Europe" }, + "lb": { "name": "Lebanon", + "region": "Asia", + "sub-region": "Western Asia" }, + "ls": { "name": "Lesotho", + "region": "Africa", + "sub-region": "Southern Africa" }, + "lr": { "name": "Liberia", + "region": "Africa", + "sub-region": "Western Africa" }, + "ly": { "name": "Libya", + "region": "Africa", + "sub-region": "Northern Africa" }, + "li": { "name": "Liechtenstein", + "region": "Europe", + "sub-region": "Western Europe" }, + "lt": { "name": "Lithuania", + "region": "Europe", + "sub-region": "Northern Europe" }, + "lu": { "name": "Luxembourg", + "region": "Europe", + "sub-region": "Western Europe" }, + "mo": { "name": "Macao", + "region": "Asia", + "sub-region": "Eastern Asia" }, + "mk": { "name": "Macedonia (the former Yugoslav Republic of)", + "region": "Europe", + "sub-region": "Southern Europe" }, + "mg": { "name": "Madagascar", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "mw": { "name": "Malawi", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "my": { "name": "Malaysia", + "region": "Asia", + "sub-region": "South-Eastern Asia" }, + "mv": { "name": "Maldives", + "region": "Asia", + "sub-region": "Southern Asia" }, + "ml": { "name": "Mali", + "region": "Africa", + "sub-region": "Western Africa" }, + "mt": { "name": "Malta", + "region": "Europe", + "sub-region": "Southern Europe" }, + "mh": { "name": "Marshall Islands", + "region": "Oceania", + "sub-region": "Micronesia" }, + "mq": { "name": "Martinique", + "region": "Americas", + "sub-region": "Caribbean" }, + "mr": { "name": "Mauritania", + "region": "Africa", + "sub-region": "Western Africa" }, + "mu": { "name": "Mauritius", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "yt": { "name": "Mayotte", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "mx": { "name": "Mexico", + "region": "Americas", + "sub-region": "Central America" }, + "fm": { "name": "Micronesia (Federated States of)", + "region": "Oceania", + "sub-region": "Micronesia" }, + "md": { "name": "Moldova (Republic of)", + "region": "Europe", + "sub-region": "Eastern Europe" }, + "mc": { "name": "Monaco", + "region": "Europe", + "sub-region": "Western Europe" }, + "mn": { "name": "Mongolia", + "region": "Asia", + "sub-region": "Eastern Asia" }, + "me": { "name": "Montenegro", + "region": "Europe", + "sub-region": "Southern Europe" }, + "ms": { "name": "Montserrat", + "region": "Americas", + "sub-region": "Caribbean" }, + "ma": { "name": "Morocco", + "region": "Africa", + "sub-region": "Northern Africa" }, + "mz": { "name": "Mozambique", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "mm": { "name": "Myanmar", + "region": "Asia", + "sub-region": "South-Eastern Asia" }, + "na": { "name": "Namibia", + "region": "Africa", + "sub-region": "Southern Africa" }, + "nr": { "name": "Nauru", + "region": "Oceania", + "sub-region": "Micronesia" }, + "np": { "name": "Nepal", + "region": "Asia", + "sub-region": "Southern Asia" }, + "nl": { "name": "Netherlands", + "region": "Europe", + "sub-region": "Western Europe" }, + "nc": { "name": "New Caledonia", + "region": "Oceania", + "sub-region": "Melanesia" }, + "nz": { "name": "New Zealand", + "region": "Oceania", + "sub-region": "Australia and New Zealand" }, + "ni": { "name": "Nicaragua", + "region": "Americas", + "sub-region": "Central America" }, + "ne": { "name": "Niger", + "region": "Africa", + "sub-region": "Western Africa" }, + "ng": { "name": "Nigeria", + "region": "Africa", + "sub-region": "Western Africa" }, + "nf": { "name": "Norfolk Island", + "region": "Oceania", + "sub-region": "Australia and New Zealand" }, + "mp": { "name": "Northern Mariana Islands", + "region": "Oceania", + "sub-region": "Micronesia" }, + "no": { "name": "Norway", + "region": "Europe", + "sub-region": "Northern Europe" }, + "om": { "name": "Oman", + "region": "Asia", + "sub-region": "Western Asia" }, + "pk": { "name": "Pakistan", + "region": "Asia", + "sub-region": "Southern Asia" }, + "pw": { "name": "Palau", + "region": "Oceania", + "sub-region": "Micronesia" }, + "ps": { "name": "Palestine, State of", + "region": "Asia", + "sub-region": "Western Asia" }, + "pa": { "name": "Panama", + "region": "Americas", + "sub-region": "Central America" }, + "pg": { "name": "Papua New Guinea", + "region": "Oceania", + "sub-region": "Melanesia" }, + "py": { "name": "Paraguay", + "region": "Americas", + "sub-region": "South America" }, + "pe": { "name": "Peru", + "region": "Americas", + "sub-region": "South America" }, + "ph": { "name": "Philippines", + "region": "Asia", + "sub-region": "South-Eastern Asia" }, + "pl": { "name": "Poland", + "region": "Europe", + "sub-region": "Eastern Europe" }, + "pt": { "name": "Portugal", + "region": "Europe", + "sub-region": "Southern Europe" }, + "pr": { "name": "Puerto Rico", + "region": "Americas", + "sub-region": "Caribbean" }, + "qa": { "name": "Qatar", + "region": "Asia", + "sub-region": "Western Asia" }, + "re": { "name": "Réunion", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "ro": { "name": "Romania", + "region": "Europe", + "sub-region": "Eastern Europe" }, + "ru": { "name": "Russian Federation", + "region": "Europe", + "sub-region": "Eastern Europe" }, + "rw": { "name": "Rwanda", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "bl": { "name": "Saint Barthélemy", + "region": "Americas", + "sub-region": "Caribbean" }, + "sh": { "name": "Saint Helena, Ascension and Tristan da Cunha", + "region": "Africa", + "sub-region": "Western Africa" }, + "kn": { "name": "Saint Kitts and Nevis", + "region": "Americas", + "sub-region": "Caribbean" }, + "lc": { "name": "Saint Lucia", + "region": "Americas", + "sub-region": "Caribbean" }, + "mf": { "name": "Saint Martin (French part)", + "region": "Americas", + "sub-region": "Caribbean" }, + "pm": { "name": "Saint Pierre and Miquelon", + "region": "Americas", + "sub-region": "Northern America" }, + "vc": { "name": "Saint Vincent and the Grenadines", + "region": "Americas", + "sub-region": "Caribbean" }, + "ws": { "name": "Samoa", + "region": "Oceania", + "sub-region": "Polynesia" }, + "sm": { "name": "San Marino", + "region": "Europe", + "sub-region": "Southern Europe" }, + "st": { "name": "Sao Tome and Principe", + "region": "Africa", + "sub-region": "Middle Africa" }, + "sa": { "name": "Saudi Arabia", + "region": "Asia", + "sub-region": "Western Asia" }, + "sn": { "name": "Senegal", + "region": "Africa", + "sub-region": "Western Africa" }, + "rs": { "name": "Serbia", + "region": "Europe", + "sub-region": "Southern Europe" }, + "sc": { "name": "Seychelles", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "sl": { "name": "Sierra Leone", + "region": "Africa", + "sub-region": "Western Africa" }, + "sg": { "name": "Singapore", + "region": "Asia", + "sub-region": "South-Eastern Asia" }, + "sx": { "name": "Sint Maarten (Dutch part)", + "region": "Americas", + "sub-region": "Caribbean" }, + "sk": { "name": "Slovakia", + "region": "Europe", + "sub-region": "Eastern Europe" }, + "si": { "name": "Slovenia", + "region": "Europe", + "sub-region": "Southern Europe" }, + "sb": { "name": "Solomon Islands", + "region": "Oceania", + "sub-region": "Melanesia" }, + "so": { "name": "Somalia", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "za": { "name": "South Africa", + "region": "Africa", + "sub-region": "Southern Africa" }, + "ss": { "name": "South Sudan", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "es": { "name": "Spain", + "region": "Europe", + "sub-region": "Southern Europe" }, + "lk": { "name": "Sri Lanka", + "region": "Asia", + "sub-region": "Southern Asia" }, + "sd": { "name": "Sudan", + "region": "Africa", + "sub-region": "Northern Africa" }, + "sr": { "name": "Suriname", + "region": "Americas", + "sub-region": "South America" }, + "sj": { "name": "Svalbard and Jan Mayen", + "region": "Europe", + "sub-region": "Northern Europe" }, + "sz": { "name": "Swaziland", + "region": "Africa", + "sub-region": "Southern Africa" }, + "se": { "name": "Sweden", + "region": "Europe", + "sub-region": "Northern Europe" }, + "ch": { "name": "Switzerland", + "region": "Europe", + "sub-region": "Western Europe" }, + "sy": { "name": "Syrian Arab Republic", + "region": "Asia", + "sub-region": "Western Asia" }, + "tw": { "name": "Taiwan, Province of China", + "region": "Asia", + "sub-region": "Eastern Asia" }, + "tj": { "name": "Tajikistan", + "region": "Asia", + "sub-region": "Central Asia" }, + "tz": { "name": "Tanzania, United Republic of", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "th": { "name": "Thailand", + "region": "Asia", + "sub-region": "South-Eastern Asia" }, + "tl": { "name": "Timor-Leste", + "region": "Asia", + "sub-region": "South-Eastern Asia" }, + "tg": { "name": "Togo", + "region": "Africa", + "sub-region": "Western Africa" }, + "to": { "name": "Tonga", + "region": "Oceania", + "sub-region": "Polynesia" }, + "tt": { "name": "Trinidad and Tobago", + "region": "Americas", + "sub-region": "Caribbean" }, + "tn": { "name": "Tunisia", + "region": "Africa", + "sub-region": "Northern Africa" }, + "tr": { "name": "Turkey", + "region": "Asia", + "sub-region": "Western Asia" }, + "tm": { "name": "Turkmenistan", + "region": "Asia", + "sub-region": "Central Asia" }, + "tc": { "name": "Turks and Caicos Islands", + "region": "Americas", + "sub-region": "Caribbean" }, + "tv": { "name": "Tuvalu", + "region": "Oceania", + "sub-region": "Polynesia" }, + "ug": { "name": "Uganda", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "ua": { "name": "Ukraine", + "region": "Europe", + "sub-region": "Eastern Europe" }, + "ae": { "name": "United Arab Emirates", + "region": "Asia", + "sub-region": "Western Asia" }, + "gb": { "name": "United Kingdom of Great Britain and Northern Ireland", + "region": "Europe", + "sub-region": "Northern Europe" }, + "us": { "name": "United States of America", + "region": "Americas", + "sub-region": "Northern America" }, + "uy": { "name": "Uruguay", + "region": "Americas", + "sub-region": "South America" }, + "uz": { "name": "Uzbekistan", + "region": "Asia", + "sub-region": "Central Asia" }, + "vu": { "name": "Vanuatu", + "region": "Oceania", + "sub-region": "Melanesia" }, + "ve": { "name": "Venezuela (Bolivarian Republic of)", + "region": "Americas", + "sub-region": "South America" }, + "vn": { "name": "Viet Nam", + "region": "Asia", + "sub-region": "South-Eastern Asia" }, + "vg": { "name": "Virgin Islands (British)", + "region": "Americas", + "sub-region": "Caribbean" }, + "vi": { "name": "Virgin Islands (U.S.)", + "region": "Americas", + "sub-region": "Caribbean" }, + "eh": { "name": "Western Sahara", + "region": "Africa", + "sub-region": "Northern Africa" }, + "ye": { "name": "Yemen", + "region": "Asia", + "sub-region": "Western Asia" }, + "zm": { "name": "Zambia", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "zw": { "name": "Zimbabwe", + "region": "Africa", + "sub-region": "Eastern Africa" }, + "xk": { "name": "Kosovo", + "region": "Europe", + "sub-region": "Eastern Europe" } }; return countries[country_code][geo]; '''; +WITH +geo_summary AS ( + SELECT + GET_GEO(country_code, 'region') AS region, + IF(device = 'desktop', 'desktop', 'mobile') AS client, + origin, + COUNT(DISTINCT origin) OVER ( + PARTITION BY + GET_GEO(country_code, 'region'), + IF(device = 'desktop', 'desktop', 'mobile') + ) AS total + FROM + `chrome-ux-report.materialized.country_summary` + WHERE + yyyymm = 202507 +) + +SELECT + * +FROM ( + SELECT + client, + region, + COUNT(0) AS pages, + ANY_VALUE(total) AS total, + COUNT(0) / ANY_VALUE(total) AS pct + FROM ( + SELECT DISTINCT + region, + client, + total, + CONCAT(origin, '/') AS page + FROM + geo_summary + ) + JOIN ( + SELECT + client, + page + FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + date = '2025-07-01' AND + cats = 'CMS' AND + is_root_page + ) + USING (client, page) + GROUP BY + client, + region +) +WHERE + pages > 1000 +ORDER BY + pages DESC diff --git a/sql/2025/cms/cms_adoption_by_subregion.sql b/sql/2025/cms/cms_adoption_by_subregion.sql new file mode 100644 index 00000000000..22e8b922248 --- /dev/null +++ b/sql/2025/cms/cms_adoption_by_subregion.sql @@ -0,0 +1,1251 @@ +#standardSQL +# All CMS popularity per geo +CREATE TEMP FUNCTION GET_GEO(country_code STRING, geo STRING) RETURNS STRING LANGUAGE js AS ''' +var countries = { + "af": { + "name": "Afghanistan", + "region": "Asia", + "sub-region": "Southern Asia" + }, + "ax": { + "name": "Åland Islands", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "al": { + "name": "Albania", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "dz": { + "name": "Algeria", + "region": "Africa", + "sub-region": "Northern Africa" + }, + "as": { + "name": "American Samoa", + "region": "Oceania", + "sub-region": "Polynesia" + }, + "ad": { + "name": "Andorra", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "ao": { + "name": "Angola", + "region": "Africa", + "sub-region": "Middle Africa" + }, + "ai": { + "name": "Anguilla", + "region": "Americas", + "sub-region": "Caribbean" + }, + "ag": { + "name": "Antigua and Barbuda", + "region": "Americas", + "sub-region": "Caribbean" + }, + "ar": { + "name": "Argentina", + "region": "Americas", + "sub-region": "South America" + }, + "am": { + "name": "Armenia", + "region": "Asia", + "sub-region": "Western Asia" + }, + "aw": { + "name": "Aruba", + "region": "Americas", + "sub-region": "Caribbean" + }, + "au": { + "name": "Australia", + "region": "Oceania", + "sub-region": "Australia and New Zealand" + }, + "at": { + "name": "Austria", + "region": "Europe", + "sub-region": "Western Europe" + }, + "az": { + "name": "Azerbaijan", + "region": "Asia", + "sub-region": "Western Asia" + }, + "bs": { + "name": "Bahamas", + "region": "Americas", + "sub-region": "Caribbean" + }, + "bh": { + "name": "Bahrain", + "region": "Asia", + "sub-region": "Western Asia" + }, + "bd": { + "name": "Bangladesh", + "region": "Asia", + "sub-region": "Southern Asia" + }, + "bb": { + "name": "Barbados", + "region": "Americas", + "sub-region": "Caribbean" + }, + "by": { + "name": "Belarus", + "region": "Europe", + "sub-region": "Eastern Europe" + }, + "be": { + "name": "Belgium", + "region": "Europe", + "sub-region": "Western Europe" + }, + "bz": { + "name": "Belize", + "region": "Americas", + "sub-region": "Central America" + }, + "bj": { + "name": "Benin", + "region": "Africa", + "sub-region": "Western Africa" + }, + "bm": { + "name": "Bermuda", + "region": "Americas", + "sub-region": "Northern America" + }, + "bt": { + "name": "Bhutan", + "region": "Asia", + "sub-region": "Southern Asia" + }, + "bo": { + "name": "Bolivia (Plurinational State of)", + "region": "Americas", + "sub-region": "South America" + }, + "bq": { + "name": "Bonaire, Sint Eustatius and Saba", + "region": "Americas", + "sub-region": "Caribbean" + }, + "ba": { + "name": "Bosnia and Herzegovina", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "bw": { + "name": "Botswana", + "region": "Africa", + "sub-region": "Southern Africa" + }, + "br": { + "name": "Brazil", + "region": "Americas", + "sub-region": "South America" + }, + "io": { + "name": "British Indian Ocean Territory", + "region": null, + "sub-region": null + }, + "bn": { + "name": "Brunei Darussalam", + "region": "Asia", + "sub-region": "South-Eastern Asia" + }, + "bg": { + "name": "Kosovo", + "region": "Europe", + "sub-region": "Eastern Europe" + }, + "bf": { + "name": "Burkina Faso", + "region": "Africa", + "sub-region": "Western Africa" + }, + "bi": { + "name": "Burundi", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "kh": { + "name": "Cambodia", + "region": "Asia", + "sub-region": "South-Eastern Asia" + }, + "cm": { + "name": "Cameroon", + "region": "Africa", + "sub-region": "Middle Africa" + }, + "ca": { + "name": "Canada", + "region": "Americas", + "sub-region": "Northern America" + }, + "cv": { + "name": "Cabo Verde", + "region": "Africa", + "sub-region": "Western Africa" + }, + "ky": { + "name": "Cayman Islands", + "region": "Americas", + "sub-region": "Caribbean" + }, + "cf": { + "name": "Central African Republic", + "region": "Africa", + "sub-region": "Middle Africa" + }, + "td": { + "name": "Chad", + "region": "Africa", + "sub-region": "Middle Africa" + }, + "cl": { + "name": "Chile", + "region": "Americas", + "sub-region": "South America" + }, + "cn": { + "name": "China", + "region": "Asia", + "sub-region": "Eastern Asia" + }, + "cx": { + "name": "Christmas Island", + "region": null, + "sub-region": null + }, + "co": { + "name": "Colombia", + "region": "Americas", + "sub-region": "South America" + }, + "km": { + "name": "Comoros", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "cg": { + "name": "Congo", + "region": "Africa", + "sub-region": "Middle Africa" + }, + "cd": { + "name": "Congo (Democratic Republic of the)", + "region": "Africa", + "sub-region": "Middle Africa" + }, + "ck": { + "name": "Cook Islands", + "region": "Oceania", + "sub-region": "Polynesia" + }, + "cr": { + "name": "Costa Rica", + "region": "Americas", + "sub-region": "Central America" + }, + "ci": { + "name": "Côte d'Ivoire", + "region": "Africa", + "sub-region": "Western Africa" + }, + "hr": { + "name": "Croatia", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "cu": { + "name": "Cuba", + "region": "Americas", + "sub-region": "Caribbean" + }, + "cw": { + "name": "Curaçao", + "region": "Americas", + "sub-region": "Caribbean" + }, + "cy": { + "name": "Cyprus", + "region": "Asia", + "sub-region": "Western Asia" + }, + "cz": { + "name": "Czech Republic", + "region": "Europe", + "sub-region": "Eastern Europe" + }, + "dk": { + "name": "Denmark", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "dj": { + "name": "Djibouti", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "dm": { + "name": "Dominica", + "region": "Americas", + "sub-region": "Caribbean" + }, + "do": { + "name": "Dominican Republic", + "region": "Americas", + "sub-region": "Caribbean" + }, + "ec": { + "name": "Ecuador", + "region": "Americas", + "sub-region": "South America" + }, + "eg": { + "name": "Egypt", + "region": "Africa", + "sub-region": "Northern Africa" + }, + "sv": { + "name": "El Salvador", + "region": "Americas", + "sub-region": "Central America" + }, + "gq": { + "name": "Equatorial Guinea", + "region": "Africa", + "sub-region": "Middle Africa" + }, + "er": { + "name": "Eritrea", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "ee": { + "name": "Estonia", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "et": { + "name": "Ethiopia", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "fk": { + "name": "Falkland Islands (Malvinas)", + "region": "Americas", + "sub-region": "South America" + }, + "fo": { + "name": "Faroe Islands", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "fj": { + "name": "Fiji", + "region": "Oceania", + "sub-region": "Melanesia" + }, + "fi": { + "name": "Finland", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "fr": { + "name": "France", + "region": "Europe", + "sub-region": "Western Europe" + }, + "gf": { + "name": "French Guiana", + "region": "Americas", + "sub-region": "South America" + }, + "pf": { + "name": "French Polynesia", + "region": "Oceania", + "sub-region": "Polynesia" + }, + "ga": { + "name": "Gabon", + "region": "Africa", + "sub-region": "Middle Africa" + }, + "gm": { + "name": "Gambia", + "region": "Africa", + "sub-region": "Western Africa" + }, + "ge": { + "name": "Georgia", + "region": "Asia", + "sub-region": "Western Asia" + }, + "de": { + "name": "Germany", + "region": "Europe", + "sub-region": "Western Europe" + }, + "gh": { + "name": "Ghana", + "region": "Africa", + "sub-region": "Western Africa" + }, + "gi": { + "name": "Gibraltar", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "gr": { + "name": "Greece", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "gl": { + "name": "Greenland", + "region": "Americas", + "sub-region": "Northern America" + }, + "gd": { + "name": "Grenada", + "region": "Americas", + "sub-region": "Caribbean" + }, + "gp": { + "name": "Guadeloupe", + "region": "Americas", + "sub-region": "Caribbean" + }, + "gu": { + "name": "Guam", + "region": "Oceania", + "sub-region": "Micronesia" + }, + "gt": { + "name": "Guatemala", + "region": "Americas", + "sub-region": "Central America" + }, + "gg": { + "name": "Guernsey", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "gn": { + "name": "Guinea", + "region": "Africa", + "sub-region": "Western Africa" + }, + "gw": { + "name": "Guinea-Bissau", + "region": "Africa", + "sub-region": "Western Africa" + }, + "gy": { + "name": "Guyana", + "region": "Americas", + "sub-region": "South America" + }, + "ht": { + "name": "Haiti", + "region": "Americas", + "sub-region": "Caribbean" + }, + "hn": { + "name": "Honduras", + "region": "Americas", + "sub-region": "Central America" + }, + "hk": { + "name": "Hong Kong", + "region": "Asia", + "sub-region": "Eastern Asia" + }, + "hu": { + "name": "Hungary", + "region": "Europe", + "sub-region": "Eastern Europe" + }, + "is": { + "name": "Iceland", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "in": { + "name": "India", + "region": "Asia", + "sub-region": "Southern Asia" + }, + "id": { + "name": "Indonesia", + "region": "Asia", + "sub-region": "South-Eastern Asia" + }, + "ir": { + "name": "Iran (Islamic Republic of)", + "region": "Asia", + "sub-region": "Southern Asia" + }, + "iq": { + "name": "Iraq", + "region": "Asia", + "sub-region": "Western Asia" + }, + "ie": { + "name": "Ireland", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "im": { + "name": "Isle of Man", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "il": { + "name": "Israel", + "region": "Asia", + "sub-region": "Western Asia" + }, + "it": { + "name": "Italy", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "jm": { + "name": "Jamaica", + "region": "Americas", + "sub-region": "Caribbean" + }, + "jp": { + "name": "Japan", + "region": "Asia", + "sub-region": "Eastern Asia" + }, + "je": { + "name": "Jersey", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "jo": { + "name": "Jordan", + "region": "Asia", + "sub-region": "Western Asia" + }, + "kz": { + "name": "Kazakhstan", + "region": "Asia", + "sub-region": "Central Asia" + }, + "ke": { + "name": "Kenya", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "ki": { + "name": "Kiribati", + "region": "Oceania", + "sub-region": "Micronesia" + }, + "kp": { + "name": "Korea (Democratic People's Republic of)", + "region": "Asia", + "sub-region": "Eastern Asia" + }, + "kr": { + "name": "Korea (Republic of)", + "region": "Asia", + "sub-region": "Eastern Asia" + }, + "kw": { + "name": "Kuwait", + "region": "Asia", + "sub-region": "Western Asia" + }, + "kg": { + "name": "Kyrgyzstan", + "region": "Asia", + "sub-region": "Central Asia" + }, + "la": { + "name": "Lao People's Democratic Republic", + "region": "Asia", + "sub-region": "South-Eastern Asia" + }, + "lv": { + "name": "Latvia", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "lb": { + "name": "Lebanon", + "region": "Asia", + "sub-region": "Western Asia" + }, + "ls": { + "name": "Lesotho", + "region": "Africa", + "sub-region": "Southern Africa" + }, + "lr": { + "name": "Liberia", + "region": "Africa", + "sub-region": "Western Africa" + }, + "ly": { + "name": "Libya", + "region": "Africa", + "sub-region": "Northern Africa" + }, + "li": { + "name": "Liechtenstein", + "region": "Europe", + "sub-region": "Western Europe" + }, + "lt": { + "name": "Lithuania", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "lu": { + "name": "Luxembourg", + "region": "Europe", + "sub-region": "Western Europe" + }, + "mo": { + "name": "Macao", + "region": "Asia", + "sub-region": "Eastern Asia" + }, + "mk": { + "name": "Macedonia (the former Yugoslav Republic of)", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "mg": { + "name": "Madagascar", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "mw": { + "name": "Malawi", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "my": { + "name": "Malaysia", + "region": "Asia", + "sub-region": "South-Eastern Asia" + }, + "mv": { + "name": "Maldives", + "region": "Asia", + "sub-region": "Southern Asia" + }, + "ml": { + "name": "Mali", + "region": "Africa", + "sub-region": "Western Africa" + }, + "mt": { + "name": "Malta", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "mh": { + "name": "Marshall Islands", + "region": "Oceania", + "sub-region": "Micronesia" + }, + "mq": { + "name": "Martinique", + "region": "Americas", + "sub-region": "Caribbean" + }, + "mr": { + "name": "Mauritania", + "region": "Africa", + "sub-region": "Western Africa" + }, + "mu": { + "name": "Mauritius", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "yt": { + "name": "Mayotte", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "mx": { + "name": "Mexico", + "region": "Americas", + "sub-region": "Central America" + }, + "fm": { + "name": "Micronesia (Federated States of)", + "region": "Oceania", + "sub-region": "Micronesia" + }, + "md": { + "name": "Moldova (Republic of)", + "region": "Europe", + "sub-region": "Eastern Europe" + }, + "mc": { + "name": "Monaco", + "region": "Europe", + "sub-region": "Western Europe" + }, + "mn": { + "name": "Mongolia", + "region": "Asia", + "sub-region": "Eastern Asia" + }, + "me": { + "name": "Montenegro", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "ms": { + "name": "Montserrat", + "region": "Americas", + "sub-region": "Caribbean" + }, + "ma": { + "name": "Morocco", + "region": "Africa", + "sub-region": "Northern Africa" + }, + "mz": { + "name": "Mozambique", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "mm": { + "name": "Myanmar", + "region": "Asia", + "sub-region": "South-Eastern Asia" + }, + "na": { + "name": "Namibia", + "region": "Africa", + "sub-region": "Southern Africa" + }, + "nr": { + "name": "Nauru", + "region": "Oceania", + "sub-region": "Micronesia" + }, + "np": { + "name": "Nepal", + "region": "Asia", + "sub-region": "Southern Asia" + }, + "nl": { + "name": "Netherlands", + "region": "Europe", + "sub-region": "Western Europe" + }, + "nc": { + "name": "New Caledonia", + "region": "Oceania", + "sub-region": "Melanesia" + }, + "nz": { + "name": "New Zealand", + "region": "Oceania", + "sub-region": "Australia and New Zealand" + }, + "ni": { + "name": "Nicaragua", + "region": "Americas", + "sub-region": "Central America" + }, + "ne": { + "name": "Niger", + "region": "Africa", + "sub-region": "Western Africa" + }, + "ng": { + "name": "Nigeria", + "region": "Africa", + "sub-region": "Western Africa" + }, + "nf": { + "name": "Norfolk Island", + "region": "Oceania", + "sub-region": "Australia and New Zealand" + }, + "mp": { + "name": "Northern Mariana Islands", + "region": "Oceania", + "sub-region": "Micronesia" + }, + "no": { + "name": "Norway", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "om": { + "name": "Oman", + "region": "Asia", + "sub-region": "Western Asia" + }, + "pk": { + "name": "Pakistan", + "region": "Asia", + "sub-region": "Southern Asia" + }, + "pw": { + "name": "Palau", + "region": "Oceania", + "sub-region": "Micronesia" + }, + "ps": { + "name": "Palestine, State of", + "region": "Asia", + "sub-region": "Western Asia" + }, + "pa": { + "name": "Panama", + "region": "Americas", + "sub-region": "Central America" + }, + "pg": { + "name": "Papua New Guinea", + "region": "Oceania", + "sub-region": "Melanesia" + }, + "py": { + "name": "Paraguay", + "region": "Americas", + "sub-region": "South America" + }, + "pe": { + "name": "Peru", + "region": "Americas", + "sub-region": "South America" + }, + "ph": { + "name": "Philippines", + "region": "Asia", + "sub-region": "South-Eastern Asia" + }, + "pl": { + "name": "Poland", + "region": "Europe", + "sub-region": "Eastern Europe" + }, + "pt": { + "name": "Portugal", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "pr": { + "name": "Puerto Rico", + "region": "Americas", + "sub-region": "Caribbean" + }, + "qa": { + "name": "Qatar", + "region": "Asia", + "sub-region": "Western Asia" + }, + "re": { + "name": "Réunion", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "ro": { + "name": "Romania", + "region": "Europe", + "sub-region": "Eastern Europe" + }, + "ru": { + "name": "Russian Federation", + "region": "Europe", + "sub-region": "Eastern Europe" + }, + "rw": { + "name": "Rwanda", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "bl": { + "name": "Saint Barthélemy", + "region": "Americas", + "sub-region": "Caribbean" + }, + "sh": { + "name": "Saint Helena, Ascension and Tristan da Cunha", + "region": "Africa", + "sub-region": "Western Africa" + }, + "kn": { + "name": "Saint Kitts and Nevis", + "region": "Americas", + "sub-region": "Caribbean" + }, + "lc": { + "name": "Saint Lucia", + "region": "Americas", + "sub-region": "Caribbean" + }, + "mf": { + "name": "Saint Martin (French part)", + "region": "Americas", + "sub-region": "Caribbean" + }, + "pm": { + "name": "Saint Pierre and Miquelon", + "region": "Americas", + "sub-region": "Northern America" + }, + "vc": { + "name": "Saint Vincent and the Grenadines", + "region": "Americas", + "sub-region": "Caribbean" + }, + "ws": { + "name": "Samoa", + "region": "Oceania", + "sub-region": "Polynesia" + }, + "sm": { + "name": "San Marino", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "st": { + "name": "Sao Tome and Principe", + "region": "Africa", + "sub-region": "Middle Africa" + }, + "sa": { + "name": "Saudi Arabia", + "region": "Asia", + "sub-region": "Western Asia" + }, + "sn": { + "name": "Senegal", + "region": "Africa", + "sub-region": "Western Africa" + }, + "rs": { + "name": "Serbia", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "sc": { + "name": "Seychelles", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "sl": { + "name": "Sierra Leone", + "region": "Africa", + "sub-region": "Western Africa" + }, + "sg": { + "name": "Singapore", + "region": "Asia", + "sub-region": "South-Eastern Asia" + }, + "sx": { + "name": "Sint Maarten (Dutch part)", + "region": "Americas", + "sub-region": "Caribbean" + }, + "sk": { + "name": "Slovakia", + "region": "Europe", + "sub-region": "Eastern Europe" + }, + "si": { + "name": "Slovenia", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "sb": { + "name": "Solomon Islands", + "region": "Oceania", + "sub-region": "Melanesia" + }, + "so": { + "name": "Somalia", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "za": { + "name": "South Africa", + "region": "Africa", + "sub-region": "Southern Africa" + }, + "ss": { + "name": "South Sudan", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "es": { + "name": "Spain", + "region": "Europe", + "sub-region": "Southern Europe" + }, + "lk": { + "name": "Sri Lanka", + "region": "Asia", + "sub-region": "Southern Asia" + }, + "sd": { + "name": "Sudan", + "region": "Africa", + "sub-region": "Northern Africa" + }, + "sr": { + "name": "Suriname", + "region": "Americas", + "sub-region": "South America" + }, + "sj": { + "name": "Svalbard and Jan Mayen", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "sz": { + "name": "Swaziland", + "region": "Africa", + "sub-region": "Southern Africa" + }, + "se": { + "name": "Sweden", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "ch": { + "name": "Switzerland", + "region": "Europe", + "sub-region": "Western Europe" + }, + "sy": { + "name": "Syrian Arab Republic", + "region": "Asia", + "sub-region": "Western Asia" + }, + "tw": { + "name": "Taiwan, Province of China", + "region": "Asia", + "sub-region": "Eastern Asia" + }, + "tj": { + "name": "Tajikistan", + "region": "Asia", + "sub-region": "Central Asia" + }, + "tz": { + "name": "Tanzania, United Republic of", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "th": { + "name": "Thailand", + "region": "Asia", + "sub-region": "South-Eastern Asia" + }, + "tl": { + "name": "Timor-Leste", + "region": "Asia", + "sub-region": "South-Eastern Asia" + }, + "tg": { + "name": "Togo", + "region": "Africa", + "sub-region": "Western Africa" + }, + "to": { + "name": "Tonga", + "region": "Oceania", + "sub-region": "Polynesia" + }, + "tt": { + "name": "Trinidad and Tobago", + "region": "Americas", + "sub-region": "Caribbean" + }, + "tn": { + "name": "Tunisia", + "region": "Africa", + "sub-region": "Northern Africa" + }, + "tr": { + "name": "Turkey", + "region": "Asia", + "sub-region": "Western Asia" + }, + "tm": { + "name": "Turkmenistan", + "region": "Asia", + "sub-region": "Central Asia" + }, + "tc": { + "name": "Turks and Caicos Islands", + "region": "Americas", + "sub-region": "Caribbean" + }, + "tv": { + "name": "Tuvalu", + "region": "Oceania", + "sub-region": "Polynesia" + }, + "ug": { + "name": "Uganda", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "ua": { + "name": "Ukraine", + "region": "Europe", + "sub-region": "Eastern Europe" + }, + "ae": { + "name": "United Arab Emirates", + "region": "Asia", + "sub-region": "Western Asia" + }, + "gb": { + "name": "United Kingdom of Great Britain and Northern Ireland", + "region": "Europe", + "sub-region": "Northern Europe" + }, + "us": { + "name": "United States of America", + "region": "Americas", + "sub-region": "Northern America" + }, + "uy": { + "name": "Uruguay", + "region": "Americas", + "sub-region": "South America" + }, + "uz": { + "name": "Uzbekistan", + "region": "Asia", + "sub-region": "Central Asia" + }, + "vu": { + "name": "Vanuatu", + "region": "Oceania", + "sub-region": "Melanesia" + }, + "ve": { + "name": "Venezuela (Bolivarian Republic of)", + "region": "Americas", + "sub-region": "South America" + }, + "vn": { + "name": "Viet Nam", + "region": "Asia", + "sub-region": "South-Eastern Asia" + }, + "vg": { + "name": "Virgin Islands (British)", + "region": "Americas", + "sub-region": "Caribbean" + }, + "vi": { + "name": "Virgin Islands (U.S.)", + "region": "Americas", + "sub-region": "Caribbean" + }, + "eh": { + "name": "Western Sahara", + "region": "Africa", + "sub-region": "Northern Africa" + }, + "ye": { + "name": "Yemen", + "region": "Asia", + "sub-region": "Western Asia" + }, + "zm": { + "name": "Zambia", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "zw": { + "name": "Zimbabwe", + "region": "Africa", + "sub-region": "Eastern Africa" + }, + "xk": { + "name": "Kosovo", + "region": "Europe", + "sub-region": "Eastern Europe" + } +}; + +return countries[country_code][geo]; +'''; + +WITH geo_summary AS ( + SELECT + GET_GEO(country_code, 'sub-region') AS sub_region, + IF(device = 'desktop', 'desktop', 'mobile') AS client, + origin, + COUNT(DISTINCT origin) OVER (PARTITION BY GET_GEO(country_code, 'sub-region'), IF(device = 'desktop', 'desktop', 'mobile')) AS total + FROM + `chrome-ux-report.materialized.country_summary` + WHERE + yyyymm = 202507 +) + +SELECT + * +FROM ( + SELECT + client, + sub_region, + COUNT(0) AS pages, + ANY_VALUE(total) AS total, + COUNT(0) / ANY_VALUE(total) AS pct + FROM ( + SELECT DISTINCT + sub_region, + client, + total, + CONCAT(origin, '/') AS page + FROM + geo_summary + ) + JOIN ( + SELECT + client, + page + FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + date = '2025-07-01' AND + cats = 'CMS' AND + is_root_page + ) + USING (client, page) + GROUP BY + client, + sub_region +) +WHERE + pages > 1000 +ORDER BY + pages DESC diff --git a/sql/2025/cms/core_web_vitals.sql b/sql/2025/cms/core_web_vitals.sql new file mode 100644 index 00000000000..a307aa25a27 --- /dev/null +++ b/sql/2025/cms/core_web_vitals.sql @@ -0,0 +1,70 @@ +# cms passing core web vitals +# core_web_vitals.sql +CREATE TEMP FUNCTION IS_GOOD(good FLOAT64, needs_improvement FLOAT64, poor FLOAT64) RETURNS BOOL AS ( + good / (good + needs_improvement + poor) >= 0.75 +); + +CREATE TEMP FUNCTION IS_NON_ZERO(good FLOAT64, needs_improvement FLOAT64, poor FLOAT64) RETURNS BOOL AS ( + good + needs_improvement + poor > 0 +); + +SELECT + client, + cms, + COUNT(DISTINCT origin) AS origins, + # Origins with good LCP divided by origins with any LCP. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(fast_lcp, avg_lcp, slow_lcp), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp), origin, NULL)) + ) AS pct_good_lcp, + + # Origins with good FID divided by origins with any FID. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(fast_fid, avg_fid, slow_fid), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(fast_fid, avg_fid, slow_fid), origin, NULL)) + ) AS pct_good_fid, + + # Origins with good CLS divided by origins with any CLS. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL)) + ) AS pct_good_cls, + + # Origins with good LCP, FID (optional), and CLS divided by origins with any LCP and CLS. + SAFE_DIVIDE( + COUNT(DISTINCT IF( + IS_GOOD(fast_lcp, avg_lcp, slow_lcp) AND + IS_GOOD(fast_fid, avg_fid, slow_fid) IS NOT FALSE AND + IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL + )), + COUNT(DISTINCT IF( + IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp) AND + IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL + )) + ) AS pct_good_cwv +FROM + `chrome-ux-report.materialized.device_summary` +JOIN ( + SELECT + client, + page AS url, + technologies.technology AS cms + FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + cats = 'CMS' AND + date = '2025-07-01' AND + is_root_page +) +ON + CONCAT(origin, '/') = url AND + IF(device = 'desktop', 'desktop', 'mobile') = client +WHERE + date = '2025-07-01' +GROUP BY + client, + cms +ORDER BY + origins DESC diff --git a/sql/2025/cms/core_web_vitals_by_geo.sql b/sql/2025/cms/core_web_vitals_by_geo.sql new file mode 100644 index 00000000000..b52807e7ad2 --- /dev/null +++ b/sql/2025/cms/core_web_vitals_by_geo.sql @@ -0,0 +1,80 @@ +# cms passing core web vitals +# core_web_vitals_by_geo +# core_web_vitals_by_geo.sql +CREATE TEMP FUNCTION IS_GOOD(good FLOAT64, needs_improvement FLOAT64, poor FLOAT64) RETURNS BOOL AS ( + good / (good + needs_improvement + poor) >= 0.75 +); + +CREATE TEMP FUNCTION IS_NON_ZERO(good FLOAT64, needs_improvement FLOAT64, poor FLOAT64) RETURNS BOOL AS ( + good + needs_improvement + poor > 0 +); + +SELECT + client, + `chrome-ux-report`.experimental.GET_COUNTRY(country_code) AS geo, + cms, + COUNT(DISTINCT origin) AS origins, + # Origins with good LCP divided by origins with any LCP. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(fast_lcp, avg_lcp, slow_lcp), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp), origin, NULL)) + ) AS pct_good_lcp, + + # Origins with good INP divided by origins with any INP. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(fast_inp, avg_inp, slow_inp), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(fast_inp, avg_inp, slow_inp), origin, NULL)) + ) AS pct_good_inp, + + # Origins with good CLS divided by origins with any CLS. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL)) + ) AS pct_good_cls, + + # Origins with good LCP, INP (optional), and CLS divided by origins with any LCP and CLS. INP is optional! + SAFE_DIVIDE( + COUNT(DISTINCT IF( + IS_GOOD(fast_lcp, avg_lcp, slow_lcp) AND + IS_GOOD(fast_inp, avg_inp, slow_inp) IS NOT FALSE AND + IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL + )), + COUNT(DISTINCT IF( + IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp) AND + IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL + )) + ) AS pct_good_cwv +FROM ( + SELECT + *, + CONCAT(origin, '/') AS url, + IF(device = 'desktop', 'desktop', 'mobile') AS client + FROM + `chrome-ux-report.materialized.country_summary` + WHERE + yyyymm = 202507 AND + device IN ('desktop', 'phone') +) +JOIN ( + SELECT DISTINCT + client, + page AS url, + technologies.technology AS cms + FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + cats = 'CMS' AND + date = '2025-07-01' AND + is_root_page +) +USING (client, url) +GROUP BY + client, + geo, + cms +HAVING + origins > 1000 +ORDER BY + origins DESC diff --git a/sql/2025/cms/core_web_vitals_yoy.sql b/sql/2025/cms/core_web_vitals_yoy.sql new file mode 100644 index 00000000000..b556b2c3c94 --- /dev/null +++ b/sql/2025/cms/core_web_vitals_yoy.sql @@ -0,0 +1,194 @@ +# cms passing core web vitals +# core_web_vitals_yoy.sql +CREATE TEMP FUNCTION IS_GOOD(good FLOAT64, needs_improvement FLOAT64, poor FLOAT64) RETURNS BOOL AS ( + good / (good + needs_improvement + poor) >= 0.75 +); + +CREATE TEMP FUNCTION IS_NON_ZERO(good FLOAT64, needs_improvement FLOAT64, poor FLOAT64) RETURNS BOOL AS ( + good + needs_improvement + poor > 0 +); + +SELECT + 2025 AS year, + client, + cms, + COUNT(DISTINCT origin) AS origins, + # Origins with good LCP divided by origins with any LCP. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(fast_lcp, avg_lcp, slow_lcp), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp), origin, NULL)) + ) AS pct_good_lcp, + + # Origins with good INP divided by origins with any INP. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(fast_inp, avg_inp, slow_inp), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(fast_inp, avg_inp, slow_inp), origin, NULL)) + ) AS pct_good_inp, + # Origins with good CLS divided by origins with any CLS. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL)) + ) AS pct_good_cls, + + # Origins with good LCP, INP (optional), and CLS divided by origins with any LCP and CLS. + SAFE_DIVIDE( + COUNT(DISTINCT IF( + IS_GOOD(fast_lcp, avg_lcp, slow_lcp) AND + IS_GOOD(fast_inp, avg_inp, slow_inp) IS NOT FALSE AND + IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL + )), + COUNT(DISTINCT IF( + IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp) AND + IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL + )) + ) AS pct_good_cwv +FROM + `chrome-ux-report.materialized.device_summary` +JOIN ( + SELECT + client, + page AS url, + technologies.technology AS cms + FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + cats = 'CMS' AND + date = '2025-07-01' AND + is_root_page +) +ON + CONCAT(origin, '/') = url AND + IF(device = 'desktop', 'desktop', 'mobile') = client +WHERE + date = '2025-07-01' +GROUP BY + client, + cms + +UNION ALL + +SELECT + 2024 AS year, + client, + cms, + COUNT(DISTINCT origin) AS origins, + # Origins with good LCP divided by origins with any LCP. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(fast_lcp, avg_lcp, slow_lcp), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp), origin, NULL)) + ) AS pct_good_lcp, + + # Origins with good INP divided by origins with any INP. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(fast_inp, avg_inp, slow_inp), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(fast_inp, avg_inp, slow_inp), origin, NULL)) + ) AS pct_good_inp, + + # Origins with good CLS divided by origins with any CLS. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL)) + ) AS pct_good_cls, + + # Origins with good LCP, INP (optional), and CLS divided by origins with any LCP and CLS. + SAFE_DIVIDE( + COUNT(DISTINCT IF( + IS_GOOD(fast_lcp, avg_lcp, slow_lcp) AND + IS_GOOD(fast_inp, avg_inp, slow_inp) IS NOT FALSE AND + IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL + )), + COUNT(DISTINCT IF( + IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp) AND + IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL + )) + ) AS pct_good_cwv +FROM + `chrome-ux-report.materialized.device_summary` +JOIN ( + SELECT + client, + page AS url, + technologies.technology AS cms + FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + cats = 'CMS' AND + date = '2024-06-01' AND + is_root_page +) +ON + CONCAT(origin, '/') = url AND + IF(device = 'desktop', 'desktop', 'mobile') = client +WHERE + date = '2024-06-01' +GROUP BY + client, + cms + +UNION ALL + +SELECT + 2023 AS year, + client, + cms, + COUNT(DISTINCT origin) AS origins, + # Origins with good LCP divided by origins with any LCP. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(fast_lcp, avg_lcp, slow_lcp), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp), origin, NULL)) + ) AS pct_good_lcp, + + # Origins with good INP divided by origins with any INP. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(fast_inp, avg_inp, slow_inp), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(fast_inp, avg_inp, slow_inp), origin, NULL)) + ) AS pct_good_inp, + + # Origins with good CLS divided by origins with any CLS. + SAFE_DIVIDE( + COUNT(DISTINCT IF(IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL)), + COUNT(DISTINCT IF(IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL)) + ) AS pct_good_cls, + + # Origins with good LCP, INP (optional), and CLS divided by origins with any LCP and CLS. + SAFE_DIVIDE( + COUNT(DISTINCT IF( + IS_GOOD(fast_lcp, avg_lcp, slow_lcp) AND + IS_GOOD(fast_inp, avg_inp, slow_inp) IS NOT FALSE AND + IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL + )), + COUNT(DISTINCT IF( + IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp) AND + IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL + )) + ) AS pct_good_cwv +FROM + `chrome-ux-report.materialized.device_summary` +JOIN ( + SELECT + client, + page AS url, + technologies.technology AS cms + FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + cats = 'CMS' AND + date = '2023-06-01' AND + is_root_page +) +ON + CONCAT(origin, '/') = url AND + IF(device = 'desktop', 'desktop', 'mobile') = client +WHERE + date = '2023-06-01' +GROUP BY + client, + cms +ORDER BY + origins DESC diff --git a/sql/2025/cms/image_format_popularity.sql b/sql/2025/cms/image_format_popularity.sql new file mode 100644 index 00000000000..683f74e465c --- /dev/null +++ b/sql/2025/cms/image_format_popularity.sql @@ -0,0 +1,79 @@ +#standardSQL +# Image format popularity BY CMS +# image_format_popularity.sql + +SELECT + client, + cms, + ANY_VALUE(pages) AS pages, + format, + COUNT(0) AS freq, + SUM(COUNT(0)) OVER (PARTITION BY client, cms) AS total, + COUNT(0) / SUM(COUNT(0)) OVER (PARTITION BY client, cms) AS pct +FROM ( + SELECT DISTINCT + client, + page AS url, + technologies.technology AS cms + FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + cats = 'CMS' AND + date = '2025-07-01' AND + is_root_page +) +JOIN ( + SELECT + client, + page AS url, + CASE + WHEN STRING(summary.mimeType) = 'image/avif' THEN 'avif' + WHEN STRING(summary.mimeType) = 'image/webp' THEN 'webp' + WHEN STRING(summary.mimeType) = 'image/jpeg' THEN 'jpg' + WHEN STRING(summary.mimeType) = 'image/png' THEN 'png' + WHEN STRING(summary.mimeType) = 'image/gif' THEN 'gif' + WHEN STRING(summary.mimeType) = 'image/svg+xml' THEN 'svg' + WHEN STRING(summary.mimeType) = 'image/x-icon' THEN 'ico' + WHEN STRING(summary.mimeType) = 'image/vnd.microsoft.icon' THEN 'ico' + WHEN STRING(summary.mimeType) = 'image/jpg' THEN 'jpg' + WHEN STRING(summary.mimeType) = 'image/bmp' THEN 'bmp' + WHEN STRING(summary.mimeType) = 'binary/octet-stream' THEN 'binary/octet-stream' + ELSE 'other/unknown' -- TO handle ANY unexpected formats + END + AS format + FROM + `httparchive.crawl.requests` + WHERE + date = '2025-07-01' AND + type = 'image' AND + is_root_page +) +USING (client, url) +JOIN ( + SELECT + client, + technologies.technology AS cms, + COUNT(DISTINCT page) AS pages + FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + cats = 'CMS' AND + date = '2025-07-01' AND + is_root_page + GROUP BY + client, + cms +) +USING (client, cms) +WHERE + pages > 1000 +GROUP BY + client, + cms, + format +ORDER BY + freq DESC diff --git a/sql/2025/cms/lighthouse_category_scores_per_cms.sql b/sql/2025/cms/lighthouse_category_scores_per_cms.sql new file mode 100644 index 00000000000..aec263c9789 --- /dev/null +++ b/sql/2025/cms/lighthouse_category_scores_per_cms.sql @@ -0,0 +1,51 @@ +#standardSQL +# Lighthouse category scores per CMS +# lighthouse_category_scores_per_cms.sql +SELECT + client, + cms, + COUNT(DISTINCT url) AS freq, + APPROX_QUANTILES(CAST(JSON_VALUE(categories.performance.score) AS NUMERIC), 1000)[ + OFFSET(500) + ] * 100 AS median_performance, + APPROX_QUANTILES(CAST(JSON_VALUE(categories.accessibility.score) AS NUMERIC), 1000)[ + OFFSET(500) + ] * 100 AS median_accessibility, + APPROX_QUANTILES(CAST(JSON_VALUE(categories.seo.score) AS NUMERIC), 1000)[ + OFFSET(500) + ] * 100 AS median_seo, + APPROX_QUANTILES(CAST(JSON_VALUE(categories.`best-practices`.score) AS NUMERIC), 1000)[ + OFFSET(500) + ] * 100 AS median_best_practices +FROM ( + SELECT + client, + page AS url, + lighthouse.categories AS categories + FROM + `httparchive.crawl.pages` + WHERE + date = '2025-07-01' AND + is_root_page +) +JOIN ( + SELECT DISTINCT + client, + technologies.technology AS cms, + page AS url + FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + cats = 'CMS' AND + date = '2025-07-01' AND + is_root_page +) +USING (url, client) +GROUP BY + client, + cms +ORDER BY + freq DESC, + client diff --git a/sql/2025/cms/lighthouse_category_scores_per_cms_yoy.sql b/sql/2025/cms/lighthouse_category_scores_per_cms_yoy.sql new file mode 100644 index 00000000000..f2578ea3426 --- /dev/null +++ b/sql/2025/cms/lighthouse_category_scores_per_cms_yoy.sql @@ -0,0 +1,59 @@ +#standardSQL +# Lighthouse category scores per CMS YoY +# lighthouse_category_scores_per_cms_yoy.sql +SELECT + CASE + WHEN date = '2025-07-01' THEN '2025' + ELSE '2024' + END AS year, + client, + cms, + COUNT(DISTINCT url) AS freq, + APPROX_QUANTILES(CAST(JSON_VALUE(categories.performance.score) AS NUMERIC), 1000)[ + OFFSET(500) + ] * 100 AS median_performance, + APPROX_QUANTILES(CAST(JSON_VALUE(categories.accessibility.score) AS NUMERIC), 1000)[ + OFFSET(500) + ] * 100 AS median_accessibility, + APPROX_QUANTILES(CAST(JSON_VALUE(categories.seo.score) AS NUMERIC), 1000)[ + OFFSET(500) + ] * 100 AS median_seo, + APPROX_QUANTILES(CAST(JSON_VALUE(categories.`best-practices`.score) AS NUMERIC), 1000)[ + OFFSET(500) + ] * 100 AS median_best_practices +FROM ( + SELECT + client, + date, + page AS url, + lighthouse.categories AS categories + FROM + `httparchive.crawl.pages` + WHERE + (date = '2025-07-01' OR date = '2024-06-01') AND + is_root_page +) +JOIN ( + SELECT DISTINCT + client, + date, + technologies.technology AS cms, + page AS url + FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + cats = 'CMS' AND + (date = '2025-07-01' OR date = '2024-06-01') AND + is_root_page +) +USING (date, url, client) +GROUP BY + date, + client, + cms +ORDER BY + date, + client, + freq DESC diff --git a/sql/2025/cms/page_weight_distribution.sql b/sql/2025/cms/page_weight_distribution.sql new file mode 100644 index 00000000000..c25b4f1be94 --- /dev/null +++ b/sql/2025/cms/page_weight_distribution.sql @@ -0,0 +1,45 @@ +#standardSQL +# Total page weight distribution BY CMS +# page_weight_distribution.sql +SELECT + percentile, + client, + cms, + COUNT(0) AS pages, + APPROX_QUANTILES(total_kb, 1000)[OFFSET(percentile * 10)] AS total_kb +FROM ( + SELECT DISTINCT + client, + page AS url, + technologies.technology AS cms + FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + cats = 'CMS' AND + date = '2025-07-01' AND + is_root_page +) +JOIN ( + SELECT + client, + page AS url, + CAST(INT64(summary.bytesTotal) AS INT64) / 1024 AS total_kb + FROM + `httparchive.crawl.pages` + WHERE + date = '2025-07-01' AND + is_root_page +) +USING (client, url), + UNNEST([10, 25, 50, 75, 90, 100]) AS percentile +GROUP BY + percentile, + client, + cms +HAVING + pages > 1000 +ORDER BY + percentile, + pages DESC diff --git a/sql/2025/cms/resource_weights.sql b/sql/2025/cms/resource_weights.sql new file mode 100644 index 00000000000..91a8783f6eb --- /dev/null +++ b/sql/2025/cms/resource_weights.sql @@ -0,0 +1,50 @@ +#standardSQL +# Median resource weights by CMS +#resource_weights.sql + +SELECT + client, + cms, + COUNT(0) AS pages, + APPROX_QUANTILES(total_kb, 1000)[OFFSET(500)] AS median_total_kb, + APPROX_QUANTILES(html_kb, 1000)[OFFSET(500)] AS median_html_kb, + APPROX_QUANTILES(js_kb, 1000)[OFFSET(500)] AS median_js_kb, + APPROX_QUANTILES(css_kb, 1000)[OFFSET(500)] AS median_css_kb, + APPROX_QUANTILES(img_kb, 1000)[OFFSET(500)] AS median_img_kb, + APPROX_QUANTILES(font_kb, 1000)[OFFSET(500)] AS median_font_kb +FROM ( + SELECT DISTINCT + client, + page AS url, + technologies.technology AS cms + FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + cats = 'CMS' AND + date = '2025-07-01' AND + is_root_page +) +JOIN ( + SELECT + client, + page AS url, + CAST(INT64(summary.bytesTotal) AS INT64) / 1024 AS total_kb, + CAST(INT64(summary.bytesHtml) AS INT64) / 1024 AS html_kb, + CAST(INT64(summary.bytesJS) AS INT64) / 1024 AS js_kb, + CAST(INT64(summary.bytesCss) AS INT64) / 1024 AS css_kb, + CAST(INT64(summary.bytesImg) AS INT64) / 1024 AS img_kb, + CAST(INT64(summary.bytesFont) AS INT64) / 1024 AS font_kb + FROM + `httparchive.crawl.pages` + WHERE + date = '2025-07-01' AND + is_root_page +) +USING (client, url) +GROUP BY + client, + cms +ORDER BY + pages DESC diff --git a/sql/2025/cms/top_cms.sql b/sql/2025/cms/top_cms.sql new file mode 100644 index 00000000000..4d01da5c375 --- /dev/null +++ b/sql/2025/cms/top_cms.sql @@ -0,0 +1,170 @@ +#standardSQL +# Top CMS platforms, compared to 2020 +# top_cms.sql +SELECT + client, + 2025 AS year, + technologies.technology AS cms, + COUNT(DISTINCT page) AS freq, + total, + COUNT(DISTINCT page) / total AS pct +FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats +JOIN ( + SELECT + client, + COUNT(0) AS total + FROM + `httparchive.crawl.pages` + WHERE + date = '2025-07-01' AND + is_root_page + GROUP BY + client +) +USING (client) +WHERE + cats = 'CMS' AND + date = '2025-07-01' AND + is_root_page +GROUP BY + client, + total, + cms +UNION ALL +SELECT + client, + 2024 AS year, + technologies.technology AS cms, + COUNT(DISTINCT page) AS freq, + total, + COUNT(DISTINCT page) / total AS pct +FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats +JOIN ( + SELECT + client, + COUNT(0) AS total + FROM + `httparchive.crawl.pages` + WHERE + date = '2024-06-01' AND + is_root_page + GROUP BY + client +) +USING (client) +WHERE + cats = 'CMS' AND + date = '2024-06-01' AND + is_root_page +GROUP BY + client, + total, + cms +UNION ALL +SELECT + client, + 2023 AS year, + technologies.technology AS cms, + COUNT(DISTINCT page) AS freq, + total, + COUNT(DISTINCT page) / total AS pct +FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats +JOIN ( + SELECT + client, + COUNT(0) AS total + FROM + `httparchive.crawl.pages` + WHERE + date = '2023-06-01' AND + is_root_page + GROUP BY + client +) +USING (client) +WHERE + cats = 'CMS' AND + date = '2023-06-01' AND + is_root_page +GROUP BY + client, + total, + cms +UNION ALL +SELECT + client, + 2022 AS year, + technologies.technology AS cms, + COUNT(DISTINCT page) AS freq, + total, + COUNT(DISTINCT page) / total AS pct +FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats +JOIN ( + SELECT + client, + COUNT(0) AS total + FROM + `httparchive.crawl.pages` + WHERE + date = '2022-06-01' AND + is_root_page + GROUP BY + client +) +USING (client) +WHERE + cats = 'CMS' AND + date = '2022-06-01' AND + is_root_page +GROUP BY + client, + total, + cms +UNION ALL +SELECT + client, + 2021 AS year, + technologies.technology AS cms, + COUNT(DISTINCT page) AS freq, + total, + COUNT(DISTINCT page) / total AS pct +FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats +JOIN ( + SELECT + client, + COUNT(0) AS total + FROM + `httparchive.crawl.pages` + WHERE + date = '2021-07-01' AND + is_root_page + GROUP BY + client +) +USING (client) +WHERE + cats = 'CMS' AND + date = '2021-07-01' AND + is_root_page +GROUP BY + client, + total, + cms +ORDER BY + year DESC, + pct DESC diff --git a/sql/2025/cms/top_cms_by_geo.sql b/sql/2025/cms/top_cms_by_geo.sql new file mode 100644 index 00000000000..8df15b31dc3 --- /dev/null +++ b/sql/2025/cms/top_cms_by_geo.sql @@ -0,0 +1,69 @@ +#standardSQL +# CMS popularity per geo +# top_cms_by_geo.sql +WITH geo_summary AS ( + SELECT + `chrome-ux-report`.experimental.GET_COUNTRY(country_code) AS geo, + IF(device = 'desktop', 'desktop', 'mobile') AS client, + origin, + COUNT(DISTINCT origin) OVER (PARTITION BY country_code, IF(device = 'desktop', 'desktop', 'mobile')) AS total + FROM + `chrome-ux-report.materialized.country_summary` + WHERE + yyyymm = 202507 + UNION ALL + SELECT + 'ALL' AS geo, + IF(device = 'desktop', 'desktop', 'mobile') AS client, + origin, + COUNT(DISTINCT origin) OVER (PARTITION BY IF(device = 'desktop', 'desktop', 'mobile')) AS total + FROM + `chrome-ux-report.materialized.device_summary` + WHERE + yyyymm = 202507 +) + +SELECT + * +FROM ( + SELECT + client, + geo, + cms, + COUNT(0) AS pages, + ANY_VALUE(total) AS total, + COUNT(DISTINCT url) / ANY_VALUE(total) AS pct + FROM ( + SELECT DISTINCT + geo, + client, + CONCAT(origin, '/') AS url, + total + FROM + geo_summary + ) JOIN ( + SELECT DISTINCT + client, + cats, + technologies.technology AS cms, + page AS url + FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + technologies.technology IS NOT NULL AND + cats = 'CMS' AND + technologies.technology != '' AND + date = '2025-07-01' AND + is_root_page + ) USING (client, url) + GROUP BY + client, + geo, + cms +) +WHERE + pages > 1000 +ORDER BY + pages DESC diff --git a/sql/2025/cms/top_cms_by_rank.sql b/sql/2025/cms/top_cms_by_rank.sql new file mode 100644 index 00000000000..f1c878b3cbe --- /dev/null +++ b/sql/2025/cms/top_cms_by_rank.sql @@ -0,0 +1,63 @@ +#standardSQL +# CMS adoption per rank +# top_cms_by_rank.sql + +SELECT + client, + cms, + rank, + COUNT(DISTINCT url) AS pages, + ANY_VALUE(total) AS total, + COUNT(DISTINCT url) / ANY_VALUE(total) AS pct +FROM ( + SELECT DISTINCT + client, + page AS url, + technologies.technology AS cms + FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + cats = 'CMS' AND + date = '2025-07-01' AND + is_root_page +) +JOIN ( + SELECT + client, + page AS url, + rank_magnitude AS rank + FROM + `httparchive.crawl.pages`, + UNNEST([1e3, 1e4, 1e5, 1e6, 1e7, 1e8]) AS rank_magnitude + WHERE + rank <= rank_magnitude AND + date = '2025-07-01' AND + is_root_page +) +USING (client, url) +JOIN ( + SELECT + client, + rank_magnitude AS rank, + COUNT(0) AS total + FROM + `httparchive.crawl.pages`, + UNNEST([1e3, 1e4, 1e5, 1e6, 1e7, 1e8]) AS rank_magnitude + WHERE + rank <= rank_magnitude AND + date = '2025-07-01' AND + is_root_page + GROUP BY + client, + rank_magnitude +) +USING (client, rank) +GROUP BY + client, + cms, + rank +ORDER BY + rank, + pages DESC diff --git a/sql/2025/cms/wordpress_page_builders.sql b/sql/2025/cms/wordpress_page_builders.sql new file mode 100644 index 00000000000..3babe38be59 --- /dev/null +++ b/sql/2025/cms/wordpress_page_builders.sql @@ -0,0 +1,44 @@ +#standardSQL +# Top WordPress page builder combinations +# wordpress_page_builders.sql + +SELECT + client, + page_builders, + COUNT(0) AS pages, + SUM(COUNT(0)) OVER (PARTITION BY client) AS total, + COUNT(0) / SUM(COUNT(0)) OVER (PARTITION BY client) AS pct +FROM ( + SELECT DISTINCT + client, + page AS url + FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + technologies.technology = 'WordPress' AND + date = '2025-07-01' +) +JOIN ( + SELECT + client, + page AS url, + ARRAY_TO_STRING(ARRAY_AGG(technologies.technology ORDER BY technologies.technology), ', ') AS page_builders + FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies, + UNNEST(technologies.categories) AS cats + WHERE + cats = 'Page builders' AND + date = '2025-07-01' + GROUP BY + client, + url +) +USING (client, url) +GROUP BY + client, + page_builders +ORDER BY + pct DESC diff --git a/sql/2025/cms/wordpress_resources.sql b/sql/2025/cms/wordpress_resources.sql new file mode 100644 index 00000000000..a314eb48955 --- /dev/null +++ b/sql/2025/cms/wordpress_resources.sql @@ -0,0 +1,59 @@ +#standardSQL +# Distribution OF WordPress resource types BY path +# wordpress_resources.sql +# Updated to use the new crawl dataset + +SELECT + percentile, + client, + path, + APPROX_QUANTILES(freq, 1000)[OFFSET(percentile * 10)] AS freq +FROM ( + SELECT + client, + page, + REGEXP_EXTRACT(url, r'/(themes|plugins|wp-includes)/') AS path, + COUNT(0) AS freq + FROM ( + -- Get WordPress pages + SELECT + client, + page + FROM + `httparchive.crawl.pages`, + UNNEST(technologies) AS technologies + WHERE + technologies.technology = 'WordPress' AND + date = '2025-07-01' AND + is_root_page + ) wp_pages + JOIN ( + -- Get all requests for WordPress pages + SELECT + client, + page, + url, + REGEXP_EXTRACT(url, r'/(themes|plugins|wp-includes)/') AS path + FROM + `httparchive.crawl.requests` + WHERE + date = '2025-07-01' AND + is_root_page + ) requests + USING (client, page) + WHERE + path IS NOT NULL + GROUP BY + client, + page, + path +), + UNNEST([10, 25, 50, 75, 90, 100]) AS percentile +GROUP BY + percentile, + client, + path +ORDER BY + percentile, + client, + path