• Stars
    star
    205
  • Rank 191,264 (Top 4 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 5 years ago
  • Updated almost 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

☁️ The Cloudflare Workers implementation of an async Google Analytics

cloudflare-workers-async-google-analytics

Author Sukka License MIT NPM Version Build with Cloudflare Workers Gzip size of cfga.min.js

The Cloudflare Workers implementation of an async Google Analytics

Introduction

This project is based on Google Analytics Measurement Protocol, using Cloudflare Workers with a less than 1KB gzipped tiny cfga.min.js to accelerate the Google Analytics, rather than a heavy (45KB gzipped) analytics.js from Google.

Get Start

1. Import into Cloudflare Workers

Login into Cloudflare Dashboard and enter Workers App. Create a new script, delete default code in the editor, and then copy the woker.js content into the editor. After saving the workers script, do not forget to register a route for the scripts.

Now you can test your workers with a simple HTTP request. You should able to see 403 Forbidden. Then you can deploy the scripts.

2. Insert the cfga.min.js into your website

Just add those few lines of the code to your website, right before </body>. Do not forget to replace the default configuration with your own!

<script>
window.ga_tid = "UA-XXXXX-Y"; // {String} The trackerID of your site.
window.ga_api = "https://example.com/xxx/"; // {String} The route of your cloudflare workers you just registered before.
</script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]" async></script>

3. Watch this repo with Releases Only.

Click the watch button at the top of the repo and choose Releases Only, so you can get notice of release update in time.

Notice

For SPA site

cfga.js will send the data once the window's load event is fired.

But you can still manually send the data again by calling window.cfga(), just like the original analytics.js with ga('send', 'pageview').

Say hello to EasyList

Recently cloudflare-workers-async-google-analytics has been blocked by EasyList. Great Job though. So I am going to play a cat & mouse game now.

From 1.0.3 the random string will be added as a parameter to bypass EasyList. Also, this could help, too:

  • Add the route cfga/jquery.js for your Cloudflare Workers.
  • Use setup as below:
window.ga_api = "https://example.com/cfga/jquery.js"; // {String} The route of your cloudflare workers you just registered before.

Block jquery.js if you can, haha!

Advanced

Data type the cfga.min.js collected and sent

Currently, cloudflare-workers-async-google-analytics and cfga.min.js only support collect those types of data listed below. If you want to collect more, you should use Google Analytics official track code.

  • dl: Document location URL
  • uip: User real IP
  • ua: User Agent
  • dt: Document Title
  • de: Document Encoding
  • dr: Document Referrer
  • ul: User Language
  • sd: Screen Colors Depth
  • sr: Screen Resolution
  • plt: Page Load Time
  • dns: DNS Time
  • pdt: Page Downloaad Time
  • rrt: Redirect Response Time
  • tcp: TCP Connect Time
  • srt: Server Response Time
  • dit: DOM Interactive Time
  • clt: Content Load Time

Security

cloudflare-workers-async-google-analytics blocks those types of request by default:

  • No User-Agent in request headers
  • No Referer in request headers
  • No Tracker ID given in request headers
  • Use some other measurements from Cloudflare WAF

And if you want to restrict your workers only for your website, all you need to do is to edit a few lines of your workers:

  • Launch Cloudflare Workers Editor again.
  • You can see some commented out code at the first line like this:
//const AllowedReferrer = 'skk.moe';
  • replace your domain with skk.moe, then remove //.

Notice: set AllowedReferrer value to skk.moe means all the subdomains of skk.moe will be allowed as well.

Author

cloudflare-workers-async-google-analytics © Sukka, Released under the MIT License.
Authored and maintained by Sukka with help from contributors (list).

Personal Website · Blog · GitHub @SukkaW · Telegram Channel @SukkaChannel · Twitter @isukkaw · Keybase @sukka

More Repositories

1

Koolshare-Clash

🐱 Run Clash Tunnel on Koolshare OpenWrt
ASP
1,279
star
2

nolyfill

Speed up your package installation process, reduce your disk usage, and extend the lifespan of your precious SSD.
TypeScript
1,097
star
3

DisqusJS

💬 Render Disqus comments in Mainland China using Disqus API
TypeScript
591
star
4

Surge

由 Sukka 搜集、整理、维护的、个人自用的、仅适用于 Surge 的 Rule Snippet
JavaScript
583
star
5

hexo-theme-suka

🎨Modern, powerful and simple theme for Hexo.
CSS
580
star
6

nali-cli

⚓ Parse geoinfo of IP Address without leaving your terminal
JavaScript
393
star
7

zsh-proxy

🔩 An oh-my-zsh plugin to configure proxy
Shell
369
star
8

foxact

React Hooks/Utils done right. For Browser, SSR, and React Server Components.
TypeScript
302
star
9

OpenCore-Document-zh_Hans

[非官方/Unofficial] OpenCore Bootloader 参考手册简体中文翻译
JavaScript
238
star
10

ClashEditor

📐 An editor for writing Clash config
HTML
192
star
11

cloudflare-block-bad-bot-ruleset

🚦 Block malicious crawlers with Cloudflare Firewall Rules
175
star
12

hexo-theme-doku

📜 Doku, a Hexo theme designed for writing documents.
HTML
145
star
13

