注册 GA

首先 注册 GA(UA 以及 GA4 版本)https://analytics.google.com 。

创建账号 - 输入账号名称&勾选所有 - 显示高级选项,选择 同时创建 Google Analytics(分析)4 和 Universal Analytics 媒体资源,勾选 为 Google Analytics 4 媒体资源启用增强型衡量功能 - 选择公司规模,打算如何使用 Google Analytics(分析)勾选除其他之外的所有选项 - 创建

加速 GA

使用 Cloudflare Worker 加速访问速度 https://dash.cloudflare.com 。

新建 Worker 代码如下,保存后部署(可先提交部署后可修改):

addEventListener('fetch', (event) => {
  // 这里可以加 filter
  return event.respondWith(handleRequest(event));
});
// worker 应用的路由地址,末尾不加 '/',改为你 worker 地址
const DOMAIN = 'stat.blog.196000.xyz';
// 博客插入的js地址文件名,可自定义
const JS_FILE = 'ga.js'
// 响应上报的接口路径,可自定义,规避广告屏蔽插件拦截
const COLLECT_PATH = 'stat';
// 原 gtag 地址,将 G-XXX 改为你的 id
const JS_URL = 'https://www.googletagmanager.com/gtag/js?id=G-6JWRGNBF00'
// 下面不需要改
const G_DOMAIN = 'google-analytics.com';
const G_COLLECT_PATH = 'g\/collect';
async function handleRequest(event) {
  const url = event.request.url;
  if (url.match(`${DOMAIN}/${JS_FILE}`)) {
    const requestJs = await (await fetch(JS_URL)).text();
    const jsText = requestJs.replaceAll('\"www\"', '\"\"').replaceAll('.' + G_DOMAIN, DOMAIN).replaceAll(G_COLLECT_PATH, COLLECT_PATH);
    return new Response(jsText, {
      status: 200,
      statusText: 'OK',
      headers: {
        'Content-Type': 'application/javascript',
      },
    });
  } else if (url.match(`${DOMAIN}/${COLLECT_PATH}`)) {
      const newReq = await readRequest(event.request);
      event.waitUntil(fetch(newReq));
  }
  return new Response(null, {
    status: 204,
    statusText: 'No Content',
  });
}
async function readRequest(request) {
  const { url, headers } = request;
  const body = await request.text();
  const ga_url = url.replace(`${DOMAIN}/${COLLECT_PATH}`, `www.${G_DOMAIN}/${G_COLLECT_PATH}`);
  const nq = {
    method: 'POST',
    headers: {
      Host: 'www.google-analytics.com',
      Origin: headers.get('origin'),
      'Cache-Control': 'max-age=0',
      'User-Agent': headers.get('user-agent'),
      Accept: headers.get('accept'),
      'Accept-Language': headers.get('accept-language'),
      'Content-Type': headers.get('content-type') || 'text/plain',
      Referer: headers.get('referer'),
    },
    body: body,
  };
  return new Request(ga_url, nq);
}

验证

对比直接访问 https://www.googletagmanager.com/gtag/js?id=G-6JWRGNBF00 和加速后地址 https://stat.blog.196000.xyz/ga.js,在响应的 JS 里搜索 COLLECT_PATH 值,看是否成功替换。

页面添加统计代码

<!-- Google tag (gtag.js) -->
<!-- <script async src="https://www.googletagmanager.com/gtag/js?id=G-6JWRGNBF00"></script> -->
<!-- 对应 worker 里的 DOMAIN 和 JS_FILE,需要保持一致 -->
<script async src="https://stat.blog.196000.xyz/ga.js"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'G-6JWRGNBF00'); // 将 G-XXX 改为你的 id
</script>