Как згенерировать sitemap.xml в Rails приложении

Эта статья о том, как згенерировать sitemap.xml файл для вашего сайна написаного на Ruby on Rails.

Файл sitemap будет доступным по следующему URL http://example.com/sitemap.xml

Ниже будет пошаговаю инструкция, поэтому следуйте инструкции и все должно работать:)

Routes

Rails.application.routes.draw do
  get "/sitemap.xml" => "sitemap#index", :format => "xml", :as => :sitemap
end

Controller

Сразу приведу пример того, как генерировать динамический контент.

class SitemapController < ApplicationController
  def index
    @pages = ['', 'about', 'borrow', 'lend', 'marketplace']
    @campaigns = Campaign.live_only.select(:id, :updated_at).all
    respond_to do |format|
      format.xml
    end
  end
end

View

XML будет сгенерирован с помощью XML builder.

Создайте файл ‘sitemap/index.xml.builder’. В этом файле вы можете использовать методы xml билдера.

xml.instruct! :xml, :version=>"1.0"
xml.tag! 'urlset', 'xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9', 'xmlns:image' => 'http://www.google.com/schemas/sitemap-image/1.1', 'xmlns:video' => 'http://www.google.com/schemas/sitemap-video/1.1' do
  xml << (render 'sitemap/partials/common', pages: @pages, base_url: "#{HOST}/", priority: 0.9, frequency: 'monthly')
  xml << (render 'sitemap/partials/campaigns', campaigns: @campaigns, priority: 0.5, frequency: 'weekly')
end

создайте частичные файлы(partials):

# app/views/sitemap/partials/_common.xml.builder
pages.each do |page|
  xml.url do
    xml.loc base_url+page
    xml.priority priority
    xml.changefreq frequency
  end
end
# app/views/sitemap/partials/_campaign.xml.builder
campaigns.each do |campaign|
  xml.url do
    xml.loc campaign_url(campaign)
    xml.priority priority
    xml.changefreq frequency
    xml.lastmod campaign.updated_at.to_date.strftime
  end
end

Перед тем как использовать код, пожалуйста, прочтите руководство по sitemap.xml на официальном сайте.

Тема: 
LikeMe: