Interfejs GA4, czyli Google Analytics 4, to aktualna wersja platformy analitycznej Google do pomiaru zdarzeń i zachowań użytkowników. jest potężny, ale dla wielu klientów i zespołów bywa po prostu zbyt techniczny. Zamiast wysyłać klientowi screenshoty z GA4, możesz zbudować własny dashboard w Next.js, który pobiera dane bezpośrednio z GA4 Data API, czyli Application Programming Interface, definiuje sposób komunikacji między aplikacjami lub modułami. i prezentuje je w czytelnej formie.
Krótka odpowiedź: Własny dashboard analityczny w Next.js oparty na GA4 Data API wymaga Service Account z minimalnymi uprawnieniami, komunikacji wyłącznie po stronie serwera i cache'owania odpowiedzi od pierwszego dnia — API ma limity tokenowe. GA4 to dobre źródło agregatów i trendów, ale nie surowego event streamu. Kluczowa metryka w nowym API to keyEvents, nie dawne conversions.
Kiedy warto budować custom dashboard?
Kilka scenariuszy, w których custom dashboard ma sens: klient chce widzieć metryki bez logowania do GA4, potrzebujesz połączyć dane GA4 z innymi źródłami (CRM, baza danych), chcesz prezentować dane w kontekście biznesowym (nie technicznym) lub budujesz admin panel z wbudowaną analityką.
Krok 1: Autoryzacja – Service Account
GA4 Data API wymaga autoryzacji OAuth2. Najprościej przez Service Account.
Utworzenie Service Account
Google Cloud Console → APIs & Services → Credentials,
Create Credentials → Service Account,
Pobierz klucz JSON,
W GA4: Admin → Property Access Management → dodaj email Service Account z rolą Viewer albo inną minimalną rolą pozwalającą odczytywać dane.
useSearchParams() w Next.js App Router wymaga opakowania komponentu w <Suspense>, ponieważ inaczej Next.js wymusi dynamiczne renderowanie całej strony nadrzędnej lub rzuci błąd podczas buildu.
Kluczowym detalem jest że przy wielu dateRanges dodajemy wymiar dateRange, bo to on pozwala później rozróżnić, który wiersz należy do okresu current, a który do previous.
Bezpieczeństwo i rate limits
Nigdy nie eksponuj Service Account credentials na frontendzie. Wszystkie zapytania do GA4 Data API muszą iść przez server-side (API Routes, Server Components, Server Actions).
Rate limits: GA4 Data API używa kwot tokenowych zależnych od typu zapytań i właściwości, czyli w praktyce cache jest częścią poprawnej architektury, a nie późniejszą optymalizacją. Poczujesz różnice, jak dashboard zrobi więcej niż kilka prostych raportów.
Autoryzacja dashboardu: Zabezpiecz /dashboard middleware'em lub server-side auth check. Nie chcesz, żeby każdy widział Twoje dane.
Code
// middleware.tsimport { NextResponse } from 'next/server'import type { NextRequest } from 'next/server'export function middleware(request: NextRequest) { const token = request.cookies.get('auth-token') // Sprawdź istnienie i podstawowy format tokenu. // W produkcji zastąp tę weryfikację sprawdzeniem podpisu JWT // (np. jose.jwtVerify) lub wywołaniem własnego endpointu sesji. if (!token?.value) { return NextResponse.redirect(new URL('/login', request.url)) }}// Middleware uruchamia się TYLKO dla ścieżek /dashboard/*.// Bez tego konfiguratora Next.js odpala middleware na każdym żądaniu// (statyki, fonty, API), co jest zbędnym kosztem.export const config = { matcher: ['/dashboard/:path*'],}
FAQ
Czy mogę odpytywać GA4 Data API bezpośrednio z frontendu?
Nie. Klucze Service Account i dostęp do właściwości muszą zostać po stronie serwera. Frontend powinien rozmawiać wyłącznie z Twoim własnym backendem, Route Handlerem albo Server Componentem.
Czy Service Account potrzebuje roli Editor?
Zwykle nie, a do samych odczytów wystarczą minimalne uprawnienia na poziomie właściwości, najczęściej Viewer albo inna rola, która pozwala pobierać potrzebne raporty. Nadawanie zbyt szerokich uprawnień bywa niebezpieczne i nie jest też optymalne do działań operacyjnych.
Czy keyEvents to to samo co dawne conversions?
W praktyce to aktualna nazwa i model w GA4, a jeśli pracujesz na nowszej dokumentacji, raportach i Data API, myśl raczej kategorią key events. To ważne także dlatego, że starsze nazewnictwo łatwo miesza się z Google Ads i klasycznym „conversion tracking”.
Jak często cache'ować taki dashboard?
Najczęściej 10-15 minut to dobry punkt startowy, ponieważ dane analityczne rzadko wymagają twardego real-time, a agresywne cache'owanie oszczędza kwoty API i stabilizuje działanie dashboardu.
Jak zabezpieczyć dashboard przed nieautoryzowanym dostępem?
Zabezpiecz ścieżkę /dashboard middlewarem Next.js z weryfikacją sesji lub tokenu przed renderowaniem strony, ponieważ żadne dane z GA4 nie powinny być dostępne publicznie. Mam tu na myśli zarówno dane agregowane jak i surowe raporty mogą ujawniać bardzo wrażliwe informacje o biznesie.
Jakie metryki i wymiary są dostępne w GA4 Data API?
GA4 Data API udostępnia setki wymiarów i metryk, m.in. totalUsers, sessions, screenPageViews, bounceRate, averageSessionDuration oraz wymiary jak pagePath, sessionSource, deviceCategory. Pełna lista dostępna jest w dokumentacji Google Analytics Data API schema. Nie wszystkie kombinacje są kompatybilne — warto weryfikować zapytania testowo.
Czy GA4 Data API nadaje się do raportowania w czasie rzeczywistym?
Dane w standardowych raportach Data API mają opóźnienie rzędu kilku minut do kilku godzin, a do wyświetlania metryk bliskich real-time istnieje osobne Realtime API w GA4, które zwraca dane z ostatnich 30 minut, ale ma inne możliwości i ograniczenia niż główne Data API.
Podsumowanie
GA4 Data API w połączeniu z Next.js Server Components to potężna i bardzo pożyteczna kombinacja. Masz szerokie możliwości działania: możesz budować dashboardy dostosowane do potrzeb biznesu, łączyć dane analityczne z wewnętrznymi systemami i prezentować insights w formie zrozumiałej dla każdego i to bez konieczności logowania do GA4.
Po prostu zacznij od prostego overview z KPI cards i chart, a następnie rozbodowuj wszystko stopniowo, ale przede wszystkim zajmij się kwestiami bezpieczeństwa - one są sprawą fundamentalną przy budowie dashboardu analitycznego.
Jeśli chcesz połączyć SEO, analitykę, Google Ads i warstwę techniczną strony w jeden sensowny system wzrostu, skontaktuj się ze mną. Pomagam układać wdrożenia, które nie kończą się na samym tagowaniu, ale wspierają widoczność, pomiar i konwersję.
Maciej Sala — project manager i frontendowiec z doświadczeniem w marketingu internetowym. Na co dzień pracuję z Reactem, Next.js i TypeScriptem, łącząc perspektywę produktową z praktycznym podejściem do kodu. Przez kilka lat związany z branżą gier wideo jako project manager i game designer.
Absolwent historii na Uniwersytecie Jagiellońskim i studiów podyplomowych z marketingu internetowego na Akademii Górniczo-Hutniczej w Krakowie. Poza pracą trenuje na siłowni, maluje figurki i realizuje własne projekty.
Astro.js vs Next.js — które narzędzie wybrać w 2026 roku?
Fachowe porównanie Astro.js i Next.js z perspektywy developera pracującego na co dzień w Next.js. Architektura, wydajność, SEO, DX, koszty i konkretne use case — z benchmarkami i przykładami kodu.
WordPress → Next.js — migracja treści, redirecty 301 i zachowanie pozycji SEO
Jak przenieść stronę z WordPress na Next.js bez utraty pozycji w Google? Eksport treści, mapowanie URL, redirecty 301, migracja obrazów i weryfikacja indeksacji.
Google Search Console + Next.js — indeksacja, błędy, performance i co z nimi robić
Jak korzystać z Google Search Console dla strony Next.js? Weryfikacja, sitemap, indeksacja, Core Web Vitals, crawl budget i najczęstsze problemy — praktyczny poradnik.