web-dev-qa-db-ja.com

RailsプロジェクトのGoogleサイトマップファイル

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

何を提案しますか?良い宝石はありますか?

59
z3cko

このルートを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レスポンスを発行することに注意してください。

47
John Topley

Rails3では、フル機能の sitemap_generator gemを使用する方がよいでしょう。

23
Ninad

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を起動してテストできます。

19
Aaron Gray

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

10
Karl Varga

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

よろしく、ラッセ

6
Lasse Bunk

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

基本的には、すべてのページ(例:投稿)を見つけてXMLファイルに入れるコントローラーを作成する必要があります。次に、XMLファイルの場所とWebサイトが更新されるタイミングをGoogleに通知します。

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

1
Veger