it-swarm.com.ru

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

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

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

59
z3cko

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

47
John Topley

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

23
Ninad

Мне нравится ответ Джона Топли, потому что он такой простой и элегантный, без необходимости в драгоценном камне. Но он немного устарел, поэтому я обновил его ответ на Rails 4 и последние рекомендации по карте сайта для Инструментов 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.

19
Aaron Gray

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

10
Karl Varga

Вот плагин для создания файлов сайтов в Ruby на Rails: 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
Lasse Bunk

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

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

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

1
Veger