제목
page_view 이벤트 카운트를 제대로 하고 있는지 궁금합니다.
작성자
와니
작성일
2023-06-22 17:00
조회
428
답변완료
질문이 있습니다.
GA4에서 페이지뷰 이벤트를 카운트하려고 합니다.
Dimension은 hostName(운영중인 호스트명), Date(접근날짜)
Metric은 eventCount(이벤트 카운트), sessions(방문수)
필터에서 필드명을 eventName으로 하고 필터값을 page_view로 했습니다.
그런데, UA의 값보다 20-30%정도 더 많이 측정되는 것 같습니다.
기존 UA에서 가져오는 방식은 다음과 같습니다.
Dimension은 hostname(운영중인 호스트명), date(접근날짜)
Metric은 pageviews(페이지뷰 카운트), visits(방문수)
UA랑 GA4랑 Dimension과 Metric이 서로 정확히 일치하는 것이 없는 것 같습니다.
===================================================================
// UA방식
$today = date("Y-m-d");
$start_date = "2023-06-01'";
$days = date("t", strtotime($start_date));
$end_date = $today;$optParams = array(
'dimensions' => 'ga:hostname,ga:date',
'sort' => '-ga:hostname,ga:date',
'start-index' => '1',
'max-results' => '10000'
);
$results = $this->analytics->data_ga->get(
'ga:' . $this->profileId,
$start_date,
$end_date,
'ga:pageviews,ga:visits',
$optParams);
$days = date("t", strtotime($start_date));
$end_date = $today;$optParams = array(
'dimensions' => 'ga:hostname,ga:date',
'sort' => '-ga:hostname,ga:date',
'start-index' => '1',
'max-results' => '10000'
);
$results = $this->analytics->data_ga->get(
'ga:' . $this->profileId,
$start_date,
$end_date,
'ga:pageviews,ga:visits',
$optParams);
===================================================================
=============================================================
<?
// GA4방식
error_reporting(E_ALL);
ini_set('display_errors', '1');
header("Content-type: text/html; charset=utf-8");
require 'vendor/autoload.php';
use Google\Analytics\Data\V1beta\BetaAnalyticsDataClient;
use Google\Analytics\Data\V1beta\DateRange;
use Google\Analytics\Data\V1beta\MinuteRange;
use Google\Analytics\Data\V1beta\Metric;
use Google\Analytics\Data\V1beta\Dimension;
use Google\Analytics\Data\V1beta\OrderBy;
use Google\Analytics\Data\V1beta\Filter;
use Google\Analytics\Data\V1beta\FilterExpression;
use Google\Analytics\Data\V1beta\FilterExpressionList;
use Google\Analytics\Data\V1beta\PropertyQuota;
use Google\Analytics\Data\V1beta\QuotaStatus;
use Google\ApiCore\ApiException;
$client = new BetaAnalyticsDataClient([
'credentials' => '/home2/___/______________________.json'
]);
$dimensions = [
new Dimension(['name' => 'hostName']),
new Dimension(['name' => 'Date']),
];
$metrics = [
new Metric(['name' => 'eventCount']),
new Metric(['name' => 'sessions']),
];
$today = date("Y-m-d");
$dateRanges = [
new DateRange([
'start_date' => '2023-06-01',
'end_date' => $today
])
];
$dimensionFilter = new FilterExpression([
'filter' => new Filter([
'field_name' => 'eventName',
'in_list_filter' => new Filter\InListFilter([
'values' => ["page_view"],
])
])
]);
$response = $client->runReport([
'property' => 'properties/308******',
'dateRanges' => $dateRanges,
'dimensions' => $dimensions,
'dimensionFilter' => $dimensionFilter,
'metrics' => $metrics,
'limit' => 1000,
'keepEmptyRows' => false,
'orderBys' => [
new OrderBy([
'dimension' => new OrderBy\DimensionOrderBy([
'dimension_name' => 'Date',
'order_type' => OrderBy\DimensionOrderBy\OrderType::ALPHANUMERIC
]),
'desc' => false,
]),
],
'returnPropertyQuota' => true,
]);
$list_array = [];
if($response->getRowCount() > 0) {
foreach ($response->getRows() as $row) {
$host = $row->getDimensionValues()[0]->getValue();
$date = $row->getDimensionValues()[1]->getValue();
if(in_array($host, ['www.domain.com','m.domain.com','abc.domain.com','def.domain.com'])) {
$list_array[$host][$date] = $row->getMetricValues()[0]->getValue().'#'.$row->getMetricValues()[1]->getValue();
}
}
}
$client->close();
$alltotal = 0;
$alltotal2 = 0;
$pagetotal = array();
$visittotal = array();
$table_rows = '';
foreach($list_array as $key => $value) {
if($key == 'www.domain.com') $table_head = "<tr>";
$table_rows.= "<tr><td>$key<div> </div></td>";
foreach ($value as $date => $value2) {
$day = date('d',strtotime($date));
$daynm = date('w',strtotime($date));
if($daynm == 0 || $daynm == 6) {
$colBg = "#bae4ff";
} else {
$colBg = "#fff";
}
$year_month = date('Y년 m월',strtotime($date));
echo "$key :: $year_month $day<br>";
$value2_array = explode('#',$value2);
$viewcount = number_format($value2_array[0]);
$visitcount = number_format($value2_array[1]);
if($day == '01' && $key == 'www.domain.com') $table_head.= "<th>$year_month</th>";
if($key == 'www.domain.com') $table_head.= "<th style='background-color:$colBg;'>$day</th>";
$table_rows.= "<td style='text-align:right;background-color:$colBg;'>$viewcount<br><span style='text-decoration:underline;'>$visitcount</span></td>";
@$pagetotal[$date] += $value2_array[0];
@$visittotal[$date] += $value2_array[1];
$alltotal += $value2_array[0];
$alltotal2 += $value2_array[1];
}
if($key == 'www.domain.com') $table_head.= "</tr>";
$table_rows.= "</tr>";
}
$table_total_rows = "<tr><td><b>일별 합계</b><span style='float: right;'>".number_format($alltotal)."<br><span style='text-decoration:underline;'>".number_format($alltotal2)."</span></span></td>";
foreach ($pagetotal as $date => $value) {
$daynm = date('w',strtotime($date));
if($daynm == 0 || $daynm == 6) {
$colBg = "#bae4ff";
} else {
$colBg = "#fff";
}
$table_total_rows.= "<td style='text-align:right;background-color:$colBg;'>".number_format($value)."<br><span style='text-decoration:underline;'>".number_format($visittotal[$date])."</span></td>";
}
$table_total_rows.= "</tr>";
?>
<table id="sitelist" class="table table-responsive">
<thead><?php echo $table_head ?></thead>
<tbody><?php echo $table_rows . $table_total_rows ?></tbody>
</table>
안녕하세요, 와니님
일단 두 속성의 추적코드의 동작 원리(Beacon API, batch)가 다르기 때문에 수집되는 데이터에 차이가 발생할 수 밖에 없습니다.
데이터 수집 방식이 다르기 때문에 사이트가 어떻게 개발되어 있는지에 따라 데이터 차이는 생각보다 커질 수 있습니다.
그리고 UA 속성에 필터나 다른 설정이 되어있을 가능성도 있구요.
일단은 API라는 레이어를 하나 더 추가한 다음 데이터를 비교하는 것보다는 GA 두 속성의 보고서에서 데이터를 먼저 비교해보시는 것을 추천드립니다.
(페이지 조회수는 굳이 API가 아니더라도 두 속성의 기본 보고서에서 쉽게 확인이 가능하기 때문입니다.)
그 다음 보고서의 항목 중에 차이가 유독 심한 페이지가 없는지도 체크해보시구요!
실제로 전송되는 page_view 이벤트를 디버깅하고 싶으시다면 omnibug라는 크롬 확장프로그램을 사용해보시는 것을 추천드립니다.