Upgrading from fibonoir/laravel-seo v1
v2.0.0 renames the package to rankbeam/laravel-seo and carves it down to a focused core: meta resolution, rendering, JSON-LD, and sitemaps. The analyzer, scanner, redirects, 404 monitor, and admin UI moved to separate packages.
1. Swap the package
bash
composer remove fibonoir/laravel-seo
composer require rankbeam/laravel-seo2. Update namespaces
Class names are unchanged; only the root namespace moved: Fibonoir\LaravelSEO\* → Rankbeam\Seo\*. A project-wide find-and-replace covers it. The SEO facade alias and the @seo Blade directives are unchanged.
3. Delete stale published files
Before removing files or tables, back up the published configuration and export the affected data. Verify that you can restore it. This guide does not migrate v1 redirect, 404 or scan history into Pro's different schema; the core-table compatibility below applies only to seo_meta and seo_defaults.
This bites silently
v1's seo:install published files into your app that will fight the v2 package without producing a single error message.
config/seo.php— if yours was published by v1 (or byralphjsmit/laravel-seo, which v1's installer could leave behind), it shadows the package config and can null outsite_nameand every{site_name}template. Delete it, then re-publish:php artisan vendor:publish --tag=seo-config.- v1 migrations for tables the core no longer owns:
seo_redirects,seo_404_logs,seo_scan_runs,seo_scan_issues,seo_analytics_cache,seo_internal_links_index. Remove the migration files. If the tables exist in production, drop them before installingrankbeam/laravel-seo-pro— Pro recreates them with a different schema. - Published stubs under
app/andresources/jsfrom v1's Filament 3 / Livewire / Vue / React flow — they reference classes that no longer exist.
The two core tables (seo_meta, seo_defaults) are schema-compatible; your data survives the upgrade.
4. Removed features and where they went
| v1 feature | Where it lives now |
|---|---|
| Filament SEO form section | rankbeam/laravel-seo-filament (free, MIT) |
| Content analyzer (32 rules) | The old analyzer is not carried forward by this migration. Technical-SEO issue detection lives in rankbeam/laravel-seo-pro's site scanner; the numeric SEO score is a Pro feature (issue-derived). |
| Sitewide scanner | rankbeam/laravel-seo-pro — queued pipeline + dashboard |
| Redirect manager | rankbeam/laravel-seo-pro — hardened (regex validation, open-redirect guards) |
| 404 monitor | rankbeam/laravel-seo-pro — privacy-first (no IPs stored by default) |
| GA4 analytics, internal links | rankbeam/laravel-seo-pro backlog |
seo:install installer | Gone — install is require, publish config, migrate |
5. Behavior changes to review
og:image/twitter:imageare always absolute URLs. v1 emitted manually-set relative paths verbatim.- Derived canonicals strip the query string. Explicit canonicals are preserved verbatim.
- Sitemap auto-discovery defers to registered sources — no more duplicate
sitemap-post.xmlnext to a registeredsitemap-posts.xml. - JSON-LD is
JSON_HEX_*-escaped — if you post-process raw script output, expect<-style escapes.
6. Known gotchas
- Laravel's default
DatabaseSeederusesWithoutModelEvents, which disablesHasSEO's auto-create hook in seeders. - If a route-default title template already contains your brand, end the template with the configured
title_suffix— the resolver then skips appending it again.