PHPackages                             rankbeam/laravel-seo-filament - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. rankbeam/laravel-seo-filament

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

rankbeam/laravel-seo-filament
=============================

Filament 4/5 form components for the Rankbeam Laravel SEO core - SEO section with live character counters, search-snippet preview, and manual-vs-fallback indicators.

v1.5.0(3w ago)05↓50%MITPHPPHP ^8.2CI passing

Since Jun 12Pushed 1w agoCompare

[ Source](https://github.com/rankbeam/laravel-seo-filament)[ Packagist](https://packagist.org/packages/rankbeam/laravel-seo-filament)[ RSS](/packages/rankbeam-laravel-seo-filament/feed)WikiDiscussions master Synced 1w ago

READMEChangelog (4)Dependencies (10)Versions (7)Used By (0)

rankbeam/laravel-seo-filament
=============================

[](#rankbeamlaravel-seo-filament)

[![Tests](https://github.com/rankbeam/laravel-seo-filament/actions/workflows/tests.yml/badge.svg)](https://github.com/rankbeam/laravel-seo-filament/actions/workflows/tests.yml)[![Latest Version on Packagist](https://camo.githubusercontent.com/2f7fb48f421c26df250f2cdb063643d7acbbe8ffcb1756711d0642930e3069da/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f72616e6b6265616d2f6c61726176656c2d73656f2d66696c616d656e742e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/rankbeam/laravel-seo-filament)[![License: MIT](https://camo.githubusercontent.com/942e017bf0672002dd32a857c95d66f28c5900ab541838c6c664442516309c8a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75652e7376673f7374796c653d666c61742d737175617265)](LICENSE.md)

Filament form components for the [Rankbeam Laravel SEO core](https://github.com/rankbeam/laravel-seo) (`rankbeam/laravel-seo`).

Adds a complete, production-pattern SEO section to any Filament resource form:

- **SEO title &amp; description** with live character counters — thresholds (60/160) come from the core `SEOWarningEvaluator`, so the admin UI and the audit layer can never disagree.
- **Canonical URL** field (empty = automatic canonical, query string stripped).
- **Robots directive** select (empty = site default).
- **Social sharing image** upload (og:image / twitter:image).
- **Editorial live preview** with a **Google SERP** tab and a **social card** tab — title, description and URL update as you type, social-image dimensions are checked against the shared thresholds (min 200×200 / ideal 1200×630), and a broken remote image degrades to a placeholder instead of breaking the form. Mirrors the resolver's fallback chain.
- **Manual-vs-fallback indicators**: a per-field panel showing the effective value and the resolver layer that produced it (Manual / Content fallback / Model-type default / Global default / Site config / Derived from URL).

Values persist to the core package's `seo_meta` record via the `HasSEO` trait's relationship — no extra columns on your tables.

Requirements
------------

[](#requirements)

DependencyVersionPHP8.2 – 8.4Filament**4.x or 5.x** (both tested in CI; the test suite passes unchanged on both)Core package`rankbeam/laravel-seo` ^2.0 || ^3.0Core 2 installs are supported under this constraint: when the newer `seoMetaForLocale()` helper is not available, the forms hydrate through the older `seoMeta()` relation.

Installation
------------

[](#installation)

```
composer require rankbeam/laravel-seo-filament
```

Installing this package pulls in the core (`rankbeam/laravel-seo`). If you have not set the core up yet:

```
php artisan vendor:publish --tag=seo-config
php artisan migrate
```

> **Contributing / local development:** the repo consumes the core via a sibling path repository (`../laravel-seo`); CI checks out both repositories side by side.

Usage
-----

[](#usage)

The model behind your resource must use the core `HasSEO` trait:

```
use Rankbeam\Seo\Traits\HasSEO;

class Post extends Model
{
    use HasSEO;
}
```

Then add the section to the resource — two lines:

```
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
        ]);
    }
}
```

`static::seoSection(['title', 'description'])` limits the section to a subset of fields (`title`, `description`, `focus_keywords`, `canonical`, `robots`, `og_image`).

The tabbed Google/social preview is shown by default. Pass `showPreview: false` to omit it (the source-indicators panel is unaffected):

```
static::seoSection(showPreview: false);   // or SEOFields::make(showPreview: false)
```

Without the trait, `SEOFields::make()` returns the same section directly.

> **Upgrading:** the preview view was replaced by the tabbed editor. If you published the package views, refresh or remove the stale copy — see [`UPGRADING.md`](UPGRADING.md).

Structured data (optional)
--------------------------

[](#structured-data-optional)

Add a second, optional section so editors can attach schema.org JSON-LD without code:

```
static::seoSchemaSection(),     // or SEOSchemaFields::make()
```

It writes into the core `seo_meta.schema_jsonld` column and is pure UI binding over the core schema builders — a one-toggle **automatic breadcrumb**(`BreadcrumbSchema::fromModelAncestors()`) plus a repeater of **FAQ** (`FAQSchema`) and **Product** (`ProductSchema`) blocks. Every built document is validated by the core `SchemaValidator`; a malformed block (e.g. a Product with no offer) is rejected on save. Schema it can't represent (a hand-authored `@graph`, an exotic `@type`, richer Product fields) is preserved verbatim. See the [Filament fields guide](https://github.com/rankbeam/laravel-seo) for details.

Testing
-------

[](#testing)

```
composer update --with "filament/filament:~4.0" && vendor/bin/pest   # Filament 4 leg
composer update --with "filament/filament:~5.0" && vendor/bin/pest   # Filament 5 leg
```

The suite covers render, live counter states, create + edit save round-trips (including og:image upload), field clearing, URL validation, source-indicator attribution for every resolver layer, focus-keyword round-trips, the editorial preview (SERP + social tabs, the `showPreview` opt-out, the server-side preview payload — manual-vs-fallback image source, known-local dimension measurement, remote-image deferral, and shared-threshold warnings), and the structured-data editor (FAQ / Product build + round-trip, automatic breadcrumb, validation rejection, optimistic-concurrency reconciliation, and custom-schema preservation).

### Testbench note (provider order)

[](#testbench-note-provider-order)

If you boot Filament in orchestra/testbench yourself, register Filament's `SupportServiceProvider` **before** `LivewireServiceProvider`. Filament rebinds Livewire's `DataStore` (which drops Livewire's registered instance); only Livewire's later mechanism registration pins the resolved override as the shared instance. Package discovery produces this order naturally in a real app — a hand-rolled provider list might not. The symptom of getting it wrong is `ViewErrorBag::put(): Argument #2 ($bag) must be of type MessageBag, null given` on every Livewire test.

License
-------

[](#license)

MIT — see [LICENSE.md](LICENSE.md).

###  Health Score

42

—

FairBetter than 88% of packages

Maintenance97

Actively maintained with recent releases

Popularity5

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~4 days

Total

6

Last Release

24d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/176622217?v=4)[Valentin Goxhaj](/maintainers/Fibonoir)[@Fibonoir](https://github.com/Fibonoir)

---

Top Contributors

[![Fibonoir](https://avatars.githubusercontent.com/u/176622217?v=4)](https://github.com/Fibonoir "Fibonoir (27 commits)")

---

Tags

laravelseofilamentfilament-pluginmeta-tags

###  Code Quality

TestsPest

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/rankbeam-laravel-seo-filament/health.svg)

```
[![Health](https://phpackages.com/badges/rankbeam-laravel-seo-filament/health.svg)](https://phpackages.com/packages/rankbeam-laravel-seo-filament)
```

###  Alternatives

[schmeits/filament-character-counter

This is a Filament character counter TextField and Textarea form field for Filament v4 and v5

34226.4k14](/packages/schmeits-filament-character-counter)[wsmallnews/filament-nestedset

Filament nestedset tree builder powered by kalnoy/nestedset with Filament v4 and v5 support

197.8k19](/packages/wsmallnews-filament-nestedset)[devletes/filament-progress-bar

Reusable progress bar components for Filament 5 tables and infolists.

105.0k](/packages/devletes-filament-progress-bar)[qalainau/filament-inbox

Email-like inbox messaging plugin for Filament v5 — threads, starring, trash, forwarding, read receipts, and multi-tenancy out of the box.

171.5k](/packages/qalainau-filament-inbox)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
