PHP与Google Analytics 4(GA4) UTM追踪不一致问题排查求助
GA4自动流量识别逻辑
GA4会通过HTTP Referer头自动识别搜索引擎organic流量,不需要依赖UTM参数。这类流量通常是用户直接从搜索引擎结果页点击进入,你的PHP代码仅记录带GET参数的请求(或仅记录UTM参数),而organic搜索点击大多不带自定义UTM,因此不会出现在你的日志和数据库中,但GA4能通过Referer解析出来源/媒介。WordPress缓存机制拦截
如果你的站点启用了静态缓存(如WP Rocket、Cloudflare缓存),用户访问缓存页面时,PHP代码(包括init钩子)不会执行,自然无法记录请求参数。但GA4的前端JS追踪代码会在浏览器中运行,只要用户加载页面就会上报数据,导致GA4记录的流量和你的后端日志不一致。init钩子的触发范围限制init钩子不会在AJAX请求、REST API请求或WP-Cron任务中触发(除非手动调用)。如果这些organic流量包含这类请求,你的代码不会记录,但GA4仍会追踪页面访问。另外,部分安全插件可能拦截异常请求,导致代码未执行但GA4仍能捕获前端访问。代码逻辑的过滤条件
检查你的代码是否仅在存在UTM参数时才写入数据库/日志。如果是,那么无UTM的organic搜索请求就不会被记录,但GA4不受此限制,会正常识别来源。此外,若代码中对请求方法、UA做了过滤(比如排除爬虫UA),而GA4未排除这些流量,也会出现数据差异。GA4的会话归因规则
GA4的会话归因会根据用户的最新交互更新来源/媒介。比如用户首次通过带UTM的链接进入,之后又通过搜索引擎点击返回,GA4会将会话来源更新为organic,但你的代码可能仅记录首次UTM参数,导致自制面板和GA4数据不一致。
内容的提问来源于stack exchange,提问作者Anton

