コンテンツへ移動

fibonoir/laravel-seo v1からのアップグレード

v2.0.0ではパッケージ名をrankbeam/laravel-seoに変更し、Coreの機能をメタデータの解決・出力、JSON-LD、サイトマップに絞りました。アナライザー、スキャナー、リダイレクト、404監視、管理UIは別パッケージに移動しました。

1. パッケージを入れ替える

bash
composer remove fibonoir/laravel-seo
composer require rankbeam/laravel-seo

2. 名前空間を更新する

クラス名は変わりません。ルート名前空間だけがFibonoir\LaravelSEO\*Rankbeam\Seo\*に変わりました。プロジェクト全体で検索・置換すれば対応できます。ファサードの別名SEOとBladeディレクティブ@seoは変わりません。

3. 古い公開済みファイルを削除する

ファイルやテーブルを削除する前に、公開済みの設定をバックアップし、影響するデータをエクスポートしてください。復元できることも確認します。このガイドは、v1のリダイレクト、404、スキャン履歴を、スキーマが異なるProに移行するものではありません。以下で説明するCoreテーブルの互換性は、seo_metaseo_defaultsだけに適用されます。

エラーが出ないまま競合します

v1のseo:installがアプリに公開したファイルは、エラーメッセージを一切出さずにv2パッケージと競合することがあります。

  • config/seo.php — v1、またはv1のインストーラーが残していた可能性のあるralphjsmit/laravel-seoで公開したファイルは、パッケージの設定より優先され、site_nameやすべての{site_name}テンプレートをnullにしてしまう場合があります。削除後、php artisan vendor:publish --tag=seo-configで再公開してください。
  • v1のマイグレーションのうち、Coreが管理しなくなったテーブルは、seo_redirectsseo_404_logsseo_scan_runsseo_scan_issuesseo_analytics_cacheseo_internal_links_indexです。対応するマイグレーションファイルを削除してください。本番にテーブルが存在する場合は、rankbeam/laravel-seo-proをインストールする前に削除します。Proが異なるスキーマで作り直すためです。
  • 公開済みのスタブ — v1のFilament 3 / Livewire / Vue / React向けフローでapp/resources/jsに公開したものは、存在しなくなったクラスを参照しています。

2つのCoreテーブル(seo_metaseo_defaults)にはスキーマ互換性があり、アップグレード後もデータは保持されます。

4. 削除された機能と移動先

v1の機能現在の場所
FilamentのSEOフォームセクションrankbeam/laravel-seo-filament(無料、MIT)
コンテンツアナライザー(32ルール)この移行では旧アナライザーを引き継ぎません。テクニカルSEOの問題検出はrankbeam/laravel-seo-proのサイトスキャナーにあります。数値のSEOスコアは、検出した問題から算出するPro機能です。
サイト全体のスキャナーrankbeam/laravel-seo-pro — キューによる処理パイプラインとダッシュボード
リダイレクト管理rankbeam/laravel-seo-pro — 正規表現の検証とオープンリダイレクト防止を強化
404監視rankbeam/laravel-seo-pro — プライバシーを重視(デフォルトではIPを保存しません)
GA4分析、内部リンクrankbeam/laravel-seo-proのバックログ
seo:installインストーラー廃止 — インストールはrequire、設定の公開、マイグレーションの順です

5. 確認すべき動作変更

  • og:image / twitter:imageは常に絶対URLになります。 v1では手動で設定した相対パスをそのまま出力していました。
  • 導出した正規URLからクエリ文字列を除去します。 明示的な正規URLはそのまま保持します。
  • サイトマップの自動検出より登録済みソースが優先されます。 登録済みのsitemap-posts.xmlに加えて、重複するsitemap-post.xmlが出力されることはなくなります。
  • JSON-LDはJSON_HEX_*でエスケープされます。 生のscript出力を後処理している場合は、<形式のエスケープを考慮してください。

6. 既知の注意点

  • Laravel標準のDatabaseSeederWithoutModelEventsを使うため、シーダー内ではHasSEOの自動作成フックが無効になります。
  • ルートのデフォルトタイトルテンプレートにすでにブランド名が含まれる場合は、設定したtitle_suffixでテンプレートを終えてください。リゾルバーが二重の追加を省略します。

rankbeam/laravel-seoはMITライセンスで公開されています。