제목
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);


===================================================================


=============================================================

<?

// 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>&nbsp;</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>
전체 1

  • 2023-06-24 03:16

    안녕하세요, 와니님
    일단 두 속성의 추적코드의 동작 원리(Beacon API, batch)가 다르기 때문에 수집되는 데이터에 차이가 발생할 수 밖에 없습니다.
    데이터 수집 방식이 다르기 때문에 사이트가 어떻게 개발되어 있는지에 따라 데이터 차이는 생각보다 커질 수 있습니다.

    그리고 UA 속성에 필터나 다른 설정이 되어있을 가능성도 있구요.

    일단은 API라는 레이어를 하나 더 추가한 다음 데이터를 비교하는 것보다는 GA 두 속성의 보고서에서 데이터를 먼저 비교해보시는 것을 추천드립니다.
    (페이지 조회수는 굳이 API가 아니더라도 두 속성의 기본 보고서에서 쉽게 확인이 가능하기 때문입니다.)

    그 다음 보고서의 항목 중에 차이가 유독 심한 페이지가 없는지도 체크해보시구요!

    실제로 전송되는 page_view 이벤트를 디버깅하고 싶으시다면 omnibug라는 크롬 확장프로그램을 사용해보시는 것을 추천드립니다.