如何使用Google Analytics 4 Data API获取自然搜索数据
问题根因
你的代码无法运行是两个低级错误导致的:
- GA4 Data API的
runReport接口强制要求每次请求必须携带至少1个指标(metric),你第二段代码只传了维度,完全没配指标参数,过不了接口校验,会直接返回请求错误 - 维度名写错了:GA4里默认渠道分组的会话维度官方名称是
sessionDefaultChannelGrouping,你写的defaultChannelGrouping是旧版Universal Analytics的字段名,在GA4接口里不存在,会报维度无效错误
可直接运行的实现代码
你只需要把正确的维度名配上你之前已经跑通的指标列表,拿到返回结果后过滤出渠道值为Organic Search的行,就是你要的自然搜索数据:
$response = $this->data_client->runReport([ 'property' => $propertyId, 'dateRanges' => [new DateRange(['start_date' => '7daysAgo', 'end_date' => '1daysAgo'])], 'metrics' => [ new Metric(['name' => 'totalUsers']), new Metric(['name' => 'newUsers']), new Metric(['name' => 'sessions']), new Metric(['name' => 'screenPageViews']), new Metric(['name' => 'engagedSessions']), new Metric(['name' => 'activeUsers']), ], 'dimensions' => [ new Dimension(['name' => 'sessionDefaultChannelGrouping']), ] ]); $organicStats = []; foreach ($response->getRows() as $row) { $channel = $row->getDimensionValues()[0]->getValue(); if ($channel === 'Organic Search') { $metricList = ['totalUsers','newUsers','sessions','screenPageViews','engagedSessions','activeUsers']; foreach ($row->getMetricValues() as $idx => $val) { $organicStats[$metricList[$idx]] = $val->getValue(); } break; } } var_dump($organicStats);
补充说明
- 如果你要统计用户维度的首次归因渠道,可以把维度替换成
userDefaultChannelGrouping,日常看流量渠道效果用sessionDefaultChannelGrouping就可以,和GA4网页端后台默认报表的统计口径完全一致 - 不用在请求里加维度过滤参数,直接遍历结果匹配就行,不会额外消耗API配额
- 如果遍历完所有行都没找到
Organic Search的条目,说明你选的7天时间范围内站点没有自然搜索流量,不是代码问题
内容的提问来源于stack exchange,提问作者Dipti Gajjar
相关产品推荐
相关产品推荐

