コンテンツへ移動

Rankbeamとは?

RankbeamはLaravel向けのオープンコアSEO基盤です。メタデータ、正規URL、ソーシャルカード、相互にリンクしたJSON-LD、サイトマップ、クローラー制御を提供する無料のMITコアと、任意で追加する商用Proの監視・ワークフロー機能で構成されます。 アプリに付け足す実行時のタグヘルパーではありません。自分のモデルと設定からSEOを解決し、同じ型付きデータをBlade、Inertiaのhead、JSON APIとして描画します。Proを使えば、デプロイ後も監視を続けます。

パッケージ構成

Rankbeamは、共通の対応バージョン表を持つ3つのパッケージで構成されます。

パッケージライセンス内容
rankbeam/laravel-seoMIT、無料コア:メタデータの解決、相互にリンクしたJSON-LDスキーマグラフ、XMLサイトマップ、クローラー制御、無料のseo:audit、インポーター
rankbeam/laravel-seo-filamentMIT、無料コアのseo_metaに書き込むFilament 4/5のフォームフィールドとライブプレビュー
rankbeam/laravel-seo-pro商用運用エンジン:0–100のスコア付きキュースキャン、リダイレクト管理、IPを保存しない404監視、リンク切れクローラー、Search Consoleインサイト、自分のキーを使うAI支援

この境界は意図的なものです。描画されたページが出力するものはすべてMITで、今後も無料です。料金の対象は本番環境の監査と監視の層です。商用Proは別パッケージであり、無料コアに含まれることはありません。

想定する利用者

Rankbeamが役立つのは、SEOを保存し、モデルに結び付け、複数ロケールで扱い、ヘッドレスで利用し、監査する場合です。動的なコンテンツやモデルに基づくコンテンツを持つ本番Laravelアプリが該当します。少数の静的ページにタイトルとディスクリプションを1つずつ付けるだけなら、小さな実行時メタヘルパーの方が適しています。後述の個別パッケージの組み合わせで十分な場合でも、その点を明記しています。

対応バージョン

全パッケージ共通の対応表です。

  • PHP 8.2–8.4(Laravel 11)、8.2–8.5(Laravel 12)、8.3–8.5(Laravel 13)
  • Laravel 11 / 12 / 13(Laravel 13にはPHP 8.3以降が必要)
  • Filament 4 / 5(任意)

Rankbeamが置き換えないもの

RankbeamはLaravelアプリ自身のSEO出力を統合します。ホスト型の順位追跡サービス、キーワード調査ツール群、アクセス解析製品ではなく、順位、インデックス登録、AIによる引用を約束するものでもありません。XMLサイトマップの生成には独自実装ではなくspatie/laravel-sitemapを利用します。コンテンツ、ルーティング、アクセス解析は既存の仕組みを維持できます。

初めて使う場合は無料コアをインストールするか、このまま本番環境での実際の置き換え事例をご覧ください。Proと初期購入者向けオファーはrankbeam.devで案内しています。

3つのパッケージと連携コードでは足りない理由

多くのLaravelアプリが持つのは単一の「SEOパッケージ」ではなく、SEOスタックです。モデルごとにメタデータを保存するパッケージ、Filamentにフィールドを追加する別のパッケージ、ページをスキャンする3つ目のパッケージを組み合わせ、アプリ固有の連携層で整合させています。個々の部品には問題がありません。コストが生じるのはそれらの接続部分であり、その連携コードは自分で保守し続ける必要があります。

このページでは、そのような構成をRankbeamファミリーに置き換えた、実際の本番移行の結果を示します。以下の数値は宣伝用の推定ではなく実測です。

事例のアプリ

実際に本番稼働しているLaravelのコンテンツサイトです(ここでは匿名化しています)。

  • 本番稼働約3か月の病院・組織向けコンテンツサイト
  • WordPressから移行し、サイトマップ上で約900ページ。
  • 1日約20,000訪問
  • Laravel 12Filament 4の管理画面、Bladeフロントエンド、MySQL。

置き換え前のSEOスタックは次のとおりでした。

