Google Analytics 4 ve BigQuery ile performansı ölçme ve hata ayıklama

Web Vitals'ta yer alan verileri Google Analytics 4 mülklerine nasıl göndereceğinizi ve verileri BigQuery ile Looker Studio'da analiz etmek için nasıl dışa aktaracağınızı öğrenin.

Google, geliştiricilerin sitelerinin sahada gerçek kullanıcıları için Önemli Web Verileri metriklerine göre nasıl performans gösterdiğini görmelerine olanak tanıyan çeşitli araçlar (Search Console, PageSpeed Insights (PSI) ve Chrome Kullanıcı Deneyimi Raporu (CrUX)) sağlar.

Bu araçlar, sitenizin gerçek kullanıcı performansına dair üst düzey bir görünüm sunması ve kullanılmaya başlamak için hiçbir kurulum gerektirmemesi açısından mükemmeldir.

Ancak sitenizin performansını ölçmek için yalnızca bu araçlara güvenmek istememenizin birkaç önemli nedeni vardır:

  • CrUX tabanlı araçlar, verileri aylık veya önceki 28 günlük dönemlere göre raporlar. Bu nedenle, değişiklik yaptıktan sonra sonuçları görebilmeniz için uzun süre beklemeniz gerekir.
  • CrUX tabanlı araçlar yalnızca ülke, bağlantı türü ve cihaz kategorisi (masaüstü veya mobil) gibi sınırlı sayıda boyuta göre segmentlere ayrılabilir. Verileri işletmenize özgü boyutlara göre (ör. etkileşimde bulunan kullanıcılar, belirli bir deneme grubundaki kullanıcılar vb.) dilimleyemezsiniz.
  • CrUX tabanlı araçlar, performansınızın ne olduğunu size söyleyebilir ancak nedenini söyleyemez. Analiz araçları sayesinde sorunları tespit etmenize ve hata ayıklamanıza yardımcı olacak ek veriler gönderebilirsiniz.

Bu nedenlerle, tüm site sahiplerinin mevcut analiz araçlarını kullanarak Core Web Vitals metriklerini izlemesini öneririz. Bu yayında, tam da bunu yapmak için Google tarafından sunulan ücretsiz araçları nasıl kullanabileceğiniz açıklanmaktadır.

Her şeyi ayarladıktan sonra aşağıdaki gibi kontrol panelleri oluşturabilirsiniz:

Web Vitals Connector raporu ekran görüntüsü

Web Vitals Connector raporu ekran görüntüsü

Burada açıklanan tüm adımlara görsel bir genel bakış için Google I/O 2021 'deki konuşmamıza göz atın:

Ölçüm

Performansı ölçmek, Google Analytics'te özel metrikler kullanılarak her zaman mümkün olmuştur. Ancak Google Analytics 4'te (GA4) özellikle geliştiricilerin heyecanlanacağı birkaç yeni özellik vardır.

Google Analytics web arayüzünde güçlü analiz araçları olsa da muhtemelen bildiğiniz bir sorgu dili kullanarak ham etkinlik verilerine erişmenin gücünü ve esnekliğini aşmak zordur.

Google Analytics 4 ve BigQuery'yi kullanarak Core Web Vitals'ı ölçmeye başlamak için üç şey yapmanız gerekir:

  1. Bir Google Analytics 4 mülkü ve BigQuery projesi oluşturun.
  2. Aldığınız tüm verilerin BigQuery proje tablolarınıza otomatik olarak doldurulması için Google Analytics mülk yapılandırmanızda BigQuery Export'u etkinleştirin.
  3. Core Web Vitals metriklerini ölçmek ve ilişkilendirme verileri dahil olmak üzere verileri Google Analytics 4'e göndermek için sitenize web-vitals JavaScript kitaplığını ekleyin.

Analiz et

Tüm ayarları tamamladığınızda, BigQuery arayüzünde etkinlik verilerinin doldurulduğunu görürsünüz ve verileri aşağıdaki gibi sorgulayabilirsiniz:

