Facets Pretty Paths
Facetsモジュールのクエリ文字列パラメータを人間が読みやすいパスセグメントに変換することで、クリーンでSEOフレンドリーなURLパスを提供します。
facets_pretty_paths
インストール
composer require 'drupal/facets_pretty_paths:^2.0'
概要
Facets Pretty Pathsは、Facetsモジュールが生成するデフォルトのファセットURLを、クエリ文字列ベースのパラメータ(例:/search?f[0]=color:blue)からクリーンで読みやすいパスセグメント(例:/search/color/blue)に変換します。このアプローチにより、より直感的で共有しやすいURLが作成され、SEOパフォーマンスとユーザーエクスペリエンスの両方が向上します。
このモジュールは、ファセット値をURLにエンコードする方法と、元の値にデコードする方法を決定するプラグイン可能な「Coder」システムを提供します。これにより、フィルタリングされるデータの種類(タクソノミーターム、リストアイテム、ノード参照など)に応じて、異なるエンコーディング戦略を使用できます。複数の組み込みCoderが提供されており、Coderプラグインインターフェースを実装することでカスタムCoderを作成することもできます。
ファセットソースで有効にすると、モジュールはソースのルートを動的に変更して、ファセットフィルターをパスセグメントとして受け入れます。また、フィルタリングされた検索結果ページのパンくずリストを自動生成する機能も提供します。
Features
- クエリ文字列パラメータの代わりにクリーンなパスセグメントを生成するURL Processorプラグイン(例:/brand/drupal/color/blue)
- URL内のファセット値をエンコード・デコードするためのプラグイン可能なCoderシステム - ファセットごとにカスタム変換ロジックを設定可能
- 変換なしで生の値を使用する組み込みDefault Coder(例:/color/2)
- 一意性のためにターム名とIDを使用する組み込みTaxonomy Term Coder(例:/color/blue-2)
- よりクリーンなURLのためにターム名のみを使用する組み込みTaxonomy Term Name Coder(例:/color/blue)
- ラベルとIDを使用するオプションリストフィールド用の組み込みList Item Coder(例:/status/published-1)
- ノードタイトルとIDを使用するエンティティ参照フィールド用の組み込みNode Title Coder(例:/author/john-smith-42)
- ファセットソースルートでfacets_queryパラメータを受け入れるための自動ルート変更
- URLパスセグメントを解析して現在アクティブなファセット選択を判定するアクティブフィルターサービス
- 適切なナビゲーションリンクを持つファセット検索ページ用のカスタムパンくずリストビルダー
- 親子関係の処理を含む階層ファセットのサポート
- 適切なURLコンテキスト保持によるViewsのAJAXサポート
- ファセットコンテキストを含むViews Data Exportのバッチ処理サポート
Use Cases
SEO最適化されたEコマースフィルタリング
オンラインストアがFacets Pretty Pathsを使用して、商品フィルター用のクリーンでインデックス可能なURLを作成します。/products?f[0]=category:shoes&f[1]=color:blueの代わりに、顧客は/products/category/shoes/color/blueを見ることができます。これにより検索エンジンのインデックス作成が改善され、ユーザーは特定のフィルタリングされたビューをブックマークして共有できます。
多言語タクソノミーフィルタリング
多言語サイトがTaxonomy Term Name Coderを使用して、ユーザーの言語でファセット値を表示します。英語で「Electronics」カテゴリでフィルタリングする場合、URLは/search/category/electronicsと表示され、同じフィルターがドイツ語では/search/kategorie/elektronikと表示され、ローカルSEOが向上します。
コンテンツタイプフィルタリング
ニュースポータルがリストフィールドを使用してタイプ別に記事をフィルタリングできます。List Item Coderを使用すると、URL /news/type/opinion-3は、信頼性の高いデコードのための内部値参照を維持しながら、フィルターを明確に示します。
著者ベースのコンテンツフィルタリング
ブログがエンティティ参照フィールドを使用してコンテンツを著者プロフィールにリンクします。Node Title Coderは/articles/author/jane-doe-15のような、人間が読みやすく一意に識別可能なURLを作成します。
カスタムCoder実装
複雑なファセット値要件を持つサイトがカスタムCoderプラグインを実装します。encode()およびdecode()メソッドを持つCoderInterfaceを実装することで、開発者は商品バリアントのSKUやカテゴリのカスタムスラッグなど、サイト固有のURLエンコーディングロジックを作成できます。
Tips
- ファセットの「URLエイリアス」を短く説明的な名前に設定してください。これがURLパスの一部になります(例:「field_product_brand」ではなく「brand」)
- Taxonomy Term Name Coderは、あいまいなデコードを避けるために、ボキャブラリー内でターム名が一意であることが保証されている場合にのみ使用してください
- ファセットの重み設定はURLのパスセグメントの順序に影響するため、一貫した順序付けがキャッシュとSEOに役立ちます
- カスタムCoderはCoderInterfaceを実装することで作成できます - URL生成用のencode()とパース用のdecode()を定義します
- パンくずリストビルダーの優先度は1500です。他のパンくずリストモジュールと競合する場合は調整できます
- デバッグ時は、「facets_query」ルートパラメータを確認して、解析される生のフィルター文字列を確認してください
Technical Details
Admin Pages 2
/admin/config/search/facets/facet-sources/{facet_source_id}/edit
ファセットソースのURLハンドラーを設定します。このソースを使用するすべてのファセットで、クエリ文字列パラメータの代わりにクリーンなURLパスを有効にするには「Pretty paths」を選択します。
/admin/config/search/facets/{facets_facet}/edit
ファセットソースでPretty Pathsが有効になっている場合、「ファセット設定」セクションに追加の「Pretty paths coder」設定が表示され、この特定のファセットの値がURLでどのようにエンコードされるかを選択できます。
Hooks 1
hook_form_facets_facet_edit_form_alter
ファセットソースでPretty Pathsが有効になっている場合、ファセット編集フォームを変更してPretty Paths Coder選択を追加します。
Troubleshooting 6
個々のファセットだけでなく、ファセットソースの設定でURLハンドラーとして「Pretty paths」を選択していることを確認してください。設定を変更した後、ルートを再構築するためにすべてのキャッシュをクリアしてください。
ルートが再構築されていない可能性があります。「drush cr」または/admin/config/development/performanceからキャッシュをクリアしてください。また、ベースパスが存在し、ファセットソースが正しく設定されていることを確認してください。
ファセットのPretty Paths Coder設定を「Default」から「Taxonomy term name + id」または「Taxonomy term name」に変更してください(好みに応じて)。
この問題はissue #3129632で対処されました。モジュールを最新バージョンに更新してください。この修正により、ファセットコンテキストがAJAXリクエストパラメータとrefererヘッダーから抽出されるようになりました。
データベースの制限により、routerテーブルには255文字のパス制限があります。モジュールはコアルーティングの問題を回避するためにプレースホルダーパラメータを追加しますが、非常に長いフィルターの組み合わせは制限を超える可能性があります。同時にアクティブにするファセットの数を減らすことを検討してください。
名前のみのCoderは設定されたボキャブラリー内のすべてのタームを検索します。複数のタームが同じ名前を持つ場合、最初に一致したものを返します。一意性を保証するには「Taxonomy term name + id」Coderを使用してください。
Security Notes 3
- URL内のファセット値は、音訳を適用し安全でない文字を削除するPathautoのエイリアスクリーナーを使用してサニタイズされます
- モジュールはエンコード/デコード操作中にエンティティをロードする際にアクセスチェックを使用します
- URLパスセグメントからの入力は、処理前に既存のファセット設定に対して適切に検証されます