Leistung mit Google Analytics 4 und BigQuery messen und Fehler beheben

Hier erfahren Sie, wie Sie Web Vitals-Daten an Google Analytics 4-Properties senden und die Daten zur Analyse in BigQuery und Looker Studio exportieren.

Google bietet eine Reihe von Tools – die Suche Console, PageSpeed Statistiken (PSI) die Chrome-Nutzererfahrung Melden (CrUX), mit dem Entwickler sehen können, wie ihre Websites im Vergleich zum Core Web Vitalparameter für ihre tatsächlichen Nutzer in der ein.

Diese Tools sind großartig, da sie Ihnen einen umfassenden Überblick über die Leistung Ihrer Website echte Nutzerleistung zu erzielen. Für die Nutzung ist keinerlei Einrichtung erforderlich.

Es gibt jedoch einige wichtige Gründe, warum Sie sich nicht auf diese um die Leistung Ihrer Website zu messen:

  • In UX-basierten Tools werden Daten entweder nach monatlichen oder vorherigen 28 Tagen erfasst. Sie müssen also lange warten, nachdem Sie Änderungen vorgenommen haben, bevor Sie die Ergebnisse sehen können.
  • Bei CrUX-basierten Tools kann nur eine begrenzte Anzahl von Dimensionen segmentiert werden, z. B. Land, Verbindungstyp und Gerätekategorie (Computer oder Mobilgerät) aus. Sie können nicht die Daten nach unternehmensspezifischen Dimensionen segmentieren (z. B. aktive Nutzer, Nutzer in einer bestimmten Testgruppe usw.).
  • CrUX-basierte Tools geben Aufschluss über die Leistung Ihrer Leistung, aber sie können nichts sagen. Warum? Mit Analysetools können Sie zusätzliche Daten senden, um und Probleme zu beheben.

Daher empfehlen wir allen Websiteinhabern, die Core Web Vitals-Messwerte im Blick zu behalten. mit dem vorhandenen Analysetool. In diesem Beitrag erfahren Sie, wie Sie kostenlose Tools von Google genau das erreichen.

Sobald Sie alles eingerichtet haben, können Sie Dashboards wie diese erstellen:

Screenshot des Web Vitals-Connector-Berichts

Screenshot des Web Vitals-Connector-Berichts

Eine visuelle Übersicht der hier beschriebenen Schritte finden Sie in unserem Talk von der Google I/O 21:

Messen

Bisher war die Leistungsmessung mit Google Analytics benutzerdefinierte Messwerte, aber es gibt sind einige neue Funktionen in Google Analytics 4 (GA4), die von Entwicklern besonders begeistert sein sollten.

Die Weboberfläche von Google Analytics verfügt zwar über leistungsstarke Analysetools, Die Leistungsfähigkeit und Flexibilität des Zugriffs auf Rohdaten zu Rohdaten über Abfragen sind kaum zu übertreffen. Sprache, die Sie wahrscheinlich schon kennen.

Um Core Web Vitals mit Google Analytics 4 und BigQuery zu messen, müssen Sie drei Dinge tun:

  1. Google Analytics 4-Property erstellen Property und ein BigQuery-Projekt.
  2. Aktivieren Sie BigQuery Export. Google Analytics-Property konfigurieren, sodass alle erhaltenen Daten automatisch in Ihre BigQuery-Projekttabellen eingetragen.
  3. JavaScript für web-vitals hinzufügen Bibliothek auf Ihre Website, damit Sie die Core Web Vitals-Messwerte und die Daten an Google Analytics 4, einschließlich der Attributionsdaten.

Analysieren

Sobald die Einrichtung abgeschlossen ist, sollten in BigQuery Ereignisdaten angezeigt werden. und Sie sollten die Daten wie folgt abfragen können:

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

Hier sehen Sie eine Vorschau der Ergebnisse dieser Abfrage:

Web Vitals-Ereignisdaten in BigQuery

