- How do I install tomatophp/filament-seo in a Laravel Filament panel?
- Run composer require tomatophp/filament-seo, publish the config and migrations, then run php artisan migrate. Register the plugin in your PanelProvider and add the HasSeo trait to the model you want to annotate. The happy path is small enough that one engineer can complete it end to end on a single model in about two days.
- Which Laravel and Filament versions does filament-seo support?
- The package is a Filament panel plugin built on standard Eloquent relationships, so its real compatibility boundary is the Filament major recorded in its composer.json. Read the constraints in vendor/tomatophp/filament-seo/composer.json rather than trusting the README, because panel plugins break on Filament majors more reliably than on anything else. Confirm that constraint covers the Filament major your panel runs before you put this on a roadmap.
- How do I add SEO fields to an existing Filament resource form?
- Add the HasSeo trait to the model so it exposes a morphOne seo relation, then compose a collapsed Section::make('SEO')->relationship('seo') into the resource form you already have. Editors then manage titles, descriptions, keywords, and social metadata in the same admin workflow as the rest of the record. No data migration of existing content is required, since SEO records simply start existing per model.
- Where do I render the meta tags in my Blade layout?
- Include the package's Blade partial inside the head of your public layout so stored metadata becomes actual tags. Confirm your front end is server-rendered Blade before committing, because with Inertia, Next, or Nuxt the editing surface transfers but the rendering half does not. If the partial drifts later, the polymorphic data model still works and you can replace just the view.
- Does filament-seo work in a multi-tenant Laravel application?
- The polymorphic seos table carries no tenant discriminator by default, which is a non-issue in a single-tenant database but a data-correctness question in a multi-tenant one. Verify isolation before a pilot, or add a tenant_id column plus a global scope on the relation. This is binary for multi-tenant apps and must be answered before rollout, not after.
- Can I use filament-seo alongside artesaos/seotools or an existing meta partial?
- Yes, but the split has to be an explicit, documented architectural decision. If artesaos/seotools, a hand-rolled partials.meta, or a hard-coded title in app.blade.php already exists, you risk two title tags or contradictory OG tags and no test will fail. A common migration is to let filament-seo be the editing surface while the existing renderer stays the output.
- What data does filament-seo store and can I export it if I drop the package?
- Metadata lives in a polymorphic seos table reached through a HasSeo trait, so it is ordinary Eloquent data you can query and move. There is no documented export path, so write a small one-off seo:export to JSON before committing. That cheap insurance makes the option to walk away literally true.
- Does it support Open Graph and Twitter/X card metadata?
- The plugin exposes fields for Open Graph and Twitter/X card metadata alongside meta titles, descriptions, and keywords. Editors fill them per record inside the panel, and your Blade partial emits them into the head. Keep a snapshot test on that head block, because a missing or duplicated OG image fails silently.
- Is tomatophp/filament-seo actively maintained and what is the bus factor?
- It is a small MIT package with a single maintainer and a low dependent count, so treat the bus factor as a real risk rather than a formality. Pin an exact version, name an internal owner, and confirm you can fork the small surface: the trait, model, form schema, and partial. That surface is small enough that a fork is a realistic fallback.
- How do I test that SEO output does not silently regress?
- Add a snapshot test on the rendered head block and run a crawl diff on every release that touches it. Duplicate robots tags, a missing canonical, or a 404 OG image throw nothing and erode traffic over weeks. This is the one safeguard to build on day one rather than later.