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

Web Verileri verilerini Google Analytics 4 mülklerine göndermeyi ve bu verileri BigQuery ile Looker Studio'da analiz için dışa aktarmayı öğrenin.

Minhaz Kazi
Minhaz Kazi

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

Bu araçlar, sitenizin gerçek kullanıcı performansına ilişkin üst düzey bir görünüm sağlamaları açısından mükemmeldir ve kullanmaya başlamak için hiçbir kurulum gerektirmez.

Ancak, sitenizin performansını ölçmek için yalnızca bu araçları kullanmak istememenizin birkaç önemli nedeni vardır:

  • CrUX tabanlı araçlar, verileri aylık veya önceki 28 günlük dönemlere göre rapor eder. Bu nedenle, herhangi bir değişiklik yaptıktan sonra sonuçları görmek 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 (örneğin, etkileşimde bulunan kullanıcılar, belirli bir deneme grubundaki kullanıcılar vb.) göre bölümlere ayıramazsınız.
  • CrUX tabanlı araçlar, performansınızın ne olduğunu söyleyebilir, ancak nedenini söyleyemez. Analiz araçları sayesinde, sorunları takip 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 Önemli Web Verileri metriklerini izlemelerini öneririz. Bu gönderide, Google’ın sunduğu ücretsiz araçları nasıl kullanabileceğiniz açıklanmaktadır.

Her şeyi ayarladıktan sonra, aşağıdaki gibi gösterge tabloları oluşturabilirsiniz:

Web Verileri Bağlayıcısı raporunun ekran görüntüsü

Web Verileri Bağlayıcısı raporunun ekran görüntüsü

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

Ölçüm

Google Analytics ile her zaman özel metrikler kullanılarak performans ölçümü mümkün olsa da Google Analytics 4'te (GA4) özellikle geliştiricilerin heyecan duyacağı birkaç yeni özellik var.

Google Analytics web arayüzünde güçlü analiz araçları bulunsa da muhtemelen bildiğiniz bir sorgu dilini kullanarak ham etkinlik verilerine erişimin 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 gerekiyor:

  1. Bir Google Analytics 4 mülkü ve bir BigQuery projesi oluşturun.
  2. Google Analytics mülk yapılandırmanızda BigQuery Export özelliğini etkinleştirin. Böylece, aldığınız tüm veriler BigQuery proje tablolarınızda otomatik olarak doldurulur.
  3. web-vitals JavaScript kitaplığını sitenize ekleyerek Önemli Web Verileri metriklerini ölçebilir ve verileri Google Analytics'e gönderebilirsiniz.

Analiz etme

Kurulum tamamlandığında BigQuery arayüzünde etkinlik verilerinin doldurulduğunu görebilir ve verileri şu şekilde sorgulayabilirsiniz:

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

Bu sorgunun sonuçlarının bir önizlemesini aşağıda görebilirsiniz:

BigQuery'de Web Verileri etkinlik verileri

Web Verileri verilerini sorgulama

Web Verileri etkinlik verilerinizi sorgulamaya başlamadan önce verilerin nasıl toplandığını anlamanız önemlidir.