パッケージ
メタデータ保存(モデルごとのseoテーブル)ralphjsmit/laravel-seo
FilamentのSEOフィールドralphjsmit/laravel-filament-seo
ページスキャナーbackstage/laravel-seo-scanner
各層をつなぐ処理全般約30のアプリ独自クラス

3つのパッケージを削除し、Rankbeamのコア + Pro + FilamentをインストールしてSEOテストスイートを実行したところ、SEOのリグレッションはゼロでアプリが起動しました。以下では、連携層に実際に必要だったものと、不要になったものを示します。

置き換えで削除できたもの

スキャナーの構成をRankbeamに置き換えることで、12の独自クラスを完全に削除できました。同等の処理をパッケージファミリーが担うため、アプリ側で維持する必要がなくなったものです。

削除したアプリのクラス役割現在の提供元
Services/SeoService.phpアプリのSEOエントリーポイントのラッパーコアリゾルバー + SEOファサード
Services/SeoWarningEvaluator.phpタイトル・ディスクリプションの長さと画像寸法のしきい値コアのSEOWarningEvaluator(監査・プレビュー・スキャンで共用)
Services/Seo/SeoAssetInspector.phpローカル画像の寸法検査コアのLocalImageInspector
Jobs/ScanAllPagesSeo.phpサイト全体のスキャンをキューへ投入Proのキュー型スキャンパイプライン
Jobs/ScanPageSeo.phpページ単位のスキャンProのPageScanner
Jobs/ScanPublicPageSeo.php公開ページ単位のスキャンProのスキャンパイプライン
Models/SeoScanBatch.phpスキャン実行の記録管理Proのseo_scan_runs
Filament/Pages/SeoDashboard.phpSEO管理ダッシュボードProのSeoDashboardプラグイン
Filament/Widgets/SeoScanProgressWidget.phpスキャン進捗ウィジェットProのスキャンウィジェット
Filament/Widgets/SeoTrendChartWidget.phpスキャン推移ウィジェットProのスキャンウィジェット
Facades/Seo.php保存パッケージを包むアプリのファサードコアのSEOファサード
Console/Commands/RecoverLegacySeoMetadata.php一度限りのメタデータ復旧コアのインポーターseo:import-from

残したものも明記

移行時には、アプリ独自のリンク切れクローラー(約17クラス:スキャンジョブ、チェッカー、シード生成、ソース解決、2つのモデル、2つの列挙型、2つのイベント、Filamentリソースと3つのウィジェット、2つのコマンド)と、メタデータ・スキーマ用のヘルパー(CustomSEOEntitySeoSectionDynamicSeoDataResolverSitewideSchemaSeoKeywords)を意図的に残しました。合わせてさらに約22クラスです。初日に削除しなかったのは、Rankbeam側の代替機能がその後に追加されたためです。独自クローラーにはProのリンク切れクローラーCustomSEO/EntitySeoSectionにはFilamentの関連モデルの対象指定SERP・ソーシャルプレビューSitewideSchemaにはコアのスキーマグラフが対応します。ファミリー全体を採用すれば、合計およそ36クラスに及ぶ独自処理をパッケージ側に移せます。

個々のパッケージが悪いという話ではありません。問題は統合部分です。メタデータの変更をスキャナー、ダッシュボード、描画されたheadへ反映する十数以上の連携クラスは独自コードであり、上流の保守元も、自分たち以外のテストも、他の利用者からのバグ報告もありません。

機能の比較