SELECT * FROM `my_project_id.analytics_XXXXX.events_*`
WHERE event_name IN ('LCP', 'INP', 'CLS')

Bu sorgunun sonuçlarının önizlemesini aşağıda bulabilirsiniz:

BigQuery'deki Web Vitals etkinlik verileri

Web Vitals verilerini sorgulayın

Web Vitals etkinlik verilerinizi sorgulamadan önce verilerin nasıl toplandığını anlamanız önemlidir.

Anlamanız gereken en önemli nokta, bazı durumlarda aynı sayfada aynı metrik için birden fazla etkinlik alınabileceğidir. Bu durum, metrik değeri değişirse ve güncellenmiş bir değer raporlanırsa (CLS ile sık karşılaşılan bir durumdur) ortaya çıkabilir.

Web Vitals etkinlikleri için gönderilen son değer her zaman en doğru değerdir. Bu nedenle, herhangi bir analiz gerçekleştirmeden önce yalnızca bu değerleri filtrelemek önemlidir. Google Analytics 4'e veri göndermek için web-vitals JavaScript kitaplığı tarafından sağlanan kod snippet'inde, metrik başına benzersiz bir kimlik gönderme işlemi yer alır. Bu nedenle, sonuçlarınızı her metrik kimliği için yalnızca son alınan değerle sınırlamak üzere aşağıdaki sorguyu kullanabilirsiniz:

# Subquery all Web Vitals events from the last 28 days
WITH web_vitals_events AS (
 
SELECT event_name as metric_name, * EXCEPT(event_name, is_last_received_value) FROM (
   
SELECT *, IF (ROW_NUMBER() OVER (
      PARTITION
BY (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'metric_id')
     
ORDER BY (SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = 'metric_value') DESC
   
) = 1, true, false) AS is_last_received_value
   
FROM `bigquery_project_id.analytics_XXXXX.events_*`
   
WHERE event_name in ('CLS', 'INP', 'LCP') AND
      _TABLE_SUFFIX
BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 28 DAY)) AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
 
) WHERE is_last_received_value
)

Bu yayında atıfta bulunulan diğer tüm sorguların bu alt sorguyla başlayacağını unutmayın.

Örnek sorgular

Sonraki birkaç bölümde, çalıştırmak isteyebileceğiniz yaygın Web Vitals sorgularına dair birkaç örnek verilmiştir.

Sitenin tamamında% 75'lik dilimdeki (p75) LCP, INP ve CLS

# Subquery all Web Vitals events from the last 28 days
WITH web_vitals_events AS (
 
SELECT event_name as metric_name, * EXCEPT(event_name, is_last_received_value) FROM (
   
SELECT *, IF (ROW_NUMBER() OVER (
      PARTITION
BY (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'metric_id')
     
ORDER BY (SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = 'metric_value') DESC
   
) = 1, true, false) AS is_last_received_value
   
FROM `bigquery_project_id.analytics_XXXXX.events_*`
   
WHERE event_name in ('CLS', 'INP', 'LCP') AND
      _TABLE_SUFFIX
BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 28 DAY)) AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
 
) WHERE is_last_received_value
)
# Main query logic
SELECT
  metric_name
,
  APPROX_QUANTILES
(metric_value, 100)[OFFSET(75)] AS p75,
  COUNT
(1) as count
FROM (
 
SELECT
    metric_name
,
    ROUND
((SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = "metric_value"), 3) AS metric_value,
 
FROM web_vitals_events
)
GROUP BY 1

En yüksekten en düşüğe tüm LCP değerleri

# Subquery all Web Vitals events from the last 28 days
WITH web_vitals_events AS (
 
SELECT event_name as metric_name, * EXCEPT(event_name, is_last_received_value) FROM (
   
SELECT *, IF (ROW_NUMBER() OVER (
      PARTITION
BY (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'metric_id')
     
ORDER BY (SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = 'metric_value') DESC
   
) = 1, true, false) AS is_last_received_value
   
FROM `bigquery_project_id.analytics_XXXXX.events_*`
   
WHERE event_name in ('CLS', 'INP', 'LCP') AND
      _TABLE_SUFFIX
BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 28 DAY)) AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
 
) WHERE is_last_received_value
)
# Main query logic
SELECT
  ROUND
((SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = "metric_value"), 3) AS metric_value,
FROM web_vitals_events
WHERE metric_name = 'LCP'
ORDER BY metric_value DESC
# Subquery all Web Vitals events from the last 28 days
WITH web_vitals_events AS (
 
SELECT event_name as metric_name, * EXCEPT(event_name, is_last_received_value) FROM (
   
SELECT *, IF (ROW_NUMBER() OVER (
      PARTITION
BY (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'metric_id')
     
ORDER BY (SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = 'metric_value') DESC
   
) = 1, true, false) AS is_last_received_value
   
FROM `bigquery_project_id.analytics_XXXXX.events_*`
   
WHERE event_name in ('CLS', 'INP', 'LCP') AND
      _TABLE_SUFFIX
BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 28 DAY)) AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
 
) WHERE is_last_received_value
)
# Main query logic
SELECT
  page_path
,
  APPROX_QUANTILES
(metric_value, 100)[OFFSET(75)] AS LCP,
  COUNT
(1) as count
FROM (
 
SELECT
    REGEXP_SUBSTR
((SELECT value.string_value FROM UNNEST(event_params) WHERE key = "page_location"), r'\.com(\/[^?]*)') AS page_path,
    ROUND
((SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = "metric_value"), 3) AS metric_value,
 
FROM web_vitals_events
 
WHERE metric_name = 'LCP'
)
GROUP BY 1
ORDER BY count DESC
LIMIT
10

En kötü CLS'ye sahip ilk 10 sayfa (p75)

# Subquery all Web Vitals events from the last 28 days
WITH web_vitals_events AS (
 
SELECT event_name as metric_name, * EXCEPT(event_name, is_last_received_value) FROM (
   
SELECT *, IF (ROW_NUMBER() OVER (
      PARTITION
BY (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'metric_id')
     
ORDER BY (SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = 'metric_value') DESC
   
) = 1, true, false) AS is_last_received_value
   
FROM `bigquery_project_id.analytics_XXXXX.events_*`
   
WHERE event_name in ('CLS', 'INP', 'LCP') AND
      _TABLE_SUFFIX
BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 28 DAY)) AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
 
) WHERE is_last_received_value
)
# Main query logic
SELECT
  page_path
,
  APPROX_QUANTILES
(metric_value, 100)[OFFSET(75)] AS CLS,
  COUNT
(1) as count
FROM (
 
SELECT
    REGEXP_SUBSTR
((SELECT value.string_value FROM UNNEST(event_params) WHERE key = "page_location"), r'\.com(\/[^?]*)') AS page_path,
    ROUND
((SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = "metric_value"), 3) AS metric_value,
 
FROM web_vitals_events
 
WHERE metric_name = 'CLS'
)
GROUP BY 1
HAVING count > 50 # Limit to relatively popular pages
ORDER BY CLS DESC
LIMIT
10

Hata Ayıklama

Önceki sorgular, Web Vitals metrik verilerinin nasıl sorgulandığını gösterir. Bu veriler, mevcut performansınızı ve zaman içindeki trendini anlamanıza yardımcı olur. Ancak performansınız beklenenden kötüyse ve nedeninden emin değilseniz ne yapabilirsiniz?

Sorunları gidermek için gerekli işlemleri yapamıyorsanız puanlarınızın ne olduğunu bilmek size yardımcı olmaz.

Alandaki performansta hata ayıklama başlıklı makalede, analiz verilerinizle nasıl ek hata ayıklama bilgileri gönderebileceğiniz açıklanmaktadır. Bu yayında ayrıntılı olarak açıklanan talimatları uygularsanız hata ayıklama bilgilerinin BigQuery'de de gösterildiğini göreceksiniz.

Örnek sorgular