Web Vitals-Daten abfragen

Bevor Sie mit der Abfrage Ihrer Web Vitals-Ereignisdaten beginnen, sollten Sie Folgendes tun: wie die Daten aggregiert werden.

Wichtig ist, dass Sie verstehen, dass in einigen Fällen mehrere Ereignisse kann sein erhalten für denselben Messwert auf derselben Seite. Das kann passieren, wenn der Messwert und ein aktualisierter Wert wird gemeldet (häufig bei CLS).

Bei Web Vitals-Ereignissen ist der zuletzt gesendete Wert immer der genaueste. bevor Sie eine Analyse durchführen, sollten Sie nur nach diesen Werten filtern. Das von der Webvitals-JavaScript-Bibliothek bereitgestellte Code-Snippet, an das Daten gesendet werden In Google Analytics 4 wird pro Messwert eine eindeutige ID gesendet, damit Sie die Methode folgende Abfrage, um Ihre Ergebnisse auf den zuletzt empfangenen Wert für jede Messwert-ID:

# 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
)

Alle anderen Abfragen, auf die in diesem Beitrag verwiesen wird, beginnen mit diesem Unterabfrage.

Beispielabfragen

In den nächsten Abschnitten finden Sie einige Beispiele für häufige Web Vitals-Anfragen, die Sie vielleicht die Sie ausführen möchten.

LCP, INP und CLS im 75 %-Perzentil (p75) für die gesamte Website

# 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

Alle einzelnen LCP-Werte vom höchsten zum niedrigsten Wert

# 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

Top-10-Seiten mit dem schlechtesten CLS (S. 75)

# 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

Fehlerbehebung

Die vorherigen Abfragen zeigen, wie die Web Vitals-Messwertdaten abgefragt werden können. Das ist hilfreich, um Ihre aktuelle Leistung und deren Entwicklung im Zeitverlauf zu verstehen. Aber Was können Sie tun, wenn Ihre Leistung schlechter als erwartet ist, Sie sich aber nicht sicher sind Warum?

Es ist nicht hilfreich zu wissen, was deine Werte sind, wenn du nichts unternehmen kannst und die Probleme zu beheben.

Unter Fehler in der Leistung beheben erfahren Sie, wie können Sie mit Ihren Analysedaten zusätzliche Debug-Informationen senden. Wenn Sie Wenn Sie der Anleitung in diesem Beitrag folgen, sollten Sie das Debugging-Tool sehen, werden auch in BigQuery angezeigt.

Beispielabfragen

In den folgenden Abfragen wird gezeigt, wie Sie mit dem Ereignisparameter debug_target die Ursache von Leistungsproblemen zu finden.

Top-Elemente, die zum CLS beitragen

debug_target ist ein CSS-Selektorstring, der dem Element auf die Seite, die für den Messwert am relevantesten ist.

Bei CLS steht debug_target für das größte Element vom größten Layout Shifts, die zum CLS-Wert beigetragen haben. Wenn keine Elemente verschoben werden, Der Wert von „debug_target“ beträgt null.

Mit der folgenden Abfrage werden die Seiten anhand ihres CLS am 75. Perzentil, gruppiert nach debug_target:

# 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

Abfrageergebnis für die wichtigsten Elemente, die zu CLS beitragen

Wenn Sie wissen, welche Elemente auf der Seite sich verschieben, ist es wesentlich einfacher, um die Grundursache des Problems zu identifizieren und zu beheben.

Die hier aufgeführten Elemente sind möglicherweise nicht dieselben Elemente, die verändern sich bei der lokalen Fehlerbehebung für eure Seiten. diese Daten überhaupt zu erfassen. Es ist sehr schwierig, Probleme zu beheben. Ihnen nicht bewusst ist, dass es sich dabei um Probleme handelt.

Fehler bei anderen Messwerten beheben

