{"id":10099,"date":"2026-10-25T13:47:00","date_gmt":"2026-10-25T12:47:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=10099"},"modified":"2026-10-24T03:23:34","modified_gmt":"2026-10-24T01:23:34","slug":"tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/tutorials-de-digital-marketing-de\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\/","title":{"rendered":"Tutorial: GA4-Einwilligungsstatus in BigQuery und Looker Studio"},"content":{"rendered":"<p>Ein Consent-Bericht aus GA4 beantwortet eine eng umrissene Frage: Welcher Anteil der exportierten Ereignisse tr\u00e4gt welchen Einwilligungsstatus? Ein Wert von 70 Prozent f\u00fcr <code>analytics_storage = Yes<\/code> bedeutet, dass 70 von 100 erfassten Ereignissen diesen Status tragen. Daraus folgt keine Bannerzustimmung von 70 Prozent der Besucher.<\/p>\n<p>Dieses Tutorial erstellt einen t\u00e4glichen Statusbericht in BigQuery und bereitet die Z\u00e4hlwerte f\u00fcr Looker Studio auf. Analytics-Speicherung und Werbespeicherung bleiben getrennt. Unbekannte Zust\u00e4nde und fehlende Tagestabellen bleiben sichtbar. Ver\u00e4nderungen liefern einen Ausgangspunkt f\u00fcr die Fehlersuche, aber keinen Beweis f\u00fcr einen Bannerfehler oder entgangene Conversions.<\/p>\n<figure class=\"lw-diagram\"><img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/dia-10099-review-20261024.png\" width=\"1120\" height=\"580\" loading=\"lazy\" alt=\"T\u00e4gliche Exportereignisse, getrennte Analytics- und Ads-Speicherzust\u00e4nde sowie gewichtete Dashboardanteile\"><figcaption>Ereignisanteile beschreiben den Export; Bannerentscheidungen ben\u00f6tigen eine eigene Kennzahl.<\/figcaption><\/figure>\n<h2>1. Kennzahl und Voraussetzungen<\/h2>\n<p>Vorausgesetzt sind eine bestehende GA4-Verkn\u00fcpfung mit BigQuery, aktivierter t\u00e4glicher Export sowie Lese- und Abfragerechte. Consent Mode muss die vorgesehenen Standardwerte und \u00c4nderungen korrekt \u00fcbertragen. Die Verkn\u00fcpfung mit BigQuery rekonstruiert keine vergangenen Bannerentscheidungen.<\/p>\n<p>Das Ereignisschema enth\u00e4lt <code>privacy_info.analytics_storage<\/code> und <code>privacy_info.ads_storage<\/code>. Dokumentierte Werte sind <code>Yes<\/code>, <code>No<\/code> und <code>Unset<\/code>. Die Abfrage sammelt zus\u00e4tzlich Nullwerte und unerwartete Inhalte unter <code>other<\/code>. Ein nicht gesetzter Status ist keine ausdr\u00fcckliche Ablehnung. Beide Felder bilden nicht s\u00e4mtliche Consent-Mode-Einstellungen ab: Werbespeicherung unterscheidet sich von der Freigabe f\u00fcr Werbenutzerdaten und personalisierte Werbung.<\/p>\n<p>Der Nenner umfasst alle exportierten Ereignisse der ausgew\u00e4hlten Tagestabellen. Ein aktiver Besuch liefert mehr Ereignisse als ein kurzer Besuch. Der Standardwert vor einer Bannerentscheidung kann vom sp\u00e4teren Status abweichen. Bei einer grundlegenden Implementierung fehlt blockierter Verkehr in GA4. Erweiterte Implementierungen k\u00f6nnen bei verweigerter Speicherung Pings ohne Cookies senden. Browserblockaden und Erfassungsfehler verursachen weitere L\u00fccken. Eine Quote aus den vorhandenen Zeilen erg\u00e4nzt diese fehlenden Daten nicht.<\/p>\n<h2>2. Drei\u00dfig abgeschlossene Kalendertage<\/h2>\n<p>Das Beispiel verwendet <code>Europe\/Warsaw<\/code>; ma\u00dfgeblich ist die Zeitzone der GA4-Property. Projekt und Dataset ben\u00f6tigen die passenden Namen. Das Ergebnis enth\u00e4lt eine Zeile pro Tag, beginnend vor 30 Tagen bis einschlie\u00dflich gestern. Intraday-Tabellen und der laufende Tag bleiben ausgeschlossen.<\/p>\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"sql\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">SQL<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-sql\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-comment\">-- Standard SQL. Replace project\/dataset and property timezone.<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">WITH<\/span> days <span class=\"cbb-keyword\">AS<\/span> (\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">SELECT<\/span> day <span class=\"cbb-keyword\">FROM<\/span> <span class=\"cbb-keyword\">UNNEST<\/span>(<span class=\"cbb-function\">GENERATE_DATE_ARRAY<\/span>(\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-function\">DATE_SUB<\/span>(<span class=\"cbb-function\">CURRENT_DATE<\/span>(<span class=\"cbb-string\">'Europe\/Warsaw'<\/span>), <span class=\"cbb-keyword\">INTERVAL<\/span> <span class=\"cbb-number\">30<\/span> DAY),\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-function\">DATE_SUB<\/span>(<span class=\"cbb-function\">CURRENT_DATE<\/span>(<span class=\"cbb-string\">'Europe\/Warsaw'<\/span>), <span class=\"cbb-keyword\">INTERVAL<\/span> <span class=\"cbb-number\">1<\/span> DAY))) <span class=\"cbb-keyword\">AS<\/span> day\n<\/span><span class=\"cbb-line\">), available <span class=\"cbb-keyword\">AS<\/span> (\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">SELECT<\/span> table_name <span class=\"cbb-keyword\">FROM<\/span> <span class=\"cbb-variable\">`project.analytics_XXXXXXXXX.INFORMATION_SCHEMA.TABLES`<\/span>\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">WHERE<\/span> table_type = <span class=\"cbb-string\">'BASE TABLE'<\/span>\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">AND<\/span> <span class=\"cbb-function\">REGEXP_CONTAINS<\/span>(table_name, r<span class=\"cbb-string\">'^events_&#91;0-9&#93;{8}$'<\/span>)\n<\/span><span class=\"cbb-line\">), counts <span class=\"cbb-keyword\">AS<\/span> (\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">SELECT<\/span> <span class=\"cbb-function\">PARSE_DATE<\/span>(<span class=\"cbb-string\">'%Y%m%d'<\/span>, _TABLE_SUFFIX) <span class=\"cbb-keyword\">AS<\/span> day,\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-function\">COUNT<\/span>(*) <span class=\"cbb-keyword\">AS<\/span> total_events,\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-function\">COUNTIF<\/span>(privacy_info.analytics_storage = <span class=\"cbb-string\">'Yes'<\/span>) <span class=\"cbb-keyword\">AS<\/span> analytics_yes,\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-function\">COUNTIF<\/span>(privacy_info.analytics_storage = <span class=\"cbb-string\">'No'<\/span>) <span class=\"cbb-keyword\">AS<\/span> analytics_no,\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-function\">COUNTIF<\/span>(privacy_info.analytics_storage = <span class=\"cbb-string\">'Unset'<\/span>) <span class=\"cbb-keyword\">AS<\/span> analytics_unset,\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-function\">COUNTIF<\/span>(<span class=\"cbb-function\">COALESCE<\/span>(privacy_info.analytics_storage <span class=\"cbb-keyword\">NOT<\/span> <span class=\"cbb-keyword\">IN<\/span> (<span class=\"cbb-string\">'Yes'<\/span>,<span class=\"cbb-string\">'No'<\/span>,<span class=\"cbb-string\">'Unset'<\/span>), <span class=\"cbb-constant\">TRUE<\/span>)) <span class=\"cbb-keyword\">AS<\/span> analytics_other,\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-function\">COUNTIF<\/span>(privacy_info.ads_storage = <span class=\"cbb-string\">'Yes'<\/span>) <span class=\"cbb-keyword\">AS<\/span> ads_yes,\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-function\">COUNTIF<\/span>(privacy_info.ads_storage = <span class=\"cbb-string\">'No'<\/span>) <span class=\"cbb-keyword\">AS<\/span> ads_no,\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-function\">COUNTIF<\/span>(privacy_info.ads_storage = <span class=\"cbb-string\">'Unset'<\/span>) <span class=\"cbb-keyword\">AS<\/span> ads_unset,\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-function\">COUNTIF<\/span>(<span class=\"cbb-function\">COALESCE<\/span>(privacy_info.ads_storage <span class=\"cbb-keyword\">NOT<\/span> <span class=\"cbb-keyword\">IN<\/span> (<span class=\"cbb-string\">'Yes'<\/span>,<span class=\"cbb-string\">'No'<\/span>,<span class=\"cbb-string\">'Unset'<\/span>), <span class=\"cbb-constant\">TRUE<\/span>)) <span class=\"cbb-keyword\">AS<\/span> ads_other\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">FROM<\/span> <span class=\"cbb-variable\">`project.analytics_XXXXXXXXX.events_*`<\/span>\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">WHERE<\/span> _TABLE_SUFFIX <span class=\"cbb-keyword\">BETWEEN<\/span>\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-function\">FORMAT_DATE<\/span>(<span class=\"cbb-string\">'%Y%m%d'<\/span>, <span class=\"cbb-function\">DATE_SUB<\/span>(<span class=\"cbb-function\">CURRENT_DATE<\/span>(<span class=\"cbb-string\">'Europe\/Warsaw'<\/span>), <span class=\"cbb-keyword\">INTERVAL<\/span> <span class=\"cbb-number\">30<\/span> DAY))\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">AND<\/span> <span class=\"cbb-function\">FORMAT_DATE<\/span>(<span class=\"cbb-string\">'%Y%m%d'<\/span>, <span class=\"cbb-function\">DATE_SUB<\/span>(<span class=\"cbb-function\">CURRENT_DATE<\/span>(<span class=\"cbb-string\">'Europe\/Warsaw'<\/span>), <span class=\"cbb-keyword\">INTERVAL<\/span> <span class=\"cbb-number\">1<\/span> DAY))\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">GROUP<\/span> <span class=\"cbb-keyword\">BY<\/span> day\n<\/span><span class=\"cbb-line\">)\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">SELECT<\/span> d.day, a.table_name <span class=\"cbb-keyword\">IS<\/span> <span class=\"cbb-keyword\">NOT<\/span> <span class=\"cbb-constant\">NULL<\/span> <span class=\"cbb-keyword\">AS<\/span> table_present,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">IF<\/span>(a.table_name <span class=\"cbb-keyword\">IS<\/span> <span class=\"cbb-constant\">NULL<\/span>, <span class=\"cbb-constant\">NULL<\/span>, <span class=\"cbb-function\">COALESCE<\/span>(c.total_events, <span class=\"cbb-number\">0<\/span>)) <span class=\"cbb-keyword\">AS<\/span> total_events,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">IF<\/span>(a.table_name <span class=\"cbb-keyword\">IS<\/span> <span class=\"cbb-constant\">NULL<\/span>, <span class=\"cbb-constant\">NULL<\/span>, <span class=\"cbb-function\">COALESCE<\/span>(c.analytics_yes, <span class=\"cbb-number\">0<\/span>)) <span class=\"cbb-keyword\">AS<\/span> analytics_yes,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">IF<\/span>(a.table_name <span class=\"cbb-keyword\">IS<\/span> <span class=\"cbb-constant\">NULL<\/span>, <span class=\"cbb-constant\">NULL<\/span>, <span class=\"cbb-function\">COALESCE<\/span>(c.analytics_no, <span class=\"cbb-number\">0<\/span>)) <span class=\"cbb-keyword\">AS<\/span> analytics_no,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">IF<\/span>(a.table_name <span class=\"cbb-keyword\">IS<\/span> <span class=\"cbb-constant\">NULL<\/span>, <span class=\"cbb-constant\">NULL<\/span>, <span class=\"cbb-function\">COALESCE<\/span>(c.analytics_unset, <span class=\"cbb-number\">0<\/span>)) <span class=\"cbb-keyword\">AS<\/span> analytics_unset,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">IF<\/span>(a.table_name <span class=\"cbb-keyword\">IS<\/span> <span class=\"cbb-constant\">NULL<\/span>, <span class=\"cbb-constant\">NULL<\/span>, <span class=\"cbb-function\">COALESCE<\/span>(c.analytics_other, <span class=\"cbb-number\">0<\/span>)) <span class=\"cbb-keyword\">AS<\/span> analytics_other,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">IF<\/span>(a.table_name <span class=\"cbb-keyword\">IS<\/span> <span class=\"cbb-constant\">NULL<\/span>, <span class=\"cbb-constant\">NULL<\/span>, <span class=\"cbb-function\">COALESCE<\/span>(c.ads_yes, <span class=\"cbb-number\">0<\/span>)) <span class=\"cbb-keyword\">AS<\/span> ads_yes,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">IF<\/span>(a.table_name <span class=\"cbb-keyword\">IS<\/span> <span class=\"cbb-constant\">NULL<\/span>, <span class=\"cbb-constant\">NULL<\/span>, <span class=\"cbb-function\">COALESCE<\/span>(c.ads_no, <span class=\"cbb-number\">0<\/span>)) <span class=\"cbb-keyword\">AS<\/span> ads_no,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">IF<\/span>(a.table_name <span class=\"cbb-keyword\">IS<\/span> <span class=\"cbb-constant\">NULL<\/span>, <span class=\"cbb-constant\">NULL<\/span>, <span class=\"cbb-function\">COALESCE<\/span>(c.ads_unset, <span class=\"cbb-number\">0<\/span>)) <span class=\"cbb-keyword\">AS<\/span> ads_unset,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">IF<\/span>(a.table_name <span class=\"cbb-keyword\">IS<\/span> <span class=\"cbb-constant\">NULL<\/span>, <span class=\"cbb-constant\">NULL<\/span>, <span class=\"cbb-function\">COALESCE<\/span>(c.ads_other, <span class=\"cbb-number\">0<\/span>)) <span class=\"cbb-keyword\">AS<\/span> ads_other\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">FROM<\/span> days <span class=\"cbb-keyword\">AS<\/span> d\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">LEFT<\/span> <span class=\"cbb-keyword\">JOIN<\/span> available <span class=\"cbb-keyword\">AS<\/span> a\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">ON<\/span> a.table_name = <span class=\"cbb-function\">CONCAT<\/span>(<span class=\"cbb-string\">'events_'<\/span>, <span class=\"cbb-function\">FORMAT_DATE<\/span>(<span class=\"cbb-string\">'%Y%m%d'<\/span>, d.day))\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">LEFT<\/span> <span class=\"cbb-keyword\">JOIN<\/span> counts <span class=\"cbb-keyword\">AS<\/span> c <span class=\"cbb-keyword\">USING<\/span> (day)\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">ORDER<\/span> <span class=\"cbb-keyword\">BY<\/span> day;<\/span><\/code><\/pre><\/figure>\n<p><code>table_present = false<\/code> kennzeichnet eine fehlende t\u00e4gliche Basistabelle. Die Z\u00e4hlwerte bleiben dann <code>NULL<\/code>. Eine vorhandene leere Tabelle ergibt Null Ereignisse. Weder eine vorhandene Tabelle noch ein Nullwert belegen eine vollst\u00e4ndige Erfassung. Die Abfrage setzt mindestens eine passende Exporttabelle und kompatible Schemas voraus. Zugriffs- und Schemafehler bleiben Fehler und werden nicht durch scheinbare Nullwerte verdeckt.<\/p>\n<p>Der numerische Suffixfilter begrenzt die ausgew\u00e4hlten Tagestabellen. Vor der zeitgesteuerten Ausf\u00fchrung dienen ein BigQuery-Dryrun und ein Limit f\u00fcr abrechenbare Bytes zur Kostenkontrolle. Tagestabellen k\u00f6nnen bis zu drei Tage nach dem Ereignisdatum versp\u00e4tete Ereignisse erhalten; aktuelle Ergebnisse bleiben vorl\u00e4ufig. Eine geplante Ergebnistabelle braucht einen Austausch oder ein Upsert der betroffenen Tage. T\u00e4gliches Anh\u00e4ngen des gesamten 30-Tage-Ergebnisses vervielfacht die Z\u00e4hlwerte. Eine kleine Berichtstabelle reduziert wiederholte Rohdatenabfragen, garantiert aber keinen festen Rechnungsbetrag.<\/p>\n<h2>3. Dashboard ohne irref\u00fchrenden Trichter<\/h2>\n<p>Looker Studio unterst\u00fctzt native Trichterdiagramme. F\u00fcr die Folge \u201ealle Ereignisse \u2192 Analytics Yes \u2192 Ads Yes\u201c passt diese Darstellung trotzdem nicht: Die beiden letzten Mengen m\u00fcssen keine Teilmengen voneinander sein. Getrennte Balken oder Zeitreihen zeigen beide Speicherkategorien ohne erfundene Abfolge.<\/p>\n<p>Die Berichtstabelle wird \u00fcber den BigQuery-Connector verbunden. <code>day<\/code> dient als Datumsdimension; Z\u00e4hlfelder erhalten die Aggregation Summe. Zwei Kennzahlenkarten berechnen die Ereignisanteile aus den Summen:<\/p>\n<pre><code>CASE WHEN SUM(total_events) &gt; 0 THEN SUM(analytics_yes) \/ SUM(total_events) ELSE NULL END<\/code><\/pre>\n<p>Die Felder erhalten das Prozentformat, ohne zus\u00e4tzliche Multiplikation mit 100. Die entsprechende Ads-Formel verwendet <code>ads_yes<\/code>. Bei einem Nenner von null bleibt der Wert leer. Eine t\u00e4gliche Zeitreihe verwendet dieselbe Berechnung mit Gruppierung nach <code>day<\/code>. Eine zus\u00e4tzliche Tabelle zeigt Yes, No, Unset und Other je Speicherkategorie, die Ereigniszahl und <code>table_present<\/code>. Fehlende Tage bleiben als L\u00fccken erkennbar.<\/p>\n<p>Zeitraumvergleiche verwenden gleich lange Fenster und weisen fehlende Tage neben dem Ergebnis aus. Ein Mittelwert der Tagesprozente gewichtet kleine und gro\u00dfe Tage gleich: 1 von 1 Ereignissen und 0 von 99 Ereignissen erg\u00e4ben im Mittel 50 Prozent. Der korrekte gemeinsame Ereignisanteil betr\u00e4gt dagegen 1 Prozent. Fehlende Tabellen d\u00fcrfen nicht unbemerkt aus einem Zeitraumvergleich verschwinden.<\/p>\n<h2>4. Interpretation und Grenzen<\/h2>\n<p>Ver\u00e4nderungen k\u00f6nnen auf den Ereignismix, Zugriffsquellen, Standardwerte, Bannerkonfiguration, Tag-Reihenfolge oder Exportprobleme zur\u00fcckgehen. Kontrollierte Pr\u00fcfungen des Banners und der Tag-Anfragen, erg\u00e4nzt um \u00c4nderungshistorie und Exportkontrolle, helfen bei der Eingrenzung. Ein gleichzeitiger R\u00fcckgang von Ereignisanteil und Gesamtvolumen belegt keine Ursache.<\/p>\n<p>Der Bericht zeigt nicht, ob die GA4-Verhaltensmodellierung verf\u00fcgbar oder aktiv ist. Googles Kriterien ber\u00fccksichtigen absolute Ereignis- und Nutzerzahlen \u00fcber mehrere Tage, die Implementierung sowie weitere Anforderungen an die Modellqualit\u00e4t. Ein Ereignisprozentsatz pr\u00fcft diese Voraussetzungen nicht. Verhaltensmodellierung und Conversion-Modellierung beantworten zudem unterschiedliche Fragen.<\/p>\n<p>Das Ergebnis enth\u00e4lt Tagesaggregate ohne Nutzerkennungen. Zugriffsbeschr\u00e4nkungen und ein sorgf\u00e4ltiger Umgang mit kleinen Gruppen bleiben erforderlich; Aggregation garantiert keine automatische Anonymit\u00e4t. Eine entscheidungsbezogene Zustimmungsquote ben\u00f6tigt eine separat definierte CMP-Kennzahl, einschlie\u00dflich des Umgangs mit wiederholten Abfragen, ge\u00e4nderten Entscheidungen und unbeantworteten Bannern.<\/p>\n<div class=\"lw-faq\"><h2>Fragen und Antworten<\/h2>\n<h3>Belegt ein Anteil nahe 100 Prozent einen erfolgreichen Banner?<\/h3><p>Nein. Wenn nur zugestimmter Verkehr GA4 erreicht, k\u00f6nnen fast alle erfassten Ereignisse den Status Yes tragen, w\u00e4hrend zahlreiche abgelehnte Besuche fehlen. Der Bericht beschreibt verf\u00fcgbare Ereignisdaten statt s\u00e4mtlicher Bannerinteraktionen.<\/p>\n<h3>Geh\u00f6rt Unset in die Kategorie No?<\/h3><p>Nein. Getrennte Kategorien f\u00fcr Unset sowie fehlende oder unerwartete Werte machen Konfigurationsl\u00fccken sichtbar. Der angezeigte Yes-Anteil verwendet weiterhin alle erfassten Ereignisse als Nenner.<\/p>\n<h3>Bedeutet ein fehlender Tag, dass keine Ereignisse auftraten?<\/h3><p>Nein. Eine fehlende Exporttabelle ist ein Problem der Datenverf\u00fcgbarkeit. Die Abfrage liefert daf\u00fcr Nullwerte im Sinne von NULL; die Ereigniszahl 0 bleibt einer vorhandenen leeren Tabelle vorbehalten.<\/p><\/div>\n<div class=\"lw-quellen\">\n<h2>Quellen<\/h2>\n<ul>\n<li><a href=\"https:\/\/developers.google.com\/analytics\/devguides\/collection\/ga4\" target=\"_blank\" rel=\"noopener noreferrer\">Google Analytics 4 developer guide<\/a><\/li>\n<li><a href=\"https:\/\/cloud.google.com\/looker\/docs\" target=\"_blank\" rel=\"noopener noreferrer\">Looker documentation<\/a><\/li>\n<li><a href=\"https:\/\/support.google.com\/analytics\/answer\/7029846?hl=en\" target=\"_blank\" rel=\"noopener noreferrer\">GA4: Schema des BigQuery-Exports<\/a><\/li><li><a href=\"https:\/\/cloud.google.com\/looker\/docs\/studio\/funnel-chart-reference\" target=\"_blank\" rel=\"noopener noreferrer\">Looker Studio: native Trichterdiagramme<\/a><\/li><li><a href=\"https:\/\/support.google.com\/analytics\/answer\/11161109?hl=en\" target=\"_blank\" rel=\"noopener noreferrer\">GA4: Voraussetzungen der Verhaltensmodellierung<\/a><\/li><li><a href=\"https:\/\/developers.google.com\/tag-platform\/security\/concepts\/consent-mode\" target=\"_blank\" rel=\"noopener noreferrer\">Consent Mode: Grundlagen und Implementierungen<\/a><\/li><li><a href=\"https:\/\/cloud.google.com\/bigquery\/docs\/querying-wildcard-tables\" target=\"_blank\" rel=\"noopener noreferrer\">BigQuery: Abfragen \u00fcber Tabellenplatzhalter<\/a><\/li><li><a href=\"https:\/\/cloud.google.com\/looker\/docs\/studio\/about-calculated-fields\" target=\"_blank\" rel=\"noopener noreferrer\">Looker Studio: berechnete Felder und Aggregation<\/a><\/li><\/ul>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Ein praktischer Aufbau f\u00fcr einen Bericht, der Opt-in-Raten je Consent-Typ zeigt und wie eine verweigerte Einwilligung die tats\u00e4chlich erfassten Daten verringert \u2013 mit dem BigQuery-Export von GA4 und einem Looker-Studio-Dashboard, ohne Tracking einzelner Consent-Entscheidungen auf Nutzerebene.<\/p>\n","protected":false},"author":1,"featured_media":23376,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[129],"tags":[92139,92265,92091,92508,92235],"class_list":["post-10099","post","type-post","status-publish","format-standard","hentry","category-tutorials-de-digital-marketing-de","tag-consent-management-de","tag-prywatnosc-danych-pl-de","tag-google-analytics-4-de","tag-looker-studio-de","tag-tutorial-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tutorial: GA4-Einwilligungsstatus in BigQuery und Looker Studio | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Ein Bericht, der Opt-in-Raten je Consent-Typ zeigt und wie eine Ablehnung die erfassten Daten verringert \u2013 aus dem BigQuery-Export und Looker Studio.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/tutorials-de-digital-marketing-de\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tutorial: GA4-Einwilligungsstatus in BigQuery und Looker Studio | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Ein Bericht, der Opt-in-Raten je Consent-Typ zeigt und wie eine Ablehnung die erfassten Daten verringert \u2013 aus dem BigQuery-Export und Looker Studio.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/tutorials-de-digital-marketing-de\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-25T12:47:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-10099-review-20261024-dark.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/tutorials-de-digital-marketing-de\\\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/tutorials-de-digital-marketing-de\\\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Tutorial: GA4-Einwilligungsstatus in BigQuery und Looker Studio\",\"datePublished\":\"2026-10-25T12:47:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/tutorials-de-digital-marketing-de\\\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\\\/\"},\"wordCount\":906,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/tutorials-de-digital-marketing-de\\\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-10099-review-20261024-dark.png\",\"keywords\":[\"Consent Management\",\"Data Privacy\",\"Google Analytics 4\",\"Looker Studio\",\"Tutorial\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/tutorials-de-digital-marketing-de\\\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/tutorials-de-digital-marketing-de\\\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/tutorials-de-digital-marketing-de\\\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\\\/\",\"name\":\"Tutorial: GA4-Einwilligungsstatus in BigQuery und Looker Studio | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/tutorials-de-digital-marketing-de\\\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/tutorials-de-digital-marketing-de\\\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-10099-review-20261024-dark.png\",\"datePublished\":\"2026-10-25T12:47:00+00:00\",\"description\":\"Ein Bericht, der Opt-in-Raten je Consent-Typ zeigt und wie eine Ablehnung die erfassten Daten verringert \u2013 aus dem BigQuery-Export und Looker Studio.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/tutorials-de-digital-marketing-de\\\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/tutorials-de-digital-marketing-de\\\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/tutorials-de-digital-marketing-de\\\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-10099-review-20261024-dark.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-10099-review-20261024-dark.png\",\"width\":1200,\"height\":630,\"caption\":\"Tutorial: GA4-Einwilligungsstatus in BigQuery und Looker Studio\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/tutorials-de-digital-marketing-de\\\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorial: GA4-Einwilligungsstatus in BigQuery und Looker Studio\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tutorial: GA4-Einwilligungsstatus in BigQuery und Looker Studio | Lukas Wojcik","description":"Ein Bericht, der Opt-in-Raten je Consent-Typ zeigt und wie eine Ablehnung die erfassten Daten verringert \u2013 aus dem BigQuery-Export und Looker Studio.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/tutorials-de-digital-marketing-de\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\/","og_locale":"en_US","og_type":"article","og_title":"Tutorial: GA4-Einwilligungsstatus in BigQuery und Looker Studio | Lukas Wojcik","og_description":"Ein Bericht, der Opt-in-Raten je Consent-Typ zeigt und wie eine Ablehnung die erfassten Daten verringert \u2013 aus dem BigQuery-Export und Looker Studio.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/tutorials-de-digital-marketing-de\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-10-25T12:47:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-10099-review-20261024-dark.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/tutorials-de-digital-marketing-de\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/tutorials-de-digital-marketing-de\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Tutorial: GA4-Einwilligungsstatus in BigQuery und Looker Studio","datePublished":"2026-10-25T12:47:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/tutorials-de-digital-marketing-de\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\/"},"wordCount":906,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/tutorials-de-digital-marketing-de\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-10099-review-20261024-dark.png","keywords":["Consent Management","Data Privacy","Google Analytics 4","Looker Studio","Tutorial"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/tutorials-de-digital-marketing-de\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/tutorials-de-digital-marketing-de\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/tutorials-de-digital-marketing-de\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\/","name":"Tutorial: GA4-Einwilligungsstatus in BigQuery und Looker Studio | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/tutorials-de-digital-marketing-de\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/tutorials-de-digital-marketing-de\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-10099-review-20261024-dark.png","datePublished":"2026-10-25T12:47:00+00:00","description":"Ein Bericht, der Opt-in-Raten je Consent-Typ zeigt und wie eine Ablehnung die erfassten Daten verringert \u2013 aus dem BigQuery-Export und Looker Studio.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/tutorials-de-digital-marketing-de\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/tutorials-de-digital-marketing-de\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/tutorials-de-digital-marketing-de\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-10099-review-20261024-dark.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-10099-review-20261024-dark.png","width":1200,"height":630,"caption":"Tutorial: GA4-Einwilligungsstatus in BigQuery und Looker Studio"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/tutorials-de-digital-marketing-de\/tutorial-den-consent-funnel-in-ga4-und-looker-studio-visualisieren\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Tutorial: GA4-Einwilligungsstatus in BigQuery und Looker Studio"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10099","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=10099"}],"version-history":[{"count":6,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10099\/revisions"}],"predecessor-version":[{"id":23378,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10099\/revisions\/23378"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/23376"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=10099"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=10099"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=10099"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}