Aşağıdaki sorgularda, performans sorunlarının temel nedenini belirlemeye yardımcı olmak için debug_target etkinlik parametresinin nasıl kullanılacağı gösterilmektedir.

CLS'ye en çok katkıda bulunan öğeler

debug_target, sayfadaki metrik değeriyle en alakalı öğeye karşılık gelen bir CSS seçici dizesidir.

CLS'de debug_target, CLS değerine katkıda bulunan en büyük düzen kaymasında en büyük öğeyi temsil eder. Hiçbir öğe kaydırılmazsa debug_target değeri null olur.

Aşağıdaki sorgu, debug_target boyutuna göre gruplandırılmış sayfaları 75. yüzdelik dilimdeki CLS'lerine göre en kötüden en iyiye doğru listeler:

# Subquery all Web Vitals events from the last 28 days
WITH web_vitals_events AS (
 
SELECT event_name as metric_name, * EXCEPT(event_name, is_last_received_value) FROM (
   
SELECT *, IF (ROW_NUMBER() OVER (
      PARTITION
BY (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'metric_id')
     
ORDER BY (SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = 'metric_value') DESC
   
) = 1, true, false) AS is_last_received_value
   
FROM `bigquery_project_id.analytics_XXXXX.events_*`
   
WHERE event_name in ('CLS', 'INP', 'LCP') AND
      _TABLE_SUFFIX
BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 28 DAY)) AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
 
) WHERE is_last_received_value
)
# Main query logic
SELECT
  page_path
,
  debug_target
,
  APPROX_QUANTILES
(metric_value, 100)[OFFSET(75)] AS CLS,
  COUNT
(1) as count
FROM (
 
SELECT
    REGEXP_SUBSTR
((SELECT value.string_value FROM UNNEST(event_params) WHERE key = "page_location"), r'\.com(\/[^?]*)') AS page_path,
   
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = "debug_target") as debug_target,
    ROUND
((SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = "metric_value"), 3) AS metric_value,
   
*
 
FROM web_vitals_events
 
WHERE metric_name = 'CLS'
)
GROUP BY 1, 2
HAVING count > 50 # Limit to relatively popular pages
ORDER BY CLS DESC

CLS'ye en çok katkıda bulunan öğeler için sorgu sonucu

Sayfadaki hangi öğelerin kaydığını bilmek, sorunun temel nedenini tespit edip düzeltmeyi çok daha kolaylaştırır.

Burada raporlanan öğelerin, sayfalarınızı yerel olarak hata ayıkladığınızda kaydırıldığını gördüğünüz öğelerle aynı olmayabileceğini unutmayın. Bu nedenle, bu verileri ilk başta yakalamak çok önemlidir. Sorun olduğunun farkında olmadığınız sorunları düzeltmek çok zordur.

Diğer metriklerde hata ayıklama

Önceki sorgu, CLS metriğiyle ilgili sonuçları gösterir ancak LCP ve INP için hata ayıklama hedeflerini bildirmek üzere tam olarak aynı teknik kullanılabilir. Hata ayıklama için where yan tümcesini ilgili metrikle değiştirmeniz yeterlidir:

WHERE metric_name = 'INP'
WHERE metric_name
= 'LCP'

Yine, Core Web Vitals metriklerinin her biri için hata ayıklama bilgilerinin nasıl toplanıp gönderileceğiyle ilgili talimatlar için Alandaki performansta hata ayıklama başlıklı makaleyi inceleyebilirsiniz.

Görselleştir

Yalnızca sorgu sonuçlarına bakarak analiz elde etmek zor olabilir. Örneğin, aşağıdaki sorgu veri kümesinde LCP için günlük 75. yüzdelik değer değerlerini listeler.

# Subquery all Web Vitals events from the last 28 days
WITH web_vitals_events AS (
 
SELECT event_name as metric_name, * EXCEPT(event_name, is_last_received_value) FROM (
   
SELECT *, IF (ROW_NUMBER() OVER (
      PARTITION
BY (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'metric_id')
     
ORDER BY (SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = 'metric_value') DESC
   
) = 1, true, false) AS is_last_received_value
   
FROM `bigquery_project_id.analytics_XXXXX.events_*`
   
WHERE event_name in ('CLS', 'INP', 'LCP') AND
      _TABLE_SUFFIX
BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 28 DAY)) AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
 
) WHERE is_last_received_value
)
# Main query logic
SELECT
  event_date
