mahdijd/seo-management
Laravel SEO management package for controlling meta tags, titles, descriptions, canonical URLs, Open Graph data, sitemaps, robots directives, and redirects from your application. It centralizes on-page SEO configuration and generates search-friendly output with less custom boilerplate.
This release is a compatibility release: the package now supports Filament 5 while continuing to support Filament 4. There are no new end-user features, so start by confirming which Filament major your application is on and whether your other Filament plugins are ready for the same major.
composer show filament/filament
php artisan about
composer require vendor/package:^1.1
php artisan vendor:publish --tag=package-config
php artisan vendor:publish --tag=package-migrations
php artisan vendor:publish --tag=package-assets
app/Providers/Filament/AdminPanelProvider.php:
use Vendor\Package\PackagePlugin;
public function panel(Panel $panel): Panel
{
return $panel
->plugin(PackagePlugin::make());
}
php artisan migrate
php artisan filament:optimize-clear
php artisan optimize:clear
First use case: register the plugin on a single panel, load the panel in the browser, and confirm the plugin's resources, widgets, or UI extensions appear. If your app has multiple panels, register it only where it is needed rather than globally.
Pin the Filament major in CI. Since v1.1.0 supports both Filament 4 and 5, test the package against the same Filament major your production app uses. A simple matrix in GitHub Actions or your CI provider catches accidental cross-major regressions:
matrix:
filament: ['^4.0', '^5.0']
Then require the matching constraint in a test job:
composer require filament/filament:"${{ matrix.filament }}" --no-update
composer update
Keep plugin registration panel-scoped. Filament plugins are usually registered per panel. For multi-panel applications, create a small helper or conditional so the plugin is only added to panels that need it:
$panel->plugin(PackagePlugin::make())
->when(fn () => config('app.features.package_plugin'));
Publish only what you need to customise. Prefer config overrides and view overrides over forking the package. Publish views only when you need to change markup, and keep the published files under version control so upgrades are visible in diffs.
Use Filament's testing helpers for plugin-backed resources. If the package exposes resources or pages, write Livewire tests using Filament's testing utilities:
use function Pest\Livewire\livewire;
livewire(SomeResource\Pages\ListRecords::class)
->assertCanSeeTableRecords($records);
Treat the package as part of your Filament upgrade plan. When upgrading from Filament 4 to 5, upgrade Filament, this package, and your other Filament plugins together. Do not upgrade the package alone and assume the rest of the panel will work.
Use composer why-not before debugging dependency conflicts. With updated constraints in v1.1.0, conflicts are more likely to be caused by another package still pinning Filament 4 or 5:
composer why-not vendor/package:^1.1
composer why-not filament/filament:^5.0
composer.lock and run your test suite before deploying.--force only when you intentionally want to overwrite customised published files.php artisan filament:optimize-clear and php artisan optimize:clear resolve most "plugin not appearing" issues.migrate. Never run unreviewed package migrations directly in production.php artisan about and composer show when debugging. They quickly confirm the installed Filament and package versions, which is usually the first question when a panel behaves unexpectedly.How can I help you explore Laravel packages today?