有没有一种简单的方法可以为 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?
如果自上次请求站点地图以来没有新帖子,控制器将使用该方法发出 HTTP 304 Not Modified 响应。
现在对于 rails3,最好使用全功能的sitemap_generator gem。
我喜欢约翰托普利的回答,因为它是如此简单和优雅,不需要宝石。但它有点过时了,所以我更新了他对 Rails 4 和 Google Webmaster Tools 最新站点地图指南的回答。
配置/路由.rb:
get 'sitemap.xml', :to => 'sitemap#index', :defaults => { :format => 'xml' }
应用程序/控制器/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
应用程序/视图/站点地图/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::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 文件中。接下来,您告诉 Google XML 文件的位置以及您的网站何时更新。
一个简单的Google rails 站点地图查询揭示了许多其他解释基本相同事物的文章。