Filament yönetim alanları
Ücretsiz rankbeam/laravel-seo-filament paketi, herhangi bir Filament kaynak formuna eksiksiz SEO bölümü ekler: kaynak başına iki satır. Filament 4.x ve 5.x sürümlerini (Livewire 3 ve 4) destekler. Meta verilerini düzenlemek ücretsizdir; Pro, aşağıdaki örnekte görülen taramaları ve puanı ekler.
Ön koşullar
Mevcut bir Filament 4 veya 5 paneli ve çekirdeğin HasSEO trait'ini kullanan bir model gerekir. Editörü eklemeden önce migration ve çıktı üretimi dahil çekirdek Hızlı başlangıç adımlarını tamamlayın.
Kurulum
composer require rankbeam/laravel-seo-filamentKaynağın arkasındaki model, çekirdeğin HasSEO trait'ini kullanmalıdır.
Bölümü kaynağa ekleyin
use Rankbeam\Seo\Filament\Concerns\HasSEOFields;
class PostResource extends Resource
{
use HasSEOFields; // 1
public static function form(Schema $schema): Schema
{
return $schema->components([
TextInput::make('title'),
// ...
static::seoSection(), // 2
]);
}
}Kaydedilen sonucu kontrol edin
Mevcut bir kaydı açın. SEO açıklaması girin, kaydedin ve formu yeniden yükleyin. Değer kalmalı, önizleme onu göstermeli ve kaynağı Elle girilmiş olarak görünmelidir. Aynı açıklamanın ziyaretçilerinize ulaştığını doğrulamak için üretilen sayfanın <head> bölümünü kontrol edin.

Merchant demosundan örnek. Alanlar panelinizin temasını kullanır; kullanılabilir kontroller ve karakter bütçeleri, kurulu sürümünüze ve yapılandırmanıza bağlıdır.
Bölüm şunları içerir:
- Anlık karakter sayaçlarıyla başlık ve açıklama. Bütçe, yazılan metnin yazı sistemi için çekirdeğin uzunluk politikasından gelir (Latin metinlerde 60/160, CJK için yaklaşık 30/80; grafem olarak sayılır).
- Odak anahtar kelimeler — etiket girişi. Düz anahtar kelimeler yazarsınız; çekirdeğin yapılandırılmış
[{keyword, is_primary}]biçiminde saklanırlar (ilk öğe birincildir). BöylecegetPrimaryKeyword()veSEODatabunları değişmeden okur.seo:auditkomutunun ve Pro taramasının anahtar kelimesi hâlâ eksik sayfaları işaretlemesi içinseo.keywords.enabledetkinleştirin (varsayılan olarak kapalıdır; tek ayar, bkz. Yapılandırma). - Canonical URL (boş = otomatik; sorgu dizesi kaldırılır).
- Robots seçimi (boş = site varsayılanı).
- Sosyal paylaşım görseli yükleme (og:image / twitter:image); Filament'in varsayılan diskinde
seo/altında saklanır. - Yazarken çözümleyicinin yedek değer zincirini anlık yansıtan arama sonucu önizlemesi.
- Kaynak göstergeleri — her alanın geçerli değerini hangi çözümleyici katmanının ürettiği: Elle girilmiş, İçerikten türetilmiş, Model türü varsayılanı, Genel varsayılan, Site yapılandırması veya URL'den türetilmiş.
Alanları sınırlandırma
static::seoSection(['title', 'description'])title, description, focus_keywords, canonical, robots ve og_image alanlarının herhangi bir alt kümesini kabul eder.
Trait olmadan SEOFields::make(?array $only) aynı bölümü doğrudan döndürür.
Değerler nasıl saklanır?
Bölüm, bir seo_meta durum grubuna bağlanır ve çekirdeğin seoMeta() ilişkisi üzerinden kaydeder (güncelle veya oluştur). Kendi tablolarınızda sütun gerekmez; değerler hemen çözümleyicinin 6. katmanı (açıkça atanan) olur.
Birden fazla dil
Çekirdek, her (model, dil kodu) için bir seo_meta satırı tutar. Sayfanın yayımlandığı dilleri iletin; bölüm dil başına bir sekme oluşturur (Filament 1.9):
static::seoSection(locales: ['en', 'it', 'ja']);
// or, without the trait
SEOFields::make(locales: ['en', 'it', 'ja']);Ya da tüm kaynaklar için paket yapılandırmasında bir kez ayarlayın:
php artisan vendor:publish --tag=seo-filament-config// config/seo-filament.php
'locales' => ['en', 'it', 'ja'],Her sekme kendi satırını düzenler ve kendine ait şu öğeleri taşır:
- Sayaçlar — o dilin yazı sistemi için uzunluk politikası. Aynı sayfada boş Japonca başlık
0 / 30gösterirken İngilizce sekme0 / 60gösterir. - O dilin çözümlenen değerlerinden oluşturulan önizleme (SERP / sosyal kart).
- O dilin satırını açıklayan yedek değer göstergeleri.
- O sürümde doldurulmuş alan sayısını gösteren rozet; böylece boş çeviriler fark edilir.
ext-intl yüklüyse sekme etiketi dilin adını panel dilinde gösterir (Italiano / Italian); aksi halde kodu gösterir. Tüm sekmeler birlikte doğrulanır ve kaydedilir; hiçbir şey girilmeyen bir dil için yer tutucu satır oluşturulmaz.
Özel form durumu bağlamaları
Birden fazla dilde durum yolu seo_meta.{locale}.title olur; tek dilde seo_meta.title olarak kalır. Özel form eylemlerinde uygun yolu kullanın.