,
  metric_name
,
  APPROX_QUANTILES
(ROUND(metric_value, 2), 100)[OFFSET(75)] AS p75
FROM
 
(
   
SELECT
      event_date
,
      metric_name
,
      ROUND
((SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key = 'metric_value'), 3) AS metric_value
   
FROM web_vitals_events
   
WHERE
      metric_name
= 'LCP'
 
)
GROUP BY
 
1, 2
ORDER BY event_date

Bu sorgu sonuçlarından, yalnızca verilere bakarak trendleri veya aykırı değerleri belirlemek zordur.

Günlük metrik değeri sorgu sonuçları

Böyle durumlarda verileri görselleştirmek, daha hızlı analizler elde etmenize yardımcı olabilir.

Sorgu sonuçlarını Looker Studio'da görselleştirme

BigQuery, Data Studio aracılığıyla tüm sorgu sonuçlarını görselleştirmenin hızlı bir yolunu sunar. Looker Studio, ücretsiz olarak kullanılabilen bir veri görselleştirme ve kontrol paneli aracıdır. Sorgu sonuçlarınızı görselleştirmek için sorgunuzu BigQuery kullanıcı arayüzünde çalıştırdıktan sonra Verileri Keşfet düğmesini tıklayın ve Looker Studio ile keşfet'i seçin.

BigQuery'deki Looker Studio ile keşfet seçeneği

Bu işlem, keşif görünümünde BigQuery'den Looker Studio'ya doğrudan bir bağlantı oluşturur. Bu görünümde, görselleştirmek istediğiniz alanları seçebilir, grafik türlerini belirleyebilir, filtreler oluşturabilir ve hızlı görsel analiz için özel grafikler oluşturabilirsiniz. Önceki sorgu sonuçlarından, LCP değerlerinin zaman içindeki trendini görmek için aşağıdaki çizgi grafiği oluşturabilirsiniz:

Looker Studio'da günlük LCP değerlerinin çizgi grafiği

BigQuery ile Looker Studio arasındaki bu doğrudan bağlantı sayesinde, sorgularınızdan hızlı grafikler oluşturabilir ve görsel analizler yapabilirsiniz. Ancak ek analiz yapmak istiyorsanız daha bütünsel bir görünüm elde etmek veya verileri ayrıntılı olarak incelemek için etkileşimli bir kontrol panelindeki çeşitli grafiklere bakabilirsiniz. Kullanışlı bir kontrol paneline sahip olmak, metriklerinizi analiz etmek istediğinizde her seferinde sorgu yazmanız ve grafik oluşturmanız gerekmediği anlamına gelir.

Yerel BigQuery bağlayıcısını kullanarak Looker Studio'da kontrol paneli oluşturabilirsiniz. Bunu yapmak için datastudio.google.com adresine gidin, yeni bir veri kaynağı oluşturun, BigQuery bağlayıcısını seçin ve çalışmak istediğiniz veri kümesini seçin:

Looker Studio'da BigQuery yerel bağlayıcısını kullanma

Web Verileri verilerini somutlaştırma

Daha önce açıklandığı gibi Web Vitals etkinlik verilerinin kontrol panellerini oluştururken Google Analytics 4 dışa aktarma veri kümesini doğrudan kullanmak verimli değildir. GA4 verilerinin yapısı ve Web Vitals metrikleri için gereken ön işleme nedeniyle sorgunuzun bazı bölümleri birden çok kez çalıştırılır. Bu durum iki soruna yol açar: gösterge tablosu performansı ve BigQuery maliyetleri.

