{{-- Favicon du Hub Pilotage (pulse indigo « monitoring »). --}} @php $scored = collect($sites)->where('reachable', true)->whereNotNull('total'); $avg = $scored->count() ? (int) round($scored->avg('total')) : null; $gradeColor = fn ($g) => match ($g) { 'A' => 'text-emerald-400 border-emerald-400/40 bg-emerald-400/10', 'B' => 'text-lime-400 border-lime-400/40 bg-lime-400/10', 'C' => 'text-amber-400 border-amber-400/40 bg-amber-400/10', 'D' => 'text-orange-400 border-orange-400/40 bg-orange-400/10', 'E' => 'text-red-400 border-red-400/40 bg-red-400/10', default => 'text-slate-500 border-slate-700 bg-slate-800/40', }; $barColor = fn ($v) => $v >= 80 ? 'bg-emerald-400' : ($v >= 60 ? 'bg-lime-400' : ($v >= 40 ? 'bg-amber-400' : 'bg-red-500')); $dotColor = fn ($l) => $l === 'crit' ? 'bg-red-500' : ($l === 'warn' ? 'bg-amber-400' : 'bg-sky-400'); $axisLabels = ['meta' => 'Meta & contenu', 'technique' => 'Technique', 'structure' => 'Données struct.', 'perf' => 'Perf / cache', 'social' => 'Social / GEO']; @endphp
HubPilotage

Audit SEO · @if($checkedAt) maj {{ \Illuminate\Support\Carbon::parse($checkedAt)->diffForHumans() }} @else à l'instant @endif

@include('partials.nav', ['active' => 'seo'])
@if($avg !== null) moyenne {{ $avg }}/100 @endif Ré-auditer

Score /100 par site (meta, technique, données structurées, perf/cache, social/GEO), audité sur l'URL de production si connue, sinon en local.

{{-- Auditer un site externe (concurrent, prospect…) --}}
🔍 Auditer un autre site

Audit ponctuel (non enregistré) : mêmes critères SEO/GEO que tes sites, avec la liste « pour atteindre 100 % ».

{{-- Barre de tri + audit --}}
Trier
@foreach ($sites as $site) @php $seoPort = (int) parse_url((string) config('sites.'.$site['key'].'.local_url'), PHP_URL_PORT); @endphp
{{-- En-tête carte --}}
{{ $site['name'] }}
{{ preg_replace('#^https?://#', '', $site['audit_url']) }} {{ $site['is_prod'] ? 'prod' : 'local' }}
@if($site['reachable']) @endif
{{ $site['grade'] }}
{{ $site['reachable'] ? $site['total'].'/100' : '' }}
@if(! $site['reachable'])
Injoignable - serveur {{ $site['is_prod'] ? 'de prod' : 'local' }} hors ligne.
@else {{-- Barres par axe --}}
@foreach ($axisLabels as $k => $label)
{{ $label }}
{{ $site['axes'][$k] }}
@endforeach
{{-- Points à corriger --}}
@if(count($site['issues']))
@foreach (array_slice($site['issues'], 0, 3) as $iss)
{{ $iss[1] }}
@endforeach @if(count($site['issues']) > 3)
+ {{ count($site['issues']) - 3 }} autre(s)
@foreach (array_slice($site['issues'], 3) as $iss)
{{ $iss[1] }}
@endforeach
@endif
@else
Aucun point bloquant détecté 🎉
@endif
@endif
@endforeach

Résultats mis en cache 30 min. Audit léger côté serveur (accueil + robots + sitemap + llms.txt) - pour un diagnostic complet d'un site, lancer un audit détaillé dédié.

{{-- ===== Pop-up détail + historique ===== --}}