@extends('admin.layout')
@section('title', 'Ziyaretçi Analizi')
@section('page-title', 'Ziyaretçi Analizi')
@push('styles')
@endpush
@section('content')
{{-- ═══ Toolbar ═══ --}}
{{-- ═══ Stat Kartları ═══ --}}
{{-- Toplam Ziyaretçi --}}
{{ number_format($summary['visitors']) }}
Toplam Ziyaretçi
@php $vc = $summary['visitor_change']; @endphp
{{ $vc > 0 ? '+' : '' }}{{ $vc }}%
{{-- Sayfa Görüntüleme --}}
{{ number_format($summary['page_views']) }}
Sayfa Görüntüleme
@php $pc = $summary['pv_change']; @endphp
{{ $pc > 0 ? '+' : '' }}{{ $pc }}%
{{-- Benzersiz Ziyaretçi --}}
{{ number_format($summary['unique_visitors']) }}
Benzersiz Ziyaretçi
{{-- Ort. Sayfa Süresi --}}
{{ number_format($summary['avg_duration_ms']) }}ms
Ort. Yüklenme Süresi
{{-- Bounce Rate --}}
%{{ $summary['bounce_rate'] }}
Hemen Çıkma Oranı
{{-- Sayfa / Ziyaretçi --}}
{{ $summary['pages_per_visitor'] }}
Sayfa / Ziyaretçi
{{-- Bot --}}
{{ number_format($summary['bot_count']) }}
Bot Ziyareti
{{-- Hata --}}
{{ number_format($summary['error_count']) }}
Hatalı İstek (4xx/5xx)
{{-- ═══ Günlük Grafik ═══ --}}
Günlük Ziyaretçi & Sayfa Görüntüleme
{{-- ═══ Dağılım Grafikleri (Pie/Doughnut) ═══ --}}
{{-- Cihaz --}}
{{-- Tarayıcı --}}
{{-- Platform --}}
{{-- ═══ En Çok Ziyaret Edilen Sayfalar ═══ --}}
En Çok Ziyaret Edilen Sayfalar
| # |
Sayfa |
Görüntüleme |
Tekil |
Ort. Süre |
@forelse ($topPages as $i => $page)
| {{ $i + 1 }} |
{{ Str::limit($page['path'], 50) }}
|
{{ number_format($page['views']) }} |
{{ number_format($page['unique_visitors']) }} |
{{ $page['avg_duration'] ? number_format($page['avg_duration']) . 'ms' : '—' }}
|
@empty
| Henüz veri yok |
@endforelse
{{-- ═══ Referrer Kaynakları ═══ --}}
Trafik Kaynakları
| Kaynak |
Ziyaretçi |
Oran |
@php $refTotal = array_sum($referrers) ?: 1; @endphp
@forelse ($referrers as $source => $count)
|
{{ $source }}
|
{{ number_format($count) }} |
%{{ number_format(($count / $refTotal) * 100, 1) }}
|
@empty
| Referrer verisi yok |
@endforelse
{{-- ═══ Saatlik Yoğunluk Haritası ═══ --}}
Saatlik Yoğunluk Haritası
@php
$dayNames = [1 => 'Paz', 2 => 'Pzt', 3 => 'Sal', 4 => 'Çar', 5 => 'Per', 6 => 'Cum', 7 => 'Cmt'];
$maxVal = 1;
foreach ($hourlyHeatmap as $dow => $hours) {
foreach ($hours as $val) {
if ($val > $maxVal) $maxVal = $val;
}
}
@endphp
{{-- Saat başlıkları --}}
@for ($h = 0; $h < 24; $h++)
{{ str_pad($h, 2, '0', STR_PAD_LEFT) }}
@endfor
{{-- Günler --}}
@foreach ($dayNames as $dow => $dayName)
{{ $dayName }}
@for ($h = 0; $h < 24; $h++)
@php
$val = $hourlyHeatmap[$dow][$h] ?? 0;
$intensity = $maxVal > 0 ? $val / $maxVal : 0;
// Renk: beyazdan koyu yeşile
$r = (int)(255 - ($intensity * 200));
$g = (int)(255 - ($intensity * 100));
$b = (int)(255 - ($intensity * 200));
$bg = $val > 0 ? "rgb($r,$g,$b)" : '#f5f5f5';
$textColor = $intensity > 0.5 ? '#fff' : '#999';
@endphp
{{ $val > 0 ? $val : '' }}
@endfor
@endforeach
{{-- ═══ Son Ziyaretçiler ═══ --}}
Son Ziyaretçiler
| Ziyaretçi |
Cihaz |
Platform |
Tarayıcı |
Giriş Sayfası |
Sayfa |
Zaman |
@forelse ($recentVisitors as $v)
|
{{ $v->ip ?? '—' }}
@if ($v->referer)
{{ Str::limit($v->referer, 30) }}
@endif
|
{{ ucfirst($v->device) }}
|
{{ $v->platform ?? '—' }} |
{{ $v->browser ?? '—' }} |
{{ Str::limit($v->landing_url, 35) }}
|
{{ $v->total_page_views }} |
{{ $v->created_at->diffForHumans() }}
|
@empty
| Henüz ziyaretçi yok |
@endforelse
@endsection
@push('scripts')
@endpush