機能個別構成(3パッケージ + 連携コード)Rankbeamファミリー
モデルごとのメタデータ保存メタデータ用パッケージコアseo_meta、MIT)
ロケール対応の保存通常は連携層で対応コアseo_metaのカラムでロケールを区分
FilamentのSEOフィールドFilament-SEOパッケージlaravel-seo-filament(MIT)
関連モデルのSEO編集フィールドコンポーネントを自分でラップ標準のtarget:リゾルバー
SERP + ソーシャルのライブプレビューBlade/Alpineで独自実装編集用のタブ付きプレビューを内蔵
ヘッドレス描画(Inertia / Livewire / JSON)事例のアプリはBladeを使用。他の構成には連携が必要1つのリゾルバー → Blade、Inertia、Livewire、JSON(共通仕様に対してテスト済み
ページスキャナー + 優先順位付きの問題スキャナーパッケージProスキャンパイプライン + IssueRegistry
0–100のスコア連携コードで実装、またはなしProの明示的でバージョン管理された基準
リダイレクト + 404からの復旧別パッケージまたは独自実装Proのリダイレクト管理 + IPを保存しない404監視
リンク切れクローラー独自実装(事例のアプリでも自作)Proの上限付き・再開可能なクローラー
JSON-LDスキーマグラフビルダー + 独自の@id連携コアの相互リンクしたOrganization/WebSite/WebPageグラフ
XMLサイトマップサイトマップ用パッケージコアのサイトマップレジストリ(spatie/laravel-sitemapを利用)
WordPress / Yoast / Rank Mathのインポート一度限りのスクリプトコアseo:import-from + 実行手順書
接続部分の保守担当自分たち同じリリース系列のパッケージファミリー

連携コードでは対応しにくい3つの点

1 — 一体として開発されるファミリーとリリース系列。 個別の3パッケージには、3組の保守者、変更履歴、更新周期があります。そのずれを吸収するのが連携コードです。Rankbeamのコア、Pro、Filamentは、共通の対応表と文書化された更新時の境界に沿ってバージョン管理されます。挙動の変更は一か所で告知され、2つのパッケージの不一致によって初めて発見する必要はありません。

2 — 慣習ではなくカラムとしてのロケール対応。 seo_metaは保存層でポリモーフィックかつロケール別に区分されています。複数ロケールのSEOは(model, locale)ごとの行であり、シリアライズした塊や後付けの連携テーブルではありません。リゾルバーの優先順位は現在のロケールを標準で読み取ります。

3 — 1つのリゾルバーによるヘッドレス描画。 Rankbeamは型付きのSEODataを解決し、同じデータをHTML、InertiaのHeadペイロード、JSON配列として描画します。BladeInertia(Vue/React/Svelte)、Livewireについて共通の出力仕様に照らして検証しています。管理画面は不要で、Proのすべての機能もartisanからヘッドレスで実行できます。

無料コアに含まれないもの

Rankbeamはオープンコアであり、その境界は意図的です。composer requireを実行する前に、何が含まれるか把握できます。

パッケージライセンス含まれるもの
rankbeam/laravel-seoMIT、無料メタデータの解決、JSON-LDスキーマグラフ、サイトマップ、無料のseo:audit、インポーター
rankbeam/laravel-seo-filamentMIT、無料seo_metaに書き込むFilamentフォームのフィールドとセクション
rankbeam/laravel-seo-pro商用キュースキャン + 優先順位付きの問題 + 0–100のスコア、リダイレクト、404監視、リンク切れクローラー、Search Console、AI支援、Filamentダッシュボード

有料となるのは、テクニカルSEO監査サイト監視の機能群です。スキャン、スコア、リダイレクト、404からの復旧、クローラーが該当します。メタデータエンジン、スキーマグラフ、サイトマップ、同一プロセス内の無料監査はMITで、無料のままです。

確認できる特徴は2つあります。

  • 実行時のライセンス確認なし。 Proはインストール時にプロジェクト単位でライセンスを付与します。ライセンス確認のための外部通信はなく、停止スイッチでアプリが落ちることもありません。Proは自分のログ向けにローカルの運用テレメトリを出力しますが、オプトアウトでき、当方に送ることはありません。
  • 自分のキーを使うAI。 任意のAI支援は、利用者自身のAnthropic、OpenAI、Google、またはローカルモデルのキーを使います。Rankbeamが中継、従量課金、再販売することはなく、デフォルトは無効です。

個別パッケージの組み合わせで十分な場合

少数の静的ページに<title>とディスクリプションを1つずつ付けるだけなら、実行時のタグビルダーで十分です。Rankbeamが役立つのは、SEOを保存し、複数ロケールで扱い、モデルに結び付けヘッドレスで利用し、監査する場合です。パッケージ間の連携が実際に保守すべきコードになる段階が目安です。

リスクを抑えたWordPressからの移行

事例のアプリは約900ページのWordPress移行でした。長年積み重ねたYoast/Rank Mathの最適化を失うリスクが大きい利用者です。Rankbeamでは、その移行を安全な手順として扱います。

  1. 併用する。 稼働中のサイトと並行してRankbeamを用意します。この段階では何も削除しません。
  2. インポートする(先にdry-run)。 seo:import-from yoast / rank-math / wordpress-csvでタイトル、ディスクリプション、正規URL、robots、フォーカスキーワード、ソーシャル用の上書き値を読み取ります。インポーターは冪等で、デフォルトでは空欄だけを補完します。--overwriteを指定しなければ設定済みのメタデータを保持し、--dry-runでは何も書き込みません。
  3. リダイレクトを引き継ぐ。 コアがバージョン付きのリダイレクトCSVを出力します。Proのseo-pro:redirects-importは書き込み前に全行を検証し、ループ、安全でない宛先、重複を拒否します。
  4. 削除の前に検証する。 seo:audit --strictは、問題が1つでもあれば非ゼロで終了するCI・切り替え判定用のゲートです。従来のWordPressデータベースは、自分で削除を選ぶまで変更されません。

全手順はWordPress移行の実行手順書、フィールドごとの対応とトークン処理はWordPressからの移行を参照してください。LaravelのSEOパッケージ(ralphjsmit、artesaos、Spatie)から切り替える場合は、パッケージ移行ガイドを参照してください。

規模が大きくても対応できるか

事例アプリの厳しい条件である、1日約20k件のリクエストすべてでのリゾルバー実行と、約900ページのリンククロールには、それぞれテストスイート内のベンチマークがあります。検証するのは手動調整した実時間ではなく、クエリ数とジョブの上限という決定的な改善です。

リゾルバーのキャッシュ:保存済みキャッシュにヒットすればDBアクセスはゼロ。 任意の解決結果キャッシュを有効にすると、キャッシュヒット時は優先順位の連鎖全体を省略します。ベンチマークでは同じモデルを25回解決します。

DBクエリ数
キャッシュなし(毎回seo_metaを再読込)≥ 25
保存済みキャッシュにヒット0

キャッシュはデフォルトで無効で、大規模運用向けの選択肢として文書化しています。seo_meta、コンテンツフィールド、デフォルト値を変更すると、対応するエントリが無効になります。設定 → キャッシュを参照してください。

リンク切れクローラー:900ページでもジョブごとに上限を維持。 クローラーのベンチマークでは、生成した約900ページのコーパスを実際のジョブで処理します。

  • 18以上の上限付きジョブで完了(1ジョブ50ページまで)。
  • どのジョブも50ページの上限を超えて巡回しません。
  • 1,800リンクを確認し、到達不能な宛先をすべて、リンク切れ確認済みの永続的な検出結果として記録します。

実行ごとの有限の上限と、ジョブごとの厳格な時間枠を設けています。シードの取得時とすべてのリダイレクトの各段階でSSRF検証を行い、DBリースによりスコープごとに有効な実行を1つに制限します。運用方法は本番環境の設定ガイドを参照してください。

実行環境でのテスト

3つに分かれた対応表ではなく、全ファミリーで1つの対応表を使います。

  • PHP 8.2–8.4(Laravel 11)、8.2–8.5(Laravel 12)、8.3–8.5(Laravel 13)
  • Laravel 11 / 12 / 13
  • Filament 4 / 5

3つのパッケージを連携させ続けるべきか

個別の構成を統合するために十数以上の独自クラス、自分では制御できないリリース周期、構成固有の描画連携、手作業で追加するロケール処理が必要になる一方、一体として開発されたヘッドレス・ロケール対応のファミリーで連携コードを削除でき、実際の900ページ・1日20k件の本番アプリで実績があるなら、個別構成を安全なデフォルトと考え続ける理由は薄れます。

クイックスタートから始めてください。composer requireから完全な<head>の描画まで5分で進められます。

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