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


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

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

6 57

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 запрос показывает много других статей, объясняющих в основном то же самое.