Файлы Sitemap Google для проектов Rails - PullRequest
59 голосов
/ 16 января 2010

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

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

Ответы [ 6 ]

47 голосов
/ 16 января 2010

Добавьте этот маршрут в конец вашего файла 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, если нет новых сообщений, поскольку карта сайта была запрошена последним.

23 голосов
/ 22 декабря 2010

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

19 голосов
/ 08 октября 2013

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

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

10 голосов
/ 01 сентября 2011

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

6 голосов
/ 30 октября 2010

Вот плагин для создания карт сайта в 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

С уважением, Лассе

1 голос
/ 16 января 2010

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

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

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

...