Die vorherige Abfrage zeigt die Ergebnisse für den CLS-Messwert an, aber genau diese können Sie Berichte zu den Debugging-Zielen für LCP und INP erstellen. Nur Ersetzen Sie die "where"-Klausel durch den entsprechenden Messwert für die Fehlerbehebung:

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

Weitere Informationen hierzu finden Sie im Abschnitt Fehler an der Leistung beheben . Hier finden Sie eine Anleitung dazu, wie Sie Debug-Informationen für jeden Core Web Vitals-Messwert senden.

Visualisieren

Es kann schwierig sein, allein anhand der Abfrageergebnisse Informationen zu gewinnen allein. Die folgende Abfrage listet beispielsweise tägliche Werte für das 75. Perzentil für LCP im Dataset.

# 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

Anhand dieser Abfrageergebnisse lassen sich Trends oder Ausreißer nur schwer erkennen, beim Betrachten der Daten.

Abfrageergebnisse für den täglichen Messwertwert

In solchen Fällen können Sie durch die Visualisierung der Daten schneller Erkenntnisse gewinnen.

Abfrageergebnisse in Looker Studio visualisieren

BigQuery bietet eine schnelle Möglichkeit, Abfrageergebnisse über „Data“ zu visualisieren Studio Looker Studio ist eine Datenvisualisierung, und Dashboarding-Tool ist. Um Ihre Abfrageergebnisse zu visualisieren, Klicken Sie nach dem Ausführen der Abfrage in der BigQuery-Benutzeroberfläche auf die Schaltfläche Explore Data (Daten auswerten). Wählen Sie Mit Looker Studio auswerten aus.

Option „Mit Looker Studio auswerten“ in BigQuery

Dadurch wird eine direkte Verknüpfung von BigQuery zu Looker Studio im Explore erstellt Ansicht. In dieser Ansicht können Sie die Felder auswählen, die Sie visualisieren möchten, Diagrammtypen, Einrichtung von Filtern und Erstellen von Ad-hoc-Diagrammen für schnelle visuelle Analysen. Aus den vorherigen Abfrageergebnissen können Sie dieses Liniendiagramm erstellen, um den Trend LCP-Werte im Zeitverlauf:

Liniendiagramm der täglichen LCP-Werte in Looker Studio

Durch diese direkte Verknüpfung zwischen BigQuery und Looker Studio können Sie aus allen Ihren Abfragen Diagramme erstellen und visuelle Analysen durchführen. Wenn Sie jedoch oder zusätzliche Analysen durchführen möchten, können Sie sich interaktives Dashboard, mit dem Sie einen ganzheitlicheren Überblick erhalten oder die Daten aufschlüsseln können, in die Daten einfließen lassen. Ein praktisches Dashboard bedeutet, dass Sie keine Abfragen schreiben müssen, und Diagramme manuell generieren, wenn Sie Ihre Messwerte analysieren möchten.

Mit dem nativen BigQuery-Tool können Sie ein Dashboard in Looker Studio Connector Gehen Sie dazu wie folgt vor: datastudio.google.com aufrufen, ein neues wählen Sie den BigQuery-Connector und dann das Dataset aus, Zusammenarbeit mit:

Nativen BigQuery-Connector in Looker Studio verwenden

Web Vitals-Daten erfassen

Wenn Sie wie zuvor beschrieben Dashboards mit den Web Vitals-Ereignisdaten erstellen, sind Es ist nicht effizient, das Export-Dataset von Google Analytics 4 direkt zu verwenden. Aufgrund der Struktur der GA4-Daten und die für die Web Vitals erforderliche Vorverarbeitung werden Teile der Abfrage mehrmals ausgeführt. Dadurch entstehen zwei Probleme: Dashboard-Leistung und BigQuery-Kosten.

