Google sitemap files for Rails projects

后端 未结 6 1969
情深已故
情深已故 2020-12-07 08:13

Is there an easy way to create a sitemaps file for Rails projects? Especially for dynamic sites (such as Stack Overflow for example) there should be a way to dynamically cre

6条回答
  •  攒了一身酷
    2020-12-07 09:02

    Add this route towards the bottom of your config/routes.rb file (more specific routes should be listed above it):

    map.sitemap '/sitemap.xml', :controller => 'sitemap'
    

    Create the 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
    

    —As you can see, this is for a blog, so is using a Post model. This is the HAML view template (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
    

    That's it! You can test it by bringing up http://localhost:3000/sitemap.xml (if using Mongrel) in a browser, or perhaps by using cURL.

    Note that the controller uses the stale? method to issue a HTTP 304 Not Modified response if there are no new posts sinces the sitemap was last requested.

提交回复
热议问题