Рекомендуемый способ или плагин для создания карт сайта Google для приложения Ruby on Rails?

StackOverflow https://stackoverflow.com/questions/810478

  •  03-07-2019
  •  | 
  •  

Вопрос

Я выполнил быстрый поиск в Google и не нашел ничего особенного для автоматизации создания и обновления карты сайта Google для приложения Ruby on Rails.Какие-либо предложения?

Это было полезно?

Решение

Совсем недавно я добавил динамическую карту сайта в приложение блога.Эти шаги должны помочь вам начать.

Добавьте этот маршрут в конец вашего config/routes.rb файл (над ним должны быть указаны более конкретные маршруты):

map.sitemap '/sitemap.xml', :controller => 'sitemap'

Создайте SitemapController (приложение/контроллеры/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 модель.

Это шаблон представления (app/views/sitemap/index.xml.builder):

base_url = "http://#{request.host_with_port}"
xml.instruct! :xml, :version=>'1.0'
xml.tag! 'urlset', 'xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9' do
  for post in @posts do
    xml.tag! 'url' do
      xml.tag! 'loc', "#{base_url}#{post.permalink}"
      xml.tag! 'lastmod', post.last_modified
      xml.tag! 'changefreq', 'monthly'
      xml.tag! 'priority', '0.5'
    end
  end
end

Вот и все!Вы можете проверить это, вызвав http://localhost:3000/sitemap.xml (при использовании Mongrel) в браузере или, возможно, с помощью cURL.

Обратите внимание, что контроллер использует stale? метод для выдачи ответа HTTP 304 Not Modified, если с момента последнего запроса карты сайта не было новых сообщений.

Другие советы

Я бы действительно не рекомендовал использовать контроллер и просто маршрутизировать к нему, например, «/sitemap.xml», потому что, если ваши карты сайта будут расти, это приведет к пустой трате ресурсов.Было бы лучше выполнять рейк-задачу и обновлять карты сайта примерно каждую ночь, в зависимости от того, как часто меняется контент.

Если на вашем сайте не около 50 000 страниц и вы не планируете иметь больше, то вы можете поместиться в один файл карты сайта, тогда я предлагаю вам использовать "Карты Google Sitemap с Ruby on Rails, Capistrano и Cron«Я знаю, что он работает прилично, потому что я успешно им пользуюсь.

Примечание: Я бы не советовал использовать авторский способ копирования карт сайта каждый раз при запуске задачи развертывания, на мой взгляд, это нечистоплотно.Лучше использовать общий каталог и символическую ссылку на него при развертывании, тогда у вас будет только одна версия файлов и вы будете тратить пространство, если останутся лишние копии.У меня есть это в моем Deploy.rb:

desc "Symlink the upload directories"
task :before_symlink do
  run "rm -drf #{release_path}/public/sitemaps"
  run "ln -s #{shared_path}/sitemaps #{release_path}/public/sitemaps"
end

Также вы можете использовать "Большая карта сайта«Жемчужина, но я нашел ее только сейчас и не могу сказать, насколько она хороша.Похоже, что этот драгоценный камень очень легко настроить, и он также использует ваши рельсовые маршруты для генерации ссылок, так что вам придется решать на одну проблему меньше, чем с первым решением.

Google Sitemap Generator — это официальная версия Google.Его легко установить и настроить.

http://code.google.com/p/googlesitemapgenerator/

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top