Bazı durumlarda, aynı sayfada aynı metrik için birden fazla etkinliğin alınabileceği en önemli noktadır. Bu durum, metrik değeri değişirse ve güncellenmiş bir değer bildirilirse (CLS'de yaygın bir durumdur) görülebilir.

Web Verileri 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'i, metrik başına benzersiz bir kimlik göndermeyi içerir. Böylece, her metrik kimliği için sonuçlarınızı yalnızca son alınan değerle sınırlandırmak için 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', 'FID', '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 başvurulan diğer tüm sorguların bu alt sorgu ile başlayacağını unutmayın.

Sonraki birkaç bölümde, çalıştırmak isteyebileceğiniz yaygın Web Verileri sorgularına ilişkin birkaç örnek gösterilmektedir.

Örnek sorgular

Tüm site genelinde% 75'lik dilimde (p75) LCP, FID 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', 'FID', '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 doğru 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', 'FID', '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', 'FID', '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', 'FID', '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

Yukarıdaki sorgular, Web Verileri metrik verilerinin nasıl sorgulanacağını gösterir. Bu, mevcut performansınızı ve zaman içindeki trendini anlamanıza yardımcı olur. Peki performansınız beklediğinizden kötüyse ve neden olduğundan emin değilseniz ne yapabilirsiniz?

İşlem yapıp sorunları çözemiyorsanız puanlarınızın ne olduğunu bilmek işe yaramaz.

Alanda hata ayıklama performansı bölümünde 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öründüğünü görmeniz gerekir.

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.

Örnek sorgular

CLS'ye katkıda bulunan en önemli öğ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 değişikliğindeki en büyük öğeyi temsil eder. Hiçbir öğe kaymadıysa debug_target değeri null olur.

Aşağıdaki sorgu, sayfaları CLS'lerine göre 75. yüzdelik dilimde, debug_target bazında gruplandırarak en kötünden 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', 'FID', '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 katkıda bulunan en başarılı öğeler için sorgu sonucu

Sayfada hangi öğelerin kaydığını bilmek, sorunun temel nedenini belirleyip düzeltmeyi çok daha kolay hale getirecektir.

Burada rapor edilen öğelerin, sayfalarınızda yerel olarak hata ayıklarken gördüğünüz öğelerin aynı olmayabileceğini unutmayın. Bu nedenle, her şeyden önce bu verilerin yakalanması çok önemlidir. Sorun olduğunun farkında olmadığınız şeyleri düzeltmek çok zordur!

Diğer metriklerde hata ayıkla

Yukarıdaki sorgu, CLS metriğinin sonuçlarını gösterir. Ancak LCP ve FID için hata ayıklama hedefleri hakkında rapor oluştururken tam olarak aynı teknik kullanılabilir. Hata ayıklamak için where ifadesini ilgili metrikle değiştirmeniz yeterlidir:

WHERE metric_name = 'CLS'
WHERE metric_name = 'LCP'

Önemli Web Verileri metriklerinin her birine ait hata ayıklama bilgilerinin nasıl toplanıp gönderileceği ile ilgili talimatlar için yine Alanda performansta hata ayıklama bölümüne bakabilirsiniz.

Görselleştirme

Yalnızca sorgu sonuçlarına bakarak detaylı bilgi almak zor olabilir. Örneğin, aşağıdaki sorguda veri kümesinde LCP'nin günlük 75. yüzdelik dilim değerleri listelenmektedir.

# 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', 'FID', '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 eğilimleri veya aykırı değerleri belirlemek zordur.

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

Bu tür durumlarda verileri görselleştirmek, analizleri daha hızlı elde etmenize yardımcı olabilir.

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

BigQuery, sorgu sonuçlarını Data Studio aracılığıyla hızla görselleştirmenizi sağlar. Looker Studio, kullanımı ücretsiz olan bir veri görselleştirme ve kontrol paneli oluşturma 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şfedin düğmesini tıklayın ve Looker Studio ile keşfet'i seçin.

BigQuery'de Looker Studio ile keşfedin seçeneği

Bu işlem, Keşif görünümünde BigQuery'den Looker Studio'ya doğrudan bağlantı oluşturur. Bu görünümde, görselleştirmek istediğiniz alanları seçebilir, grafik türlerini belirleyebilir, filtreleri ayarlayabilir ve hızlı görsel analiz için anlık grafikler oluşturabilirsiniz. LCP değerlerinin zaman içindeki eğilimini görmek için yukarıdaki sorgu sonuçlarından şu çizgi grafiği oluşturabilirsiniz:

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

BigQuery ve Looker Studio arasındaki bu doğrudan bağlantı sayesinde herhangi bir sorgudan hızlı grafikler oluşturabilir ve görsel analizler yapabilirsiniz. Bununla birlikte, 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 panelinde birkaç grafiğe bakmak isteyebilirsiniz. Kullanışlı bir kontrol paneline sahip olduğunuzda, metriklerinizi her analiz etmek istediğinizde sorgu yazmanız ve grafikleri manuel olarak oluşturmanız gerekmez.

Yerel BigQuery bağlayıcısını kullanarak Looker Studio'da kontrol paneli oluşturabilirsiniz. Bunun için datastudio.google.com adresine gidin, yeni bir veri kaynağı oluşturun, BigQuery bağlayıcısını ve üzerinde ç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ır

Yukarıda açıklandığı gibi Web Verileri etkinlik verilerinin kontrol panellerini oluştururken, doğrudan Google Analytics 4 dışa aktarma veri kümesini kullanmak verimli değildir. GA4 verilerinin yapısı ve Web Verileri metrikleri için gerekli ön işleme nedeniyle, sorgunuzun bazı bölümleri birden çok kez çalışır. Bu durum iki soruna neden olur: kontrol paneli performansı ve BigQuery maliyetleri.

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

Aşağıdaki komut dosyası, BigQuery verilerinizi (kaynak tablo) önceden işler ve gerçekleştirilmiş 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ımlamak isteyebilirsiniz.

# 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', 'FID', '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 gerçekleştirilmiş veri kümesinin birçok avantajı vardır:

  • Veri yapısı sadeleştirildi ve sorgulanması daha kolay.
  • Yalnızca orijinal GA4 veri kümesindeki Web Verileri etkinliklerini saklar.
  • Oturum kimliği, kullanıcı türü (yeni - geri gelen) ve oturum etkileşimi bilgileri doğrudan sütunlarda gösterilir.
  • Tablo tarihe göre partitioned 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, aynı sorguyu tekrarlama maliyetlerini azaltır.
  • BigQuery BI motorunu kullanıyorsanız bu tabloda optimize edilmiş SQL işlevlerini ve operatörlerini çalıştırabilirsiniz.

Bu gerçekleştirilmiş tabloyu doğrudan BigQuery kullanıcı arayüzünden sorgulayabilir veya BigQuery bağlayıcısıyla Looker Studio'da kullanabilirsiniz.

Web Verileri Bağlayıcısı'nı kullanma

Sıfırdan kontrol paneli oluşturmak zaman alıcı olduğundan, sizin için şablon gösterge tablosu oluşturacak paketlenmiş bir çözüm geliştirdik. Öncelikle yukarıdaki sorguyu kullanarak Web Verileri tablonuzu hayata geçirdiğinizden emin olun. Ardından şu bağlantıyı kullanarak Looker Studio için Web Verileri bağlayıcısına erişin: goo.gle/web-vitals-connector

Bir defalık yetkilendirme sağladıktan sonra aşağıdaki yapılandırma ekranını görürsünüz:

Web Verileri Bağlayıcısı yetkilendirme ekranı

Gerçekleştirilmiş BigQuery tablosu kimliğini (ör. hedef tablo) ve BigQuery faturalandırma projesi kimliğinizi sağlayın. Bağlan'ı tıkladıktan sonra Looker Studio yeni bir şablonlu kontrol paneli oluşturur ve verilerinizi bununla 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 çok gösterge tablosu oluşturmak istemediğiniz sürece bağlayıcı bağlantısını tekrar ziyaret etmeniz gerekmez.

Kontrol panelinde gezinirken Web Verileri metriklerinin günlük trendlerinin yanı sıra web sitenizle ilgili bazı kullanım bilgilerini (ör. kullanıcılar ve oturumlar) Özet sekmesinde görebilirsiniz.

Kullanıcı Analizi sekmesinde bir metrik seçip ardından metrik yüzdesinin yanı sıra farklı kullanım ve iş 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. Buradan, genel bakışı görmek için bir metrik seçebilirsiniz. Ancak, tüm sayfa yollarının y ekseninde yüzdelik değere sahip dağılım haritasını ve x ekseninde kayıt sayısını da görürsünüz. Dağılım haritası, beklenenden daha düşük metrik değerlerine sahip 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 sorun alanını daha ayrıntılı bir şekilde inceleyebilirsiniz.

Gelir Analizi sekmesi, işletme ve performans metriklerinizi 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 gelir ile kullanıcı deneyimini karşılaştırabilirsiniz .

İleri düzey kullanım

Veri kümesiyle ilgili bilgi edindikçe kontrol panelini düzenleyebilir, 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üncellenen verileri almak için BigQuery'de planlanmış sorgu oluşturun. Yukarıda çalıştırdığımız gerçekleştirme sorgusu, yalnızca verilerinizin anlık görüntüsünü alır. Kontrol panelinizin yeni verilerle güncel kalmasını istiyorsanız her gün çalışacak planlı bir sorgu çalıştırabilir ve gerçekleştirilmiş tablonuzu yeni verilerle ekleyebilirsiniz.
  • İşletme analizleri için birinci taraf verilerini (ör. CRM) birleştirin. Gerçekleştirilmiş tabloda, user_id değerini ayrı bir sütun olarak ekleyebilirsiniz. Bu şekilde birinci taraf verilerinizi birleştirebilirsiniz. Birinci taraf verileriniz zaten BigQuery'de değilse verileri yükleyebilir veya birleştirilmiş veri kaynağı kullanabilirsiniz.
  • Sitenizi veya uygulama sürümünüzü, Google Analytics'e gönderdiğiniz verilerde parametre olarak raporlayın ve gerçekleştirilmiş tabloya sütun olarak ekleyin. Ardından, sürüm değişikliklerinin performansı etkilediğini daha kolay görmek için bu sürüm verilerini grafiklerinize boyut olarak ekleyebilirsiniz.
  • Doğrudan sorgu veya kontrol paneli üzerinden veri kümesinin önemli ölçüde yoğun şekilde kullanılmasını bekliyorsanız BigQuery BI Engine'in ücretli sürümünü kullanmayı deneyebilirsiniz.

Özet

Bu yayın, sahada toplanan gerçek kullanıcı verileriyle performansı ölçmek ve hata ayıklamak için Google Analytics 4 ve BigQuery'yi nasıl kullanacağınızla ilgili temel bilgileri içeriyordu. Ayrıca, verilerin görselleştirilmesini mümkün olduğunca kolaylaştırmak için Looker Studio'yu ve Web Verileri Bağlayıcısı'nı kullanarak otomatik raporların ve kontrol panellerinin nasıl oluşturulacağı da açıklandı.

Bu gönderiden çıkarılacak bazı temel fikirler:

  • Performansı gerçek kullanıcı verileriyle ölçmek, sitenizi anlamak, hata ayıklamak ve optimize etmek için çok önemlidir.
  • Performans metrikleriniz ve işletme metrikleriniz aynı sistemdeyse daha ayrıntılı analizler elde edebilirsiniz. Google Analytics ve BigQuery bunu mümkün kılar.
  • Ham Google Analytics verilerini BigQuery Export, muhtemelen bildiğiniz bir sorgu dilini kullanarak ayrıntılı ve özel analiz için sınırsız potansiyel sunar.
  • Google, raporlarınızı tam olarak istediğiniz şekilde oluşturma özgürlüğü sunan Looker Studio gibi bir dizi API ve görselleştirme aracına sahiptir.