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?
メソッドを使用してHTTP 304 Not Modifiedレスポンスを発行することに注意してください。
Rails3では、フル機能の sitemap_generator gemを使用する方がよいでしょう。
John Topleyの回答は、宝石を必要とせず、とてもシンプルでエレガントなので、気に入っています。しかし、少し日付が古いので、Rails 4とGoogleウェブマスターツールの最新のサイトマップガイドラインについて、彼の回答を更新しました。
config/routes.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_generator gem をチェックすることをお勧めします。それはあなたのためにこれらすべての問題を処理します...そして、本当に、誰が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 on Rails: Ruby on Rails sitemap plugin )でサイトマップを作成するためのプラグインは次のとおりです。サイトマップのロジックと生成プラグインは私のホームページからです。
設定例:
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に通知します。
単純な Google Railsサイトマップ クエリは、基本的に同じことを説明する他の多くの記事を明らかにします。