Merchant demosu, 9 Eylül 2026, locales: ['en', 'it', 'ja'] ile. Boş Japonca sekme kendi sayaçlarını kullanır. Buradaki İngilizce başlık, demo modelinin içerikten türetilen yedek değerinden gelir: dil sekmesi eklemek içeriğinizi çevirmez. Alanların üzerindeki Pro puanı, kaydın son tarama sonucudur; her dil sekmesinin ayrı puanı değildir.
Çevrilebilir içerik eklentisiyle
lara-zeus/spatie-translatable paketinin Filament 4 üzerinde 1.x veya Filament 5 üzerinde 2.x sürümüyle, Düzenle ve Oluştur sayfalarında Rankbeam'in sayfa adaptörlerini kullanın. Yalnızca sayfa trait içe aktarımlarını değiştirin; eklentinin kaynak/liste trait'lerini, panel eklentisini ve LocaleSwitcher eylemini koruyun:
// In your EditPost page:
use Rankbeam\Seo\Filament\Resources\Pages\EditRecord\Concerns\Translatable;
// In your CreatePost page (a separate file):
use Rankbeam\Seo\Filament\Resources\Pages\CreateRecord\Concerns\Translatable;Her sayfa sınıfının içinde yine use Translatable; bildirir. Eklenti isteğe bağlı uygulama bağımlılığı olarak kalır. En son yama sürümünü kullanın; yerel entegrasyon örneği eklenti 1.0.4 / Filament 4.13.1 ve eklenti 2.0.1 / Filament 5.8.1 sürümlerini kapsar.
Dil değiştirmek, kaydedilmemiş ana içerik, SEO meta verisi ve yapılandırılmış veri taslaklarını editörde tutar. Kaydetme, ziyaret edilmiş her dili doğrular ve hepsini bir veritabanı işlemi içinde kaydeder. Doğrulama hatası, dikkat gerektiren dili açar. Yüklemeler Kaydet sırasında saklanır; sayfadan ayrılmak veya sayfayı yenilemek kaydedilmemiş taslakları siler. Taslak kaydetmek, eksik içeriği sizin için çevirmez.
Adaptörler normal önce/sonra kancalarını ve form verisi dönüştürücülerini korur. Sayfanız handleRecordCreation(), handleRecordUpdate(), callHook() veya işlem metotlarını geçersiz kılıyorsa adaptör davranışını bu özelleştirmeye dahil edin ve kaydetme akışını test edin. Veritabanı işlemleri dosya sistemi yazmalarını geri almaz; uygulamalar olağan sahipsiz dosya temizliğini sürdürmelidir.
Livewire 3'te özel canlı metin alanları için açık bir debounce yerine ->live() veya ->live(onBlur: true) tercih edin. Açık debounce, yerel model durumunu geciktirir ve hızlı bir dil değişiminde son tuş vuruşlarını kaybedebilir. Rankbeam'in başlık ve açıklama alanları varsayılan istek debounce'unu kullanır.
Üst paketin sayfa trait'leri tek başına kullanıldığında dil değişiminde formları yeniden doldurur. Rankbeam bunların yanlışlıkla meta veri yazmasına karşı korur, ancak bu trait'ler SEO taslaklarını korumaz; Düzenle/Oluştur sayfalarını adaptörlere taşıyın. Açıkça tanımlanan locales: sekmeleri ortak editör olarak kalır ve sayfa dil seçicisinden önceliklidir.
Açık dil listesi veya sayfa dili yoksa bölüm uygulamanın dilini düzenler.
Yapılandırılmış veri (schema.org)
İsteğe bağlı Yapılandırılmış veri bölümü, editörlerin kod yazmadan JSON-LD zengin sonuç şeması eklemesini sağlar. SEO bölümünün yanına ekleyin:
public static function form(Schema $schema): Schema
{
return $schema->components([
// ... your fields ...
static::seoSection(),
static::seoSchemaSection(), // optional
]);
}(veya trait olmadan doğrudan SEOSchemaFields::make() kullanın).
Çekirdeğin seo_meta.schema_jsonld sütununa yazar; şema renderer'ının ürettiği değerle aynıdır. Yalnızca arayüz bağlamasıdır: her belge çekirdeğin şema oluşturucusuyla üretilir ve kaydedilmeden önce çekirdeğin SchemaValidator doğrulayıcısından geçer. Kendine ait şema mantığı eklemez.
Bölüm şunları sunar:
- Otomatik breadcrumb — yapılandırma gerektirmeyen ilk seçenek olarak sunulan tek anahtar.
BreadcrumbSchema::fromModelAncestors()aracılığıyla kaydın üst öğe zincirinden birBreadcrumbListtüretir. Doldurulacak bir alan yoktur; modelin üst öğelerini izler. - Şema blokları — tekrarlayıcı alan. Her blok ya SSS (soru/cevap çiftleri →
FAQPage) ya da Ürün (ad, açıklama, görsel, marka, SKU, fiyat + para birimi, stok durumu →Product) olur. ÇekirdeğinFAQSchema/ProductSchemaoluşturucuları tarafından üretilir.
Doğrulama
Geçersiz JSON-LD oluşturacak bir blok kaydetme sırasında reddedilir ve çekirdek doğrulayıcının mesajı gösterilir. Örneğin cevapsız bir SSS girdisi veya görseli ya da teklifi olmayan bir Ürün (bu oluşturucu bu alanları gerektirir; bu ifade Google'ın her Product arama özelliğine ilişkin gereksinimlerinin eksiksiz açıklaması değildir). Boş bırakılan bloklar yok sayılır.
Neyi saklar?
schema_jsonld oluşturulan belgeleri tutar: tek belge varsa tek nesne, birden fazlaysa JSON dizisi (önce breadcrumb, ardından bloklarınız). Her ikisi de geçerli JSON-LD'dir ve @seo / renderSchema() üzerinden değişmeden üretilir.
Yönetmediği şemalar
Kodda yazdığınız ve editörün temsil edemediği şema — elle oluşturulmuş bir @graph, alışılmadık bir @type veya formun sunmadığı alanları (incelemeler, değerlendirmeler, GTIN/MPN) taşıyan bir Product — aynen korunur. Formu açıp kaydetmek bu şemanın üzerine asla yazmaz.
Sorun giderme
- Kaydedilen alan sayfada görünmüyor: şablonunuzun aynı kayıt ve dil için
@seo($model)ürettiğini doğrulayın. - Alan hâlâ yedek değer kullanıyor: etkin dilde alana ait kaydedilmiş bir değer var mı kontrol edin. Kaynak göstergeleri çözümlenen katmanı belirtir.
- Dil sekmesi eksik: açık
locales:argümanını, paket yapılandırmasını ve sayfa düzeyindeki çeviri seçicilerini kontrol edin. Öncelikleri yukarıda açıklanmıştır.
Testbench'te özel paneli test etme
Filament'i orchestra/testbench içinde başlatıyorsanız Filament'in SupportServiceProvider sağlayıcısını LivewireServiceProvider sağlayıcısından önce kaydedin. Filament, Livewire'ın DataStore bağlamasını yeniden tanımlar; yanlış sıralama tüm Livewire testlerini ViewErrorBag::put(): ... null given hatasıyla başarısız kılar. Gerçek uygulamalar etkilenmez (paket keşfi sağlayıcıları doğru sıralar).