rollup-plugin-swc

Use SWC with Rollup to transform / minify ESNext and TypeScript code.
TypeScript
139
star
14

zsh-osx-autoproxy

An oh-my-zsh plugin that configures proxy environment variables based on macOS's system preferences automatically
Shell
87
star
15

dotfiles

🔧 My development environment and config
Shell
82
star
16

Lenovo-Y9000X-Hackintosh

Lenovo LEGION Y9000X 2020 (Lenovo LEGION S740-15IRH) Hackintosh
ASL
71
star
17

ThinkPad-E480-Hackintosh

macOS Catalina & Big Sur on ThinkPad E480 (Hackintosh)
ASL
62
star
18

dashflare

An unofficial Cloudflare dashboard built on top of Cloudflare API.
TypeScript
55
star
19

bring-github-old-feed-back

Throw away the GitHub's useless "For You" feed and replace with the old good "Following" feed
TypeScript
53
star
20

forgetti-loader

A webpack/rspack loader and a Next.js plugin that brings an auto-memoization compiler to solves your hook spaghetti. Powered by forgetti which is inspired by React Forget.
TypeScript
52
star
21

CheckSSL

🔒Check your site's SSL status using curl & bash
Shell
41
star
22

vercel-dns-console

An unofficial implementation of Vercel DNS Dashboard
TypeScript
37
star
23

Friends

♥️ Friends of @SukkaW
JavaScript
33
star
24

react-compiler-webpack

The webpack/rspack loader for React Compiler
TypeScript
22
star
25

style9-webpack

The another Webpack Plugin for Atomic CSS-in-JS implementation style9
TypeScript
19
star
26

eslint-config-sukka

ESLint configuration of Sukka
TypeScript
17
star
27

stylex-webpack

The another webpack/Next.js Plugin for Facebook StyleX
TypeScript
17
star
28

markdown.css

📝 The simple CSS to replicate the GitHub Markdown style (Sukka Ver.)
CSS
14
star
29

disqusjs-proxy-example

Using Now as Disqus API Proxy
13
star
30

theme-doku-docs

📜 The documents & demo of hexo-theme-doku
13
star
31

CheckLatency

🌏 (WIP) A tool that check your latency to cloud provider every regions
JavaScript
13
star
32

memdisk

A library and a CLI to create RAM disk on macOS and Linux.
TypeScript
13
star
33

recipage

📃 Reci(pe)page: Turn a markdown file into one simple page
JavaScript
12
star
34

pure-svg-countdown

HTML
12
star
35

xbits

Convert bytes to a human readable string
TypeScript
12
star
36

SukkaW

My GitHub Profile
11
star
37

Cloudflare-WAF-to-AbuseIPDB

JavaScript
10
star
38

hexo-lute

A markdown renderer for Hexo based on Lute
JavaScript
8
star
39

consolas-powerline

Consolas Nerd Font (Consolas 7.0)
Python
8
star
40

busuanzi

The mirror of busuanzi js
8
star
41

hv-monsterdb-userscript

M-M-M-MONSTER DATABASE!
TypeScript
7
star
42

fast-cidr-tools

cidr-tools but up to 20x faster
TypeScript
7
star
43

eslint-config-sukka-archive

JavaScript
7
star
44

openconnect-snell

Allow Surge to connect to OpenConnect using Docker + Snell Server V4
Shell
6
star
45

suka.css

✨The most useless css framework.
CSS
6
star
46

telegram-reply-image-to-messsage-bot

TypeScript
6
star
47

kv4cf

A Modified version of cloudflare/kv-asset-handler, with Non-ASCII URL supported.
JavaScript
6
star
48

hentaiverse-monster-database

M-M-M-MONSTER DATABASE SERVER!
TypeScript
5
star
49

hentaiverse-util-api-userscript

A userscript provided API for other HentaiVerse userscripts
TypeScript
5
star
50

monsterbation-linter

TypeScript
5
star
51

bundled-open-cli

Open stuff like URLs, files, executables, with installation size reduced by 78%. Cross-platform.
TypeScript
5
star
52

bili-mcdn

HTML
4
star
53

Koolshare-OpenWrt-API-Documents

The API documents (unofficial) for Koolshare OpenWrt httpdb
4
star
54

tor-exit-page

An alternative "This is a Tor Exit Router" page
HTML
4
star
55

rcpy

Lightweight, fast, simple and flexible file copy utility for Node.js
TypeScript
4
star
56

teacup.js

🍵 Cache javascript & css files in localStorage
JavaScript
3
star
57

zsh-gitcd

🔩 An oh-my-zsh plugin for git clone && cd
Shell
3
star
58

nodelistparser

Surge / Mihomo (Clash.Meta) nodelist / proxy provider parser and generator
TypeScript
2
star
59

sponsors

TypeScript
2
star
60

Hackintosh-Kext-Builder

Shell
1
star
61

BadgeKit

🚩 Get every badge you need for your README
JavaScript
1
star
62

hexo-renderer-pejs

EJS(based on PEJS) renderer for Hexo
JavaScript
1
star
63

untyped-javascript-serialization-benchmark

TypeScript
1
star
64

cidr-tools-wasm

TypeScript
1
star