Mit der BigQuery-Sandbox kostenlos zur Verfügung. Mit der kostenlose Nutzungsstufe, die Das erste Terabyte (1 TB) an verarbeiteten Abfragedaten pro Monat ist kostenlos. Für die Analysemethoden die in diesem Post besprochen wurden, es sei denn, Sie verwenden ein sehr großes Dataset oder das Dataset regelmäßig intensiv abfragen, sollten Sie in der Lage sein, des kostenlosen Limits jeden Monat. Wenn Sie jedoch eine stark frequentierte Website haben und Überwachen Sie regelmäßig verschiedene Messwerte über ein schnelles interaktives Dashboard. Ihre Web Vitals-Daten vorzuverarbeiten und zu materialisieren sowie BigQuery-Effizienzfeatures wie Partitionierung, Clustering und Caching

Mit dem folgenden Skript werden Ihre BigQuery-Daten (Quelltabelle) vorverarbeitet und eine materialisierte Tabelle (Zieltabelle) erstellen. Wenn Sie diese Abfrage für Ihre eigene Dataset ist, können Sie auch einen Zeitraum für die Quelltabelle festlegen, die verarbeitete Datenmenge zu reduzieren.

# 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');

Dieses materialisierte Dataset hat mehrere Vorteile:

  • Die Datenstruktur ist vereinfacht und lässt sich leichter abfragen.
  • Es werden nur die Web Vitals-Ereignisse aus dem ursprünglichen GA4-Dataset beibehalten.
  • Sitzungs-ID, Nutzertyp (neu oder wiederkehrend) und Informationen zur Sitzungsinteraktion direkt in Spalten verfügbar.
  • Die Tabelle ist partitioniert nach und geclustert nach Messwertnamen. Dies reduziert normalerweise die verarbeitete Datenmenge pro Abfrage.
  • Da Sie zum Abfragen dieser Tabelle keine Platzhalter verwenden müssen, können Abfrageergebnisse bis zu 24 Stunden im Cache gespeichert. Das senkt die Kosten für wiederholte Abfrage.
  • Wenn Sie die BigQuery BI-Engine verwenden, können Sie optimierte SQL-Funktionen und .

Sie können diese materialisierte Tabelle direkt über die BigQuery-UI abfragen oder sie verwenden in Looker Studio mit dem BigQuery-Connector.

Web Vitals-Connector verwenden

Da das Erstellen eines Dashboards von Grund auf zeitaufwändig ist, haben wir ein gepacktes Dashboard Lösung, die eine Vorlagen-Dashboard-Vorlage für Sie erstellt. Stellen Sie zunächst sicher, Ihre Web Vitals-Tabelle mithilfe der vorherigen Abfrage materialisiert haben. Rufen Sie dann das Web Vitals-Connector für Looker Studio über diesen Link: goo.gle/web-vitals-connector

Nach der einmaligen Autorisierung sollten Sie Folgendes sehen: Konfigurationsbildschirm:

Bildschirm für die Web Vitals-Connector-Autorisierung

Geben Sie die ID der materialisierten BigQuery-Tabelle (d.h. die Zieltabelle) und Ihre ID des BigQuery-Abrechnungsprojekts. Nachdem Sie auf „Verbinden“ geklickt haben, wird in Looker Studio ein Dashboard erstellen und Ihre Daten damit verknüpfen. Sie können Daten bearbeiten, und das Dashboard nach Belieben teilen. Wenn Sie ein Dashboard einmal erstellen, müssen Sie den Connector-Link erneut aufrufen, es sei denn, Sie möchten mehrere Dashboards aus verschiedenen Datasets.

Im Dashboard können Sie die täglichen Trends der Web Vitals sehen. und einige Nutzungsdaten für Ihre Website wie Nutzer und Sitzungen in auf dem Tab Zusammenfassung.

Auf dem Tab Nutzeranalyse können Sie einen Messwert auswählen und dann eine Aufschlüsselung des Messwertperzentils und der Nutzerzahl nach Nutzung und Unternehmen Messwerte.

