You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Adobe/Google Analytics追踪代码同步点击流数据至AWS Kinesis?

复用Adobe/GA追踪代码复制Hit-Level数据到AWS Kinesis的解决方案

针对你的需求,完全可以通过修改现有JS追踪标签,在数据发送到Adobe Analytics/Google Analytics的同时,复制原始hit-level数据转发到AWS Kinesis,无需重新开发整套追踪代码。以下分平台详细说明:

Adobe Analytics 实现方式

1. 拦截原生追踪方法(推荐)

通过重写Adobe Analytics核心追踪方法(s.t() 或 s.tl()),在调用原生方法发送数据到Adobe之前,提取并转发hit数据到Kinesis:

// 保存原始的s.t方法
const originalTrack = s.t;
// 重写s.t方法
s.t = function() {
  // 复制当前hit的所有原始数据(包含所有自定义变量、页面信息等)
  const rawHitData = { ...s };
  // 通过API Gateway转发到Kinesis(前端无法直接调用Kinesis,需API Gateway做代理处理签名和CORS)
  fetch('https://your-api-gateway-endpoint/kinesis-adobe', {
    method: 'POST',
    body: JSON.stringify(rawHitData),
    keepalive: true, // 确保页面卸载时请求仍能发送
    headers: { 'Content-Type': 'application/json' }
  }).catch(err => console.error('Kinesis转发失败:', err));
  
  // 执行原始方法,确保数据正常发送到Adobe Analytics
  return originalTrack.apply(this, arguments);
};

// 对s.tl()方法做同样处理(用于链接追踪等非页面视图hit)
const originalTrackLink = s.tl;
s.tl = function(element, linkType, linkName, overrideVars) {
  // 提取hit数据,包含传入的覆盖变量
  const rawHitData = { ...s, ...overrideVars };
  // 转发到Kinesis
  fetch('https://your-api-gateway-endpoint/kinesis-adobe', {
    method: 'POST',
    body: JSON.stringify(rawHitData),
    keepalive: true,
    headers: { 'Content-Type': 'application/json' }
  }).catch(err => console.error('Kinesis转发失败:', err));
  
  return originalTrackLink.apply(this, arguments);
};

2. 拦截自动生成的Collect请求

如果需要直接获取发送到Adobe的原始请求内容(而非s对象数据),可以拦截浏览器发送到Adobe Collect URL的请求:

const originalFetch = window.fetch;
window.fetch = function(resource, options) {
  // 检测是否为Adobe的collect请求
  if (typeof resource === 'string' && resource.includes('adobe.net/collect')) {
    let requestPayload;
    // 提取请求数据(GET取查询参数,POST取请求体)
    if (options?.method === 'POST') {
      requestPayload = options.body;
    } else {
      requestPayload = new URL(resource).searchParams.toString();
    }
    // 转发到Kinesis
    fetch('https://your-api-gateway-endpoint/kinesis-adobe', {
      method: 'POST',
      body: requestPayload,
      keepalive: true,
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
    }).catch(err => console.error('Kinesis转发失败:', err));
  }
  // 执行原始请求
  return originalFetch.apply(this, arguments);
};

Google Analytics 实现方式

1. GA4:使用自定义任务(Custom Task)

GA4的gtag.js支持自定义任务,可在hit发送到Google前拦截并复制数据:

gtag('config', 'G-YOUR_TRACKING_ID', {
  custom_task: function(taskModel) {
    // 获取原始hit的Payload(包含所有事件参数、用户属性等)
    const rawHitPayload = taskModel.get('hitPayload');
    // 转发到Kinesis(通过API Gateway)
    fetch('https://your-api-gateway-endpoint/kinesis-ga4', {
      method: 'POST',
      body: rawHitPayload,
      keepalive: true,
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
    }).catch(err => console.error('Kinesis转发失败:', err));
  }
});

2. Universal Analytics(UA):重写send方法

对于仍在使用UA的场景,可重写ga()的send方法:

ga(function(tracker) {
  const originalSend = tracker.send;
  tracker.send = function(hitType, hitParams) {
    // 复制原始hit数据
    const rawHitData = { hitType, ...hitParams, ...tracker.get() };
    // 转发到Kinesis
    fetch('https://your-api-gateway-endpoint/kinesis-ua', {
      method: 'POST',
      body: JSON.stringify(rawHitData),
      keepalive: true,
      headers: { 'Content-Type': 'application/json' }
    }).catch(err => console.error('Kinesis转发失败:', err));
    
    // 执行原始send方法
    return originalSend.apply(this, arguments);
  };
});

关键注意事项

  • 跨域与签名处理:AWS Kinesis不支持前端直接跨域请求,且需要IAM签名,因此必须通过API Gateway做中转(在API Gateway中配置Lambda集成,由Lambda完成Kinesis的签名和数据写入)。
  • 数据完整性:上述方法均能获取原始未处理的hit-level数据,包含所有自定义变量、用户标识、请求上下文等,满足机器学习需求。
  • 性能影响:使用keepalive参数或navigator.sendBeacon()发送Kinesis请求,避免阻塞页面渲染或影响原追踪代码的性能。
  • 自动生成URL的定制:Adobe/GA的自动生成Collect URL无法直接修改,但通过上述拦截方法,无需修改原URL即可复制请求数据并转发到自定义路由,完全满足你的需求。

内容的提问来源于stack exchange,提问作者Adam Prior

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 18:35:28