{{-- SEO sekmesi — LEDGER (defter) tasarımı: müşteri Künyesiyle aynı sabit kalıp. Canlı Google önizlemesi + karakter sayaçları + etiket-çip motoru _qv-seo-ui'de (pfx alanlarını da okur); kayıt sözleşmesi değişmedi: blur/Enter → update-field PATCH. Meta satırları ledger-card ile DEĞİL elle çizilir: her satır _qv-seo-ui'nin beklediği data-seo/data-max kancalarını ve etiket yanındaki .qv-cc sayacını taşır. Günübirlik, kültür ve yurtdışı turlarının ortak SEO sekmesidir. Gerekli: $tour, $editBase. Opsiyonel: $uf, $urlSegment --}} @php $uf = $uf ?? route("$editBase.update-field", $tour); $tagsArr = is_array($tour->tags ?? null) ? $tour->tags : []; $previewTitle = $tour->meta_title ?: $tour->name; $previewDesc = $tour->meta_description ?: ($tour->short_description ?: 'Bu tur için henüz bir açıklama girilmedi.'); $host = preg_replace('#^https?://#', '', rtrim(config('app.url'), '/')); // editBase 'agency.products.gunubirlik-turlar' → 'gunubirlik-turlar' $urlSegment = $urlSegment ?? \Illuminate\Support\Str::afterLast($editBase, '.'); $previewUrl = $host . ' › ' . $urlSegment . ' › ' . ($tour->slug ?? ''); // Meta satırları: seo => _qv-seo-ui kancası (data-seo/data-max + canlı sayaç) $seoRows = [ ['label' => 'Meta Başlık', 'field' => 'meta_title', 'type' => 'text', 'seo' => 'title', 'max' => 60, 'value' => $tour->meta_title, 'ph' => 'Boş: tur adı kullanılır'], ['label' => 'Meta Açıklama', 'field' => 'meta_description', 'type' => 'textarea', 'seo' => 'desc', 'max' => 160, 'value' => $tour->meta_description, 'ph' => 'Boş: kısa açıklama kullanılır'], ['label' => 'Anahtar Kelimeler', 'field' => 'meta_keywords', 'type' => 'text', 'seo' => null, 'max' => null, 'value' => $tour->meta_keywords, 'ph' => 'virgül, ile, ayrılmış'], ]; $seoEmpty = collect($seoRows)->filter(fn ($r) => blank($r['value']))->count(); @endphp
{{-- ── Google arama sonucu önizlemesi (canlı) ── --}}
Arama Sonucu Önizlemesi Canlı
{{ $previewUrl }}
{{ $previewTitle }}
{{ $previewDesc }}
{{-- ── Meta alanları: ledger satırları (+ etiket yanında canlı sayaç) ── --}} {{-- show-empty açık başlar: boş alanlar varsayılan görünür, düğme gizlemeye yarar --}}
SEO ve Meta Bilgileri
Meta Alanları
@foreach($seoRows as $r) @php $shown = trim((string) ($r['value'] ?? '')); @endphp
{{ $r['label'] }} @if($r['seo']) {{ mb_strlen($shown) }}/{{ $r['max'] }} @endif {{ $shown }}
@endforeach
Meta başlık boşsa tur adı, meta açıklama boşsa kısa açıklama kullanılır — önizleme bunu anlık gösterir.
{{-- ── Etiketler (çip motoru _qv-seo-ui'de; Enter ile ekle, otomatik kaydedilir) ── --}}
Etiketler {{ count($tagsArr) }}
@foreach($tagsArr as $tag) {{ $tag }} @endforeach
Enter ile eklenir, çarpı ile silinir — değişiklik anında kaydedilir.