Файлы карты сайта Google для проектов Rails
есть ли простой способ создать файл sitemaps для проектов Rails? Специально для динамических сайтов (например, переполнение стека) должен быть способ динамического создания файла sitemaps. Как пройти в Ruby и / или Rails?
Что бы вы предложили? Есть ли там хороший камень?
6 ответов:
добавьте этот маршрут к нижней части вашего
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 (при использовании дворняги) в браузере, или, возможно, с помощью cURL.
обратите внимание, что контроллер использует
stale?
метод для выдачи ответа HTTP 304 Not Modified если нет новых сообщений, то Карта сайта была запрошена в последний раз.
теперь для rails3, лучше использовать полнофункциональный sitemap_generator камень.
Я люблю ответ Джона Топли, потому что это так просто и элегантно, без необходимости в драгоценном камне. Но это немного устарело, поэтому я обновил его ответ для Rails 4 и последних рекомендаций по карте сайта Google Webmaster Tools.
в config/маршруты.РБ:
get 'sitemap.xml', :to => 'sitemap#index', :defaults => { :format => 'xml' }
приложение/контроллеры/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.all } end end end end
приложение / просмотры / Карта сайта / индекс.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?
вот пример sitemap, чтобы показать, как вы используете свои модели Rails и помощники пути для создания URL-адресов sitemap:
# 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
затем вы используете рейк задачи для обновления так часто, как вы хотели бы. Это действительно так просто:)
вот плагин для создания sitemaps в 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-файл. Затем вы сообщаете Google о местоположении XML-файла и когда ваш сайт обновляется.
простой Карта сайта Google rails запрос показывает много других статей, объясняющих в основном то же самое.