InfraGuard

Besucher- und Sucheinblicke

Lesen Sie die GA4-Besucheranalyse und den Search-Console-Suchverkehr direkt von der Karte einer Website aus — über ein Dienstkonto, das je Website zusammen mit ihrer Property-Zuordnung hinterlegt ist.

Überblick — was die Seite leistet

Neben der Zahl der eindeutigen Besucher stehen auf jeder Karte unter Service ▸ Web zwei Symbole, die jeweils ein modales Fenster öffnen.

Symbol Fenster Quelle
Person Besucheranalyse Google Analytics 4 (Analytics Data API)
Lupe Suchverkehr Google Search Console (Search Analytics API)

Während Ihnen die nginx_meta_ct-Zugriffsdaten der Karte sagen, was Ihr Server empfangen hat, sagen Ihnen diese beiden Fenster, woher die Besucher kamen und welche Suchbegriffe sie gebracht haben — Informationen, die Ihre Serverprotokolle schlicht nicht enthalten.

Was Site Kit unter WordPress tut, läuft im Kern darauf hinaus, die Berichtsanfragen für Sie zusammenzubauen. Unter Laravel bauen Sie sie selbst und erhalten identische Zahlen; deshalb verwenden wir weder ein Plugin noch google/apiclient — die ganze Aufgabe lautet „ein JWT mit dem privaten Schlüssel signieren und gegen ein Zugriffstoken tauschen“, und der Server signiert das nativ. Ein großer Abhängigkeitsbaum für zwei REST-Endpunkte ist ein schlechtes Geschäft.

Wann Sie es einsetzen

Aufbau

Beide Fenster gliedern sich in die Reiter Übersicht / Suchbegriffe / Verkehr (den Reiter „Suchbegriffe“ gibt es nur im Suchfenster), sodass Sie umschalten statt zu scrollen. Die Zeitraumauswahl bietet 7 / 28 / 90 Tage — genau die Menge, die der Server per Whitelist zulässt.

Besucheranalyse (GA4)

Kanal und Quelle sind nicht dasselbe. Der Kanal ist die gruppierte Antwort (Organic Search), die Quelle die konkrete (google, naver, github.com). Gerade bei koreanischen Websites entscheidet naver gegenüber google über zwei völlig verschiedene Akquisitionsgeschichten.

Suchverkehr (Search Console)

Die durchschnittliche Position ist impressionsgewichtet. Bei einem einfachen Mittelwert gleicht eine Impression auf Rang 1 zehntausend auf Rang 40 aus, was die Zahl massiv beschönigt.

So richten Sie es ein

1. Ein Dienstkonto anlegen (Google Cloud)

  1. Google Cloud Console → Projekt auswählen oder anlegen → IAM & Verwaltung ▸ Dienstkonten → Dienstkonto erstellen. Eine Rolle auf Projektebene ist nicht erforderlich.
  2. Konto öffnen → Schlüssel → Schlüssel hinzufügen ▸ Neuen Schlüssel erstellen ▸ JSON → Datei herunterladen.
  3. Aktivieren Sie unter APIs & Dienste ▸ Bibliothek die Google Analytics Data API und die Google Search Console API.

2. In InfraGuard hinterlegen

Unter Service ▸ Web ▸ Websites verwalten ▸ Bearbeitungsreiter der Website, im Abschnitt Google-Anbindung:

Feld Wert Wo Sie es finden
GA4-Property-ID nur Ziffern (z. B. 550688232) GA4-Verwaltung ▸ Property-Details oder die URL #/a<account>p<property>/ — der Teil nach p
Search-Console-Property sc-domain:example.com oder https://example.com/ exakt die Zeichenfolge, die die Property-Auswahl der Search Console anzeigt
Dienstkonto-JSON die heruntergeladene Datei vollständig einfügen —

Die GA4-Property-ID ist nicht die Konto-ID. In #/a405285491p550688232/ ist der Teil nach a das Konto und der Teil nach p die Property. Google unterscheidet bewusst nicht zwischen „Property existiert nicht“ und „keine Berechtigung“ (die Existenz einer Property ist selbst schon eine Information), daher sieht eine falsche Nummer exakt wie ein Berechtigungsproblem aus. Prüfen Sie zuerst die Property-ID.