BigQuery korumalı alanı modunu ücretsiz olarak kullanabilirsiniz. BigQuery'nin ücretsiz kullanım katmanında, her ay işlenen ilk 1 TB sorgu verisi ücretsizdir. Bu yayında açıklanan analiz yöntemleri için, önemli ölçüde büyük bir veri kümesi kullanmıyorsanız veya veri kümesini düzenli olarak yoğun şekilde sorguluyorsanız her ay bu ücretsiz sınırın altında kalabilirsiniz. Ancak trafiği yüksek bir web siteniz varsa ve hızlı bir etkileşimli kontrol paneli kullanarak farklı metrikleri düzenli olarak izlemek istiyorsanız bölümleme, kümeleme ve önbelleğe alma gibi BigQuery verimlilik özelliklerinden yararlanırken web temel metrikleri verilerinizi önceden işlemenizi ve somutlaştırmanızı öneririz.

Aşağıdaki komut dosyası, BigQuery verilerinizi (kaynak tablo) ön işleme alır ve somutlaştırılmış bir tablo (hedef tablo) oluşturur. Bu sorguyu kendi veri kümeniz için kullanırken, işlenen veri miktarını azaltmak amacıyla kaynak tablo için bir tarih aralığı da tanımlayabilirsiniz.

# Materialize Web Vitals metrics from GA4 event export data

# Replace target table name
CREATE OR REPLACE TABLE bigquery_project_id.ga4_demo_dev.web_vitals_summary
  PARTITION
BY DATE(event_timestamp)
  CLUSTER
BY metric_name
AS
SELECT
  ga_session_id
,
 
IF(
   
EXISTS(SELECT 1 FROM UNNEST(events) AS e WHERE e.event_name = 'first_visit'),
   
'New user',
   
'Returning user') AS user_type,
 
IF(
   
(SELECT MAX(session_engaged) FROM UNNEST(events)) > 0, 'Engaged', 'Not engaged')
   
AS session_engagement,
  evt
.* EXCEPT (session_engaged, event_name),
  event_name
AS metric_name,
  FORMAT_TIMESTAMP
('%Y%m%d', event_timestamp) AS event_date
FROM
 
(
   
SELECT
      ga_session_id
,
      ARRAY_AGG
(custom_event) AS events
   
FROM
     
(
       
SELECT
          ga_session_id
,
          STRUCT
(
            country
,
            device_category
,
            device_os
,
            traffic_medium
,
            traffic_name
,
            traffic_source
,
            page_path
,
            debug_target
,
            event_timestamp
,
            event_name
,
            metric_id
,
           
IF(event_name = 'LCP', metric_value / 1000, metric_value) AS metric_value,
            user_pseudo_id
,
            session_engaged
,
            session_revenue
) AS custom_event
       
FROM
         
(
           
SELECT
             
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id')
               
AS ga_session_id,
             
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'metric_id')
               
AS metric_id,
              ANY_VALUE
(device.category) AS device_category,
              ANY_VALUE
(device.operating_system) AS device_os,
              ANY_VALUE
(traffic_source.medium) AS traffic_medium,
              ANY_VALUE
(traffic_source.name) AS traffic_name,
              ANY_VALUE
(traffic_source.source) AS traffic_source,
              ANY_VALUE
(
                REGEXP_SUBSTR
(
                 
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_location'),
                  r
'^[^?]+')) AS page_path,
              ANY_VALUE
(
               
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'debug_target'))
               
AS debug_target,
              ANY_VALUE
(user_pseudo_id) AS user_pseudo_id,
              ANY_VALUE
(geo.country) AS country,
              ANY_VALUE
(event_name) AS event_name,
              SUM
(ecommerce.purchase_revenue) AS session_revenue,
              MAX
(
               
(
                 
SELECT
                   
COALESCE(
                      value
.double_value, value.int_value, CAST(value.string_value AS NUMERIC))
                 
FROM UNNEST(event_params)
                 
WHERE key = 'session_engaged'
               
)) AS session_engaged,
              TIMESTAMP_MICROS
(MAX(event_timestamp)) AS event_timestamp,
              MAX
(
               
(
                 
SELECT COALESCE(value.double_value, value.int_value)
                 
FROM UNNEST(event_params)
                 
WHERE key = 'metric_value'
               
)) AS metric_value,
           
FROM
             
# Replace source table name
             
`bigquery_project_id.analytics_XXXXX.events_*`
           
WHERE
              event_name
IN ('LCP', 'INP', 'CLS', 'first_visit', 'purchase')
           
GROUP BY
             
1, 2
         
)
     
)
   
