60

Railsプロジェクトのサイトマップファイルを作成する簡単な方法はありますか?特に動的サイト(たとえば、Stack Overflowなど)の場合、サイトマップファイルを動的に作成する方法が必要です。RubyやRailsで行く方法は何ですか?

あなたは何を提案しますか?そこに良い宝石はありますか?

4

6 に答える 6

48

このルートをファイルの下部に追加し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未変更応答を発行することに注意してください。

于 2010-01-16T14:46:51.260 に答える
24

rails3の場合は、フル機能のsitemap_generatorgemを使用することをお勧めします。

于 2010-12-22T11:51:20.517 に答える
20

宝石を必要とせず、とてもシンプルでエレガントなので、ジョン・トプリーの答えが大好きです。しかし、少し古いので、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を起動してテストできます。

于 2013-10-08T04:13:06.447 に答える
10

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タスクを使用して、必要な頻度で更新します。それは本当に簡単です:)

于 2011-09-01T18:39:04.130 に答える
6

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

よろしく、ラッセ

于 2010-10-29T21:54:36.120 に答える
1

この記事では、サイトマップを生成する方法について説明します。

基本的に、すべてのページ(投稿など)を検索してXMLファイルに入れるコントローラーを作成する必要があります。次に、XMLファイルの場所とWebサイトがいつ更新されるかをGoogleに通知します。

単純なGoogleRailsサイトマップクエリは、基本的に同じことを説明している他の多くの記事を明らかにします。

于 2010-01-16T13:34:20.413 に答える