Railsプロジェクトのサイトマップファイルを作成する簡単な方法はありますか?特に動的サイト(たとえば、Stack Overflowなど)の場合、サイトマップファイルを動的に作成する方法が必要です。RubyやRailsで行く方法は何ですか?
あなたは何を提案しますか?そこに良い宝石はありますか?
Railsプロジェクトのサイトマップファイルを作成する簡単な方法はありますか?特に動的サイト(たとえば、Stack Overflowなど)の場合、サイトマップファイルを動的に作成する方法が必要です。RubyやRailsで行く方法は何ですか?
あなたは何を提案しますか?そこに良い宝石はありますか?
このルートをファイルの下部に追加しconfig/routes.rb
ます(より具体的なルートをその上にリストする必要があります)。
map.sitemap '/sitemap.xml', :controller => 'sitemap'
SitemapController
(app / controllers / sitemap_controller)を作成します。
class SitemapController < ApplicationController
layout nil
def index
headers['Content-Type'] = 'application/xml'
last_post = Post.last
if stale?(:etag => last_post, :last_modified => last_post.updated_at.utc)
respond_to do |format|
format.xml { @posts = Post.sitemap } # sitemap is a named scope
end
end
end
end
—ご覧のとおり、これはブログ用であるため、Post
モデルを使用しています。これはHAMLビューテンプレート(app / views / sitemap / index.xml.haml)です。
- base_url = "http://#{request.host_with_port}"
!!! XML
%urlset{:xmlns => "http://www.sitemaps.org/schemas/sitemap/0.9"}
- for post in @posts
%url
%loc #{base_url}#{post.permalink}
%lastmod=post.last_modified
%changefreq monthly
%priority 0.5
それでおしまい!ブラウザでhttp:// localhost:3000 / sitemap.xml(Mongrelを使用している場合)を表示するか、cURLを使用してテストできます。
サイトマップが最後にリクエストされてから新しい投稿がない場合、コントローラはこのstale?
メソッドを使用してHTTP304未変更応答を発行することに注意してください。
rails3の場合は、フル機能のsitemap_generatorgemを使用することをお勧めします。
宝石を必要とせず、とてもシンプルでエレガントなので、ジョン・トプリーの答えが大好きです。しかし、少し古いので、Rails4とGoogleWebmasterToolsの最新のサイトマップガイドラインに対する彼の回答を更新しました。
config / routers.rb:
get 'sitemap.xml', :to => 'sitemap#index', :defaults => { :format => 'xml' }
app / controllers / sitemap_controller.rb:
class SitemapController < ApplicationController
layout nil
def index
headers['Content-Type'] = 'application/xml'
last_post = Post.last
if stale?(:etag => last_post, :last_modified => last_post.updated_at.utc)
respond_to do |format|
format.xml { @posts = Post.all }
end
end
end
end
app / views / sitemap / index.xml.haml:
!!! XML
%urlset{:xmlns => "http://www.sitemaps.org/schemas/sitemap/0.9"}
- for post in @posts
%url
%loc #{post_url(post)}/
%lastmod=post.updated_at.strftime('%Y-%m-%d')
%changefreq monthly
%priority 0.5
localhost:3000/sitemap.xmlを起動してテストできます。
sitemap_generatorgemをチェックすることをお勧めします。それはあなたのためにこれらすべての問題を処理します...そして本当に、誰がXMLのオーサリングを台無しにしたいですか?
Railsモデルとパスヘルパーを使用してサイトマップURLを生成する方法を示すサイトマップの例を次に示します。
# config/sitemap.rb
SitemapGenerator::Sitemap.default_host = "http://www.example.com"
SitemapGenerator::Sitemap.create do
add '/contact_us'
Content.find_each do |content|
add content_path(content), :lastmod => content.updated_at
end
end
次に、Rakeタスクを使用して、必要な頻度で更新します。それは本当に簡単です:)
Ruby onRailsでサイトマップを作成するためのプラグインは次のとおりです。RubyonRailsサイトマッププラグイン。サイトマップのロジックと生成のほとんどを処理します。プラグインは私のホームページからのものです。
構成例:
Sitemap::Map.draw do
# default page size is 50.000 which is the specified maximum at http://sitemaps.org.
per_page 10
url root_url, :last_mod => DateTime.now, :change_freq => 'daily', :priority => 1
new_page!
Product.all.each do |product|
url product_url(product), :last_mod => product.updated_at, :change_freq => 'monthly', :priority => 0.8
end
new_page!
autogenerate :products, :categories,
:last_mod => :updated_at,
:change_freq => 'monthly',
:priority => 0.8
new_page!
autogenerate :users,
:last_mod => :updated_at,
:change_freq => lambda { |user| user.very_active? ? 'weekly' : 'monthly' },
:priority => 0.5
end
よろしく、ラッセ
この記事では、サイトマップを生成する方法について説明します。
基本的に、すべてのページ(投稿など)を検索してXMLファイルに入れるコントローラーを作成する必要があります。次に、XMLファイルの場所とWebサイトがいつ更新されるかをGoogleに通知します。
単純なGoogleRailsサイトマップクエリは、基本的に同じことを説明している他の多くの記事を明らかにします。