WHERE
      ga_session_id
IS NOT NULL
   
GROUP BY ga_session_id
 
)
CROSS JOIN UNNEST(events) AS evt
WHERE evt.event_name NOT IN ('first_visit', 'purchase');

Bu somutlaştırılmış veri kümesinin birkaç avantajı vardır:

  • Veri yapısı düzleştirilir ve sorgulanması kolaylaştırılır.
  • Orijinal GA4 veri kümesinden yalnızca Web Vitals etkinliklerini saklar.
  • Oturum kimliği, kullanıcı türü (yeni ve geri gelen) ve oturum etkileşimi bilgileri doğrudan sütunlarda kullanılabilir.
  • Tablo, tarihe göre bölümlendirilmiş ve metrik adına göre kümelenmiş. Bu, genellikle her sorgu için işlenen veri miktarını azaltır.
  • Bu tabloyu sorgulamak için joker karakter kullanmanız gerekmediğinden sorgu sonuçları 24 saate kadar önbelleğe alınabilir. Bu sayede aynı sorgunun tekrarlanmasıyla ilgili maliyetler azalır.
  • BigQuery BI Engine'ı kullanıyorsanız bu tabloda optimize edilmiş SQL işlevleri ve operatörleri çalıştırabilirsiniz.

Bu somutlaştırılmış tabloyu doğrudan BigQuery kullanıcı arayüzünden sorgulayabilir veya BigQuery bağlayıcısını kullanarak Looker Studio'da kullanabilirsiniz.

Web Vitals bağlayıcısını kullanma

Kontrol panelini sıfırdan oluşturmak zaman aldığından, sizin için şablon kontrol paneli oluşturacak paketlenmiş bir çözüm geliştirdik. Öncelikle, önceki sorguyu kullanarak Web Vitals tablonuzu somutlaştırdığınızdan emin olun. Ardından, şu bağlantıyı kullanarak Looker Studio için Web Vitals bağlayıcısına erişin: goo.gle/web-vitals-connector

Tek seferlik yetkilendirme yaptıktan sonra aşağıdaki yapılandırma ekranını görürsünüz:

Web Vitals Connector yetkilendirme ekranı

Somutlaştırılmış BigQuery tablo kimliğini (ör. hedef tablo) ve BigQuery faturalandırma proje kimliğinizi sağlayın. Bağlan'ı tıkladıktan sonra Looker Studio yeni bir şablon kontrol paneli oluşturur ve verilerinizi bu panelle ilişkilendirir. Kontrol panelini istediğiniz gibi düzenleyebilir, değiştirebilir ve paylaşabilirsiniz. Bir kez kontrol paneli oluşturursanız farklı veri kümelerinden birden fazla kontrol paneli oluşturmak istemiyorsanız bağlayıcı bağlantısını tekrar ziyaret etmeniz gerekmez.

Kontrol panelinde gezinirken Özet sekmesinde, Web Vitals metriklerinin günlük trendlerini ve web sitenizle ilgili kullanıcı sayısı ve oturum sayısı gibi bazı kullanım bilgilerini görebilirsiniz.

Kullanıcı Analizi sekmesinde bir metrik seçtikten sonra metrik yüzdelik dilimlerinin yanı sıra farklı kullanım ve işletme metriklerine göre kullanıcı sayısının dökümünü alabilirsiniz.

