Rails で検索フレンドリーな URL を作成する方法

URLにIDを表示させることは、SEO対策上、非常に無駄なことです。このブログでは、スラッグを利用してURLとページの内容をより関連性の高いものにする方法を紹介する。まず最初に、URLを変更するために暗黙の取り決め(to_param戦略に取って代わるもの)を利用し、しばらくしてから、friendly_idと呼ばれるgemを利用してスラッグを生成し、これらのスラッグで満たされた過去を維持します。検索エンジンがあなたのウェブページをインデックスするように。 例えば http://www.exaple.com/blogs/1http://www.exaple.com/blogs/blog-name ここでは 1 つのサンプルを作成しています レール5 ポストモデルを備えたアプリを使用して、きれいな URL でどのように正確に機能するかを示します。
Rails G scaffold 投稿タイトル:文字列 公開:ブール値
走る Rails データベース:移行 いくつかのサンプル投稿を作成します(http://localhost:3000/posts/new) app/models/post.rb
def to_param title.parameterize end
上記の方法をモデルに追加すると、すべてのリンクがきれいなURLに変更されます。indexページにすべての投稿が表示されていることを確認してください。しかし、それをクリックするとエラーページが表示されます。 Post.findメソッドはURLに渡しているidのレコードを見つけることができません。このモデルのために、DBに上記の投稿のスラッグを作成する必要があります。 スラッグ用のマイグレーションファイルを追加しましょう
Rails g 移行 AddSlugToPosts slug:string
上記の移行ファイルを開き、その sulg に uniq インデックスを追加します。スラッグは一意である必要があります。
class AddSlugToPosts < ActiveRecord::Migration[5.0] def change add_column :posts, :slug, :string add_index :posts, :slug, unique: true end end
走る データベース:移行 ここで、findメソッドの代わりに、showアクションのdbクエリをfind_byに変更する必要があります。スラッグに基づいて結果を取得する必要があるからです。 set_postメソッドを
def set_post Post.find_by_slug(params[:id]) 終了
これで、きれいな URL で期待どおりに動作するようになりました。 2 つのレコードの名前が同じであるため、2 つのレコードの URL が同じ場合はどうなるでしょうか。 .find_by は常に最初のレコードをフェッチするためです。これを解決するには、スラッグを保存する前に、以下で説明する方法でレコード ID をスラッグに結合できます。
def add_slug “#{id}-#{title.parameterize}” end
つまり、"1-blog-name "のように生成される。friendly_gemというgemを使えば、上記のシナリオを簡単に処理できる。 サンプルアプリから上記のコードを削除するのは自由です。 Friendly_id gem(レイルズ5) rubygem webから最新のgemをgemfileに追加し、bundleを実行する。
gem 'friend_id', '~> 5.1'
レールは Friendly_id を生成します
上記のコマンドは、初期化ファイルと移行ファイルを生成します。
db:移行を実行します
いくつかのレコードを作成し、set_post メソッドを以下に示す方法に変更します。古いレコードがある場合は、すべて再生成する必要があります。
def set_post Post.friend.find("Joe Schmoe".parameterize) end
app/models/post.rb
FriendlyId Friendly_id :slug_candidates を拡張、使用: [:slugged, :finders, :history] def slug_candidates [:title, [:title, :id] ] end
Post モデルに slug 属性を追加する
Rails g AddSlugToPosts slug:string
add_column :投稿、:スラッグ、:文字列
add_index :posts、:slug、一意: true
投稿タイトルを更新しています title 属性を更新すると、Slug も自動的に更新されます。ただし、スラッグを頻繁に更新しすぎるのは得策ではありません。古いブックマークを持っている可能性があるため、ブックマークされた URL をクリックするとアプリケーションでエラーがスローされる場合があります。これを防ぐには、Post モデルの use オプションに履歴シンボルを追加する必要があります。
def slug_candidates [:title, [:title, :id] ] 終了
friendlyId 5でslug_candidates機能が追加された。これにより、スラッグが重複している場合に何をすべきかを friendly id gem に伝えることができます。 上記のコードでは、FriendlyIdにスラッグを単一化するためにslug_candidatesテクニックを利用する必要があることを通知しています。そのため、上記のケースでは、まずタイトルを利用してスラッグを作成し、そのタイトルの投稿がすでに存在する場合は、再度IDを修正しようとします。 スラッグは検索エンジンが最初に読むものだ。スラッグがどれほど重要なものであるか、おわかりいただけただろうか。スラッグを利用するには、まず投稿モデルのfriendly_idアシスタントにスラッグの選択肢を追加します。
関連記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

jaJapanese