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

多子域名场景下如何用Google Analytics追踪ASP.Net MVC Web应用

多子域名场景下ASP.NET MVC 5集成Google Analytics的方案

刚好之前做过类似的多租户(子域名模式)ASP.NET MVC项目的GA集成,结合你的场景(单套代码、子域名对应独立客户内容),给你几个落地性强的方案:

核心思路

因为每个子域名对应唯一客户,我们需要动态向GA传递客户标识,同时确保跨子域名的会话一致性(如果有跨域跳转需求)。下面分UA(旧版)和GA4(新版,更推荐)两种情况来说:


方案一:基于自定义维度的统一追踪(UA/GA4通用)

这种方案适合用同一个GA属性追踪所有客户,通过自定义维度区分不同客户的数据,管理起来更高效。

1. 后端动态传递客户标识

在你的BaseController里添加通用逻辑,解析当前请求的子域名,获取对应的客户唯一ID,传递给视图:

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    var host = Request.Url.Host;
    // 这里根据你的子域名规则解析,比如 customer1.yourdomain.com 取 customer1
    var subdomainParts = host.Split('.');
    var clientSubdomain = subdomainParts.Length >= 3 ? subdomainParts[0] : "default"; // 处理无特殊子域名的情况
    
    // 从你的数据源(数据库/BLOB/缓存)获取客户唯一标识
    var clientUniqueId = GetClientIdBySubdomain(clientSubdomain);
    
    // 传递到视图
    ViewBag.ClientUniqueId = clientUniqueId;
    base.OnActionExecuting(filterContext);
}

2. 前端GA脚本动态注入标识

在你的_Layout.cshtml(全局布局页)里,根据ViewBag的值动态设置GA的自定义维度:

对于UA(旧版Google Analytics):
<!-- Google Analytics UA -->
<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

  // 创建跟踪器,若有跨子域名需求,设置cookieDomain为顶级域名
  ga('create', 'UA-XXXXXXXXX-1', {
    'cookieDomain': '.yourdomain.com' // 替换成你的顶级域名
  });
  
  // 动态设置自定义维度(提前在GA后台创建好dimension1,命名为"客户ID")
  ga('set', 'dimension1', '@ViewBag.ClientUniqueId');
  ga('send', 'pageview');
</script>
对于GA4(新版,更推荐):
<!-- Google Analytics GA4 -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXX"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-XXXXXXXXX', {
    'cookie_domain': '.yourdomain.com', // 跨子域名会话保持
    'user_properties': {
      'client_id': '@ViewBag.ClientUniqueId' // 传递客户标识
    }
  });
</script>

方案二:为每个客户分配独立GA ID(适合需要独立报表的场景)

如果部分客户需要独立的GA报表,你可以给每个客户配置单独的GA跟踪ID,后端根据子域名获取对应ID后传递给前端:

后端调整:

// 在BaseController的OnActionExecuting方法中
var gaTrackingId = GetGaTrackingIdByClientId(clientUniqueId); // 从数据源获取客户专属GA ID
ViewBag.GaTrackingId = gaTrackingId;

前端脚本调整(以GA4为例):

<script async src="https://www.googletagmanager.com/gtag/js?id=@ViewBag.GaTrackingId"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', '@ViewBag.GaTrackingId', {
    'cookie_domain': '.yourdomain.com'
  });
</script>

关键注意事项

  • 跨子域名会话保持:如果用户可能在不同子域名间跳转,一定要设置cookie_domain为你的顶级域名(比如.yourdomain.com),避免GA会话中断。
  • 自定义维度配置:用方案一的话,需要提前在GA后台的「管理-自定义定义-自定义维度」里创建对应的维度(比如dimension1对应客户ID)。
  • 测试验证:用GA的「实时报告」功能,访问不同子域名,确认客户标识是否正确传递;也可以用浏览器开发者工具查看GA请求的参数,检查cd1(UA)或user_properties(GA4)是否包含正确的客户ID。
  • 异常处理:要考虑子域名解析失败、客户数据不存在的情况,设置默认值(比如"unknown"),避免GA脚本报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:17:53