Файлы Sitemap Google для проектов Rails

Есть ли простой способ создать файл sitemaps для проектов Rails? Специально для динамических сайтов (например, Stack Overflow, например) должен быть способ динамически создавать файл sitemaps. Каков путь в Ruby и/или Rails?

Что бы вы предложили? Есть ли хороший камень?

Ответ 1

Добавьте этот маршрут в нижнюю часть вашего config/routes.rb файла (более конкретные маршруты должны быть указаны выше):

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

Создайте SitemapController (приложение/контроллеры/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

&mdash. Как вы можете видеть, это для блога, поэтому используется модель Post. Это HAML шаблон просмотра (приложение/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, если нет новых сообщений, в которых запрашивается последний файл Sitemap.

Ответ 2

Теперь для rails3 лучше использовать полнофункциональный sitemap_generator gem.

Ответ 3

Я люблю ответ Джона Топли, потому что он такой простой и изящный, без необходимости драгоценного камня. Но это немного устарело, поэтому я обновил его ответ для рекомендаций Rails 4 и рекомендаций Google по веб-сайтам Google.

конфиг/routes.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.

Ответ 4

Я бы порекомендовал вам проверить карту sitemap_generator. Он обрабатывает все эти проблемы для вас... и действительно, кто хочет возиться с созданием 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

Затем вы используете задачи Rake для обновления так часто, как вам хотелось бы. Это действительно так просто:)

Ответ 5

Вот плагин для создания sitemaps в Ruby on Rails: Плагин Sitemap для плагинов Ruby on Rails. Он заботится о большей части логики и генерации файла Sitemap. Плагин с моей домашней страницы.

Пример конфигурации:

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

В этой статье объясняется, как можно создать файл Sitemap.

В принципе следует создать контроллер, который находит все страницы (например, ваши сообщения) и помещается в файл XML. Затем вы сообщите Google о местоположении файла XML и обновлении вашего веб-сайта.

Простой запрос Google rails sitemap показывает много других статей, объясняющих в основном одно и то же.