Генерация Sitemap для Rails приложений

Разрабатывая сайт на Ruby on Rails многие сталкиваются с созданием файла sitemap.xml. Решают эту проблему по разному. Сегодня мы рассмотрим как автоматически генерировать sitemap.

Автор . Дата: 29.10.2014

Разрабатывая сайт на Ruby on Rails многие сталкиваются с созданием файла sitemap.xml. Многие решают эту проблему по разному. Сегодня мы рассмотрим как автоматически генерировать sitemap.

Для этого нам потребуется гем sitemap_generator. Включим его в Gemfile:

gem 'sitemap_generator'

После чего создадим таск sitemapgen.rake в /lib/tasks. И запишем в него следующий код:

require File.expand_path(File.dirname(__FILE__) + "/../../config/environment")

task :sitemapgen do
  SitemapGenerator::Sitemap.default_host = 'http://lan143.ru'
  SitemapGenerator::Sitemap.create do
    add '/', :changefreq => 'daily', :priority => 1

    categories = Category.all
    categories.each do |category|
      add category_path(category), :changefreq => 'daily', :priority => 0.8
    end

    records = Record.all
    records.each do |record|
      add category_record_path(record.category, record), :changefreq => 'daily', :priority => 0.5
    end
  end
end

Немного подробностей. Первая строка с require включает и делает доступными все наши Rails модели, контроллеры, маршруты и т.п. Затем идет объявление таска. В SitemapGenerator::Sitemap.default_host указываем адрес вашего сайта. Затем с помощью методов add добавляем различные ссылки. 

    categories = Category.all
    categories.each do |category|
      add category_path(category), :changefreq => 'daily', :priority => 0.8
    end

С помощью этого кода мы перебрали все категории, получили ссылки для них и добавили их в коллекцию. По той же аналогии поступаем с записями. Вы можете подобным образом автоматически обработать любой динамический элемент вашего сайта. Когда код скрипта готов, сохраняем его и в дирректории Rails приложения выполняем:

rake sitemapgen

После отработки скрипта вы увидите примерно такой вывод:

In '~/public/':
+ sitemap.xml.gz                                           8 links /  395 Bytes
Sitemap stats: 8 links / 1 sitemaps / 0m00s

и будет создан файл sitemap.xml.gz в дирректории public. Теперь вы можете указать ссылку на него в robots.txt:

Sitemap: http://lan143.ru/sitemap.xml.gz

Вот и все :-) Файл sitemap готов и поисковики при индексации сайта будут его использовать. Вы можете повесить выполнение скрипта на крон и выполнять его например каждый час (если у вас большая текучка контента) или запускать вручную.