Sayfa Yolu Analizi sekmesi, web sitenizdeki sorunlu alanları belirlemenize yardımcı olur. Burada, genel bakışı görmek için bir metrik seçebilirsiniz. Ancak y ekseninde yüzdelik değer ve x ekseninde kayıt sayısıyla tüm sayfa yollarının dağılım haritasını da görürsünüz. Dağılım haritası, beklenen metriği değerlerinin altında olan sayfaları belirlemenize yardımcı olabilir. Sayfa yolu tablosunun dağılım grafiğini kullanarak sayfaları seçtikten sonra Hata Ayıklama Hedefi tablosunu görüntüleyerek sorunlu alanı daha ayrıntılı inceleyebilirsiniz.

Gelir Analizi sekmesi, işletmenizi ve performans metriklerini aynı yerden nasıl izleyebileceğinize dair bir örnektir. Bu bölümde, kullanıcının satın alma işlemi gerçekleştirdiği tüm oturumlar gösterilir. Belirli bir oturum sırasında elde edilen geliri kullanıcı deneyimiyle karşılaştırabilirsiniz .

İleri düzey kullanım

Veri kümesiyle daha fazla tanıştıkça gösterge tablosunu düzenleyebilir ve daha zengin ve hedefli analizler için kendi grafiklerinizi ekleyebilirsiniz. Kontrol panelini daha kullanışlı hale getirmek için aşağıdaki adımları uygulayabilirsiniz:

  • Güncellenmiş veriler almak için BigQuery'de planlı sorgu oluşturun. Daha önce çalıştırdığımız somutlaştırma sorgusu, verilerinizin yalnızca o andaki anlık görüntüsünü alır. Kontrol panelinizi yeni verilerle güncel tutmak istiyorsanız her gün çalışacak ve somutlaştırılmış tablonuza yeni verileri ekleyebilecek planlanmış bir sorgu çalıştırabilirsiniz.
  • İş analizleri için birinci taraf verilerini (ör. CRM) birleştirin. Somutlaştırılmış tabloya user_id'yi ayrı bir sütun olarak ekleyebilirsiniz. Bu sayede birinci taraf verilerinizi birleştirebilirsiniz. Birinci taraf verileriniz BigQuery'de yoksa verileri yükleyebilir veya federe veri kaynağı kullanabilirsiniz.
  • Site veya uygulama sürümünüzü Google Analytics'e gönderdiğiniz verilerde parametre olarak raporlayın ve somutlaştırılmış tabloya sütun olarak ekleyin. Ardından, sürüm değişikliklerinin performansı nasıl etkilediğini daha kolay görebilmek için bu sürüm verilerini grafiklerinize boyut olarak ekleyebilirsiniz.
  • Doğrudan sorgu veya kontrol paneli aracılığıyla veri kümesinin önemli ölçüde yoğun bir şekilde kullanılmasını bekliyorsanız BigQuery BI Engine'in ücretli sürümünü kullanmayı deneyebilirsiniz.

Özet

Bu yayında, sahada toplanan gerçek kullanıcı verileriyle performansı ölçmek ve hata ayıklamak için Google Analytics 4 ve BigQuery'nin temel kullanım alanları ele alınmıştır. Ayrıca, verileri mümkün olduğunca kolay bir şekilde görselleştirmek için Looker Studio ve Web Vitals Bağlayıcısı'nı kullanarak otomatik raporlar ve kontrol panelleri oluşturma hakkında da bilgi verildi.

Bu yayından çıkarılan bazı önemli noktalar:

  • Gerçek kullanıcı verileriyle performansı ölçmek, sitenizi anlamak, hata ayıklama yapmak ve optimize etmek için çok önemlidir.
  • Performans metrikleriniz ve işletme metrikleriniz aynı sistemde olduğunda daha ayrıntılı analizler elde edebilirsiniz. Google Analytics ve BigQuery bunu mümkün kılar.
  • Ham Google Analytics verilerini BigQuery'ye aktarmak, muhtemelen bildiğiniz bir sorgu dilini kullanarak ayrıntılı ve özel analizler yapma konusunda sınırsız potansiyel sunar.
  • Google, raporlarınızı tam istediğiniz şekilde oluşturma özgürlüğü veren çeşitli API'lere ve Looker Studio gibi görselleştirme araçlarına sahiptir.