使用第三方分析服务(推荐,最简单、功能最强大)
这是目前最流行、最推荐的方法,你只需要在网站的每个页面上嵌入一小段 JavaScript 代码,服务提供商就会帮你完成所有数据收集、处理和可视化展示工作。

主流服务商:
- Google Analytics (GA4): 免费、功能极其强大,市场占有率最高,是目前的首选。
- Microsoft Clarity: 免费,除了常规的流量分析,还提供会话录制和热力图功能,对用户体验优化非常有帮助。
- 百度统计: 如果你的主要用户在中国大陆,百度统计的数据会更准确。
- Mixpanel / Amplitude: 付费为主,更偏向于产品分析和用户行为事件追踪,适合复杂的业务场景。
实现步骤 (以 Google Analytics 为例):
-
注册账号: 访问 Google Analytics 官网,用你的 Google 账号登录,创建一个“媒体资源”。
-
获取跟踪代码: 创建完成后,GA 会提供一个
gtag.js的跟踪代码。 -
嵌入代码:
- 传统 ASP.NET Web Forms: 将代码直接放在
Site.Master或所有页面的Master Page的<head>标签内。 - ASP.NET MVC / Razor Pages: 将代码放在
_Layout.cshtml文件的<head>部分。 - ASP.NET Core: 同样,放在
_Layout.cshtml的<head>中。
<!-- Google tag (gtag.js) --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-XXXXXXXXXX'); // 替换成你的 Measurement ID </script> - 传统 ASP.NET Web Forms: 将代码直接放在
-
查看数据: 代码部署后,等待几小时到一天,你就可以在 GA 的控制台看到网站的访问数据了。
(图片来源网络,侵删)
优点:
- 简单快捷: 无需编写后端代码,只需复制粘贴。
- 功能强大: 提供流量来源、用户画像、实时监控、转化漏斗、热力图等丰富功能。
- 专业可靠: 大公司维护,数据稳定,准确度高。
- 免费增值: 基础功能免费,满足绝大多数网站需求。
缺点:
- 数据在第三方: 所有访问数据都存储在 Google 的服务器上,存在隐私合规方面的考量(如 GDPR)。
- 无法记录未触发 JS 的请求: 对于爬虫、禁用 JS 的浏览器或直接通过 API 访问的请求,无法统计。
使用开源分析系统(兼顾功能与数据自主权)
如果你希望数据存储在自己的服务器上,或者需要高度定制化的分析功能,可以选择开源的分析系统。
主流系统:
- Matomo (原 Piwik): 最知名的开源分析平台,功能强大,可替代 Google Analytics。
- Plausible: 注重隐私、设计简洁、性能优秀的开源分析工具。
- AWStats: 一个经典的日志文件分析工具,通过解析服务器日志来生成报告。
实现步骤 (以 Matomo 为例):
- 部署 Matomo: 你可以在自己的服务器或虚拟主机上按照 Matomo 官方文档进行部署。
- 创建网站: 登录 Matomo 后台,添加你要统计的网站。
- 获取跟踪代码: Matomo 会生成一段 JavaScript 代码,格式与 GA 类似。
- 嵌入代码: 和 GA 一样,将这段代码嵌入到你网站的
_Layout.cshtml或Site.Master中。 - 查看数据: 所有数据都会存储在你的数据库中,可以在 Matomo 后台查看详细报告。
优点:
- 数据自主: 所有数据都由你自己掌控,隐私合规性更高。
- 可定制: 开源项目,你可以根据需要进行二次开发或功能扩展。
- 功能全面: 提供了与 GA 类似的绝大多数分析功能。
缺点:
- 部署和维护复杂: 需要自己搭建服务器、维护软件和数据库,有一定的技术门槛和维护成本。
- 资源消耗: 运行 Matomo 需要服务器资源(CPU、内存、数据库)。
自定义实现(最灵活,开发成本最高)
如果你只需要非常基础的统计,或者希望将统计数据与你的业务系统深度集成,可以选择自己动手实现。
实现思路:
-
创建数据表: 在数据库中创建一个表来存储访问日志。
CREATE TABLE [dbo].[VisitLogs] ( [Id] INT IDENTITY (1,1) PRIMARY KEY, [IpAddress] NVARCHAR(50) NULL, [UserAgent] NVARCHAR(256) NULL, [Url] NVARCHAR(500) NOT NULL, [ReferrerUrl] NVARCHAR(500) NULL, [VisitTime] DATETIME2 NOT NULL DEFAULT GETDATE(), [UserId] INT NULL -- 可选,关联到你的用户表 ); -
创建记录访问的 Action Filter (推荐): 这是 ASP.NET 中最优雅、最不侵入式的实现方式,创建一个自定义的 Action Filter,在每次请求执行时,将访问信息写入数据库。
(图片来源网络,侵删)VisitLogFilter.csusing System; using System.Web.Mvc; using System.Web; // 用于获取 HttpContext public class VisitLogFilter : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { // 获取当前 HTTP 上下文 var httpContext = filterContext.HttpContext; var request = httpContext.Request; // 获取访问信息 string ipAddress = request.UserHostAddress; string userAgent = request.UserAgent; string url = request.RawUrl; string referrerUrl = request.UrlReferrer?.ToString(); // TODO: 将这些信息插入到你的数据库中 // 你需要在这里注入你的 DbContext 或仓储服务 // _visitLogRepository.Add(new VisitLog { ... }); Console.WriteLine($"New Visit: {url} from {ipAddress}"); base.OnActionExecuting(filterContext); } } -
全局注册 Filter: 在
Global.asax.cs(Web Forms) 或Startup.cs(MVC/Core) 中全局注册这个 Filter,让它对所有请求生效。在 ASP.NET MVC 的
Global.asax.cs中:protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); // ... }在
FilterConfig.cs中:public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); filters.Add(new VisitLogFilter()); // 全局注册 } }在 ASP.NET Core 的
Startup.cs中:public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); // ... } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // ... app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); }); // 全局注册 MVC Filter app.UseEndpoints(endpoints => { endpoints.MapControllers(); endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}"); }); // 或者直接在这里注册 var options = new MvcOptions(); options.Filters.Add(new VisitLogFilter()); // 注意:这里可能需要调整,更推荐在 ConfigureServices 中注册 app.UseMvcWithDefaultRoute(options); }注意:在 ASP.NET Core 中,更推荐在
ConfigureServices中通过services.AddScoped<VisitLogFilter>();和services.AddMvc(options => options.Filters.Add<VisitLogFilter>());来注册。 -
创建统计展示页面: 编写一个 Controller 和 View,从
VisitLogs表中查询数据,并使用图表库(如 Chart.js、ECharts)进行可视化展示。
优点:
- 完全自主: 数据逻辑、存储方式、展示界面都由你控制。
- 无额外依赖: 不需要依赖第三方服务。
- **与业务