Leiten Sie die Search-Console-Property niemals aus der Domain ab. Nur wer sie bestätigt hat, weiß, ob es sich um eine Domain-Property (sc-domain:) oder ein URL-Präfix (https://…/) handelt, und die falsche Wahl liefert ein leeres Ergebnis statt eines Fehlers.

3. Das Dienstkonto zu jeder Property einladen

Das JSON ist nur eine Identität; der Zugriff wird je Property gewährt. Kopieren Sie die nach dem Speichern angezeigte client_email und dann:

Property Wo Rolle
GA4 Verwaltung ▸ Zugriffsverwaltung der Property ▸ + Leser
Search Console Einstellungen ▸ Nutzer und Berechtigungen ▸ Nutzer hinzufügen Vollzugriff

In GA4 ist dies die Zugriffsverwaltung der Property, nicht die des Kontos (die linke Spalte ist das Konto, die mittlere die Property). In der Search Console muss es Vollzugriff sein, nicht „Eingeschränkt“ — die Search Analytics API weist eingeschränkte Nutzer ab. Dienstkonten haben kein Postfach; entfernen Sie daher den Haken bei „per E-Mail benachrichtigen“.

4. Die Verbindung testen

[Verbindung testen] im Verwaltungsfenster fragt beide APIs mit den gespeicherten Zugangsdaten je einmal ab (letzte 7 Tage) und meldet jeden Teil einzeln.

Zustand Bedeutung
ok Google hat geantwortet. Null Zeilen sind immer noch ok — eine neue Website und der Verzug der GSC sind keine Fehler
fail Googles eigener Wortlaut, dazu die einzuladende client_email
skip Keine Property konfiguriert, daher übersprungen (kein Fehlschlag)

Ohne jegliche Zugangsdaten wird nichts aufgerufen (null ausgehende Anfragen). Ungespeicherte Änderungen werden nicht getestet — bitte zuerst speichern.

Regeln für korrekte Zahlen — warum sie so gebildet werden

Sie folgen den Fallstricken, die Site Kit bereits belegt hat, jeder davon nachweisgestützt.

Regel Grund
Das Zeitfenster endet gestern Der heutige Tag ist nur teilweise aggregiert; nimmt man ihn hinzu, bricht der rechte Rand stets ein
GA4 liest totals[0] aus metricAggregations:['TOTAL'] Zeilen zu summieren, auf denen ein limit liegt, meldet die Kennzahl zu niedrig
Ein hostName-Listenfilter bei jeder GA4-Anfrage Eine Property umfasst oft mehrere Hosts; ohne ihn zeigt die Karte den gesamten Verkehr der Property. Wir übergeben jede Domain, die der Dienst besitzt (Haupt-, Zusatz- und www-Domain), damit es exakt zur vts-Aggregation der Karte passt
Ranglisten nutzen keepEmptyRows:false + notExpression{emptyFilter} Das (not set) von GA4 überholt regelmäßig echte Städte und Quellen
Zeitreihen nutzen keepEmptyRows:true Ein Tag ohne Verkehr darf nicht aus der Achse verschwinden
GSC nutzt dataState:'all' plus rund 2 Tage Verzug Ohne das lesen sich die jüngsten Tage als null, was wie ein Einbruch des Verkehrs aussieht
Domain-Propertys werden mit page contains eingegrenzt sc-domain: erstreckt sich über alle Subdomains, sodass Suchbegriffe benachbarter Websites hineinlaufen

Datenquellen

Ziel Verbindung / Ort Rolle
infr_web_service.ga4_property_id · gsc_site_url default (000771) Property-Zuordnung je Website
infr_web_service.google_cred_enc · google_cred_email default (000772) Dienstkonto je Website (Crypt, nur schreibend)
Analytics Data API properties/{id}:runReport extern Besucherberichte
Search Console searchAnalytics/query extern Berichte zum Suchverkehr

Dienste: Services\Google\{GoogleTokenService, GoogleReportService, SiteInsightService}; Endpunkte Service\WebController@insight{Visitors,Search,Test}.

Zwischenspeicherung: Berichtsantworten werden zwischengespeichert, und der Cache-Schlüssel enthält die handelnde Identität (client_email). Dieselbe URL mit demselben Rumpf unter einem anderen Konto ist eine andere Autorisierung; ein gemeinsamer Schlüssel würde einer Website die zwischengespeicherte Antwort einer anderen aushändigen.

Warum die Zugangsdaten je Website gelten

Ein einzelner globaler .env-Schlüssel kann hier nicht funktionieren. Registrierte Websites gehören verschiedenen Eigentümern und damit verschiedenen Google-Konten, und ein Dienstkonto liest nur die Propertys, zu denen es eingeladen wurde — sobald die Websites zweier Kunden registriert sind, scheitert also immer mindestens eine. Daher das Feld zum Einfügen je Website.

Das Zugangsdatenfeld wird nur übertragen, wenn Sie es anfassen. Das Formular erhält den privaten Schlüssel nie zurück; „fehlt“ als „löschen“ zu deuten, würde die Zugangsdaten also jedes Mal verwerfen, wenn jemand nur die Notiz bearbeitet. Es ausdrücklich zu leeren ist die einzige Art der Entfernung.

Berechtigungen

Das Ziel wird ausschließlich über die id der registrierten Website angesprochen — eine Property-ID lässt sich nicht als Parameter übergeben. Könnten Aufrufer eine Property benennen, würden die Berechtigungen unseres Dienstkontos zu einem Weg, die GA4-/Search-Console-Propertys anderer Leute zu lesen (dieselbe SSRF-Vermeidung wie bei den Live-Tests im Katalog). Der Zeitraum ist serverseitig ebenso auf 7/28/90 begrenzt.

Fehlersuche · FAQ

Verwandte Themen

순 방문자 옆의 방문자 · 검색 아이콘
순 방문자 옆의 방문자 · 검색 아이콘