Auf dem Tab Seitenpfadanalyse lassen sich Problembereiche Website. Hier können Sie einen Messwert auswählen, um die Übersicht aufzurufen. Sie sehen aber auch die Streukarte aller Seitenpfade mit dem Perzentilwert auf der Y-Achse und Datensatz auf der x-Achse. Mithilfe der Streukarte lassen sich Seiten mit weniger als die erwarteten Messwerte. Wenn Sie die Seiten mithilfe des Streudiagramms Seitenpfad können Sie den Problembereich weiter aufschlüsseln, indem Sie Sehen Sie sich die Tabelle Debug-Ziel an.

Der Tab Umsatzanalyse ist ein Beispiel dafür, wie du dein Unternehmen im Blick behalten kannst. und Leistungsmesswerte an einem zentralen Ort. In diesem Abschnitt werden alle Sitzungen der Nutzer einen Kauf getätigt hat. Sie können den erzielten Umsatz mit der Nutzerfreundlichkeit während einer bestimmten Sitzung .

Fortgeschrittene Nutzung

Wenn Sie mit dem Dataset vertrauter werden, können Sie das Dashboard bearbeiten und eigene Diagramme erstellen, um ausführlichere und gezieltere Analysen zu ermöglichen. Um das Dashboard können Sie die folgenden Schritte ausführen:

  • Richten Sie eine geplante Abfrage in BigQuery ein, um aktualisierte Daten abzurufen. Die Materialisierung der zuvor ausgeführten Abfrage nur einen Snapshot Ihrer Daten. Wenn Sie Ihr Dashboard mit neuen Daten auf dem neuesten Stand halten möchten, können Sie die täglich ausgeführt wird, und hängt Ihre materialisierte Tabelle mit dem neuen Daten.
  • Führen Sie selbst erhobene Daten (z.B. CRM) zusammen, um geschäftsrelevante Informationen zu erhalten. In der materialisierten können Sie user_id als separate Spalte hinzufügen. So können Sie an Ihrem selbst erhobenen Daten. Wenn sich Ihre selbst erhobenen Daten noch nicht in BigQuery befinden, die Daten laden oder föderierte Daten Quelle.
  • Ihre Website- oder App-Version als Parameter in den Daten melden, die Sie an Google senden Analytics und fügen Sie sie als Spalte in der materialisierten Tabelle hinzu. Dann können Sie diese Versionsdaten als Dimension in Ihren Diagrammen verwenden, damit Sie Versionsänderungen sich auf die Leistung auswirken.
  • Wenn Sie eine erheblich intensive Nutzung des Datasets durch direkte oder Dashboard abrufen möchten, können Sie die kostenpflichtige Version von BigQuery BI Suchmaschine

Zusammenfassung

In diesem Beitrag wurde erläutert, wie Sie mit Google Analytics 4 und BigQuery die Leistung mit realen Nutzerdaten zu messen und Fehler zu beheben. Es Außerdem wurde erläutert, wie Sie mit Looker Studio automatisierte Berichte und Dashboards erstellen. und den Web Vitals-Connector, Visualisierung der Daten so einfach wie möglich.

Hier einige wichtige Erkenntnisse aus diesem Beitrag:

  • Es ist wichtig, die Leistung anhand realer Nutzerdaten zu messen, Debugging und Optimieren Ihrer Website.
  • Sie erhalten detailliertere Informationen, wenn Ihre Leistungsmesswerte und Ihr Unternehmen Messwerte sich im selben System befinden. Dank Google Analytics und BigQuery möglich.
  • Der BigQuery-Export von Google Analytics-Rohdaten bietet Ihnen unbegrenztes Potenzial für detaillierte benutzerdefinierte Analyse mit einer Abfragesprache, die Sie wahrscheinlich bereits kennen.
  • Google bietet verschiedene APIs und Visualisierungstools wie Looker Studio, haben Sie die Freiheit, Berichte genau so zu erstellen, wie Sie es sich wünschen. entwickelt.