Сегодня я хочу поделиться с вами опытом генерации sitemap для поисковиков. Зачем это надо ?? спросите вы, да все просто надо помочь поисковику чтобы он знал важность страниц вашего сайта их количество дату последнего обновления и желаемую частоту обновления индексированых страниц, в основном это касается динамического контента.
http://webmaster.yandex.ru/ адрес для веб мастеров
https://www.google.com/webmasters/ адрес для веб мастеров
Не для кого не секрет о том что гугл вебмастер и яндекс вебмастер дают возможность подказывать им указывая ссылки на файлы sitemap. Ограничение у гугла на количество ссылок страниц для одного файла составляет 50000. елси вы не смогли всместить все свои ссылки тогда будьте любезны создайте еще один файл и отправьте его.
Гугл позволяет давать ему около видов sitemap, такие как:
Яндекс позволяет тоже скармливать несколько файлов карт тоже.
для страниц можно выставить частоту обновления контента. Поддерживаются следующие форматы:
Формат протокола Sitemap состоит из тегов XML. Для всех значений данных в Sitemap должно использоваться маскирование. Для самого файла должна использоваться кодировка UTF-8.
Ниже приведен пример Sitemap, в который включен только один URL, но используются все необязательные теги. Необязательные теги выделены курсивом.
< urlset xmlns="http://www.google.com/schemas/sitemap/0.84"> < url> < loc>http://www.example.com/</loc> < lastmod>2005-01-01</lastmod>
< changefreq>monthly</changefreq>
< priority>0.8</priority> </url> </urlset>
Sitemap должен:
Более подробно вы сможете прочитать на этой странице
https://www.google.com/webmasters/tools/docs/ru/protocol.html - инструкция по генерации файла карты
А теперь перейдем собственно к програмированию выдачи такого файла.
Как обычно сгенерируем контроллер Sitemap c екшином xml
script/genetate Sitemap xml
и так собержание файла контролера Sitemap.rb
class SitemapController < ApplicationController
def xml
@forums = Forum.find(:all)
@messages = Message.find(:all, :order => "updated_at DESC", :limit => 25000)
@blogs = Blog.find(:all, :order => "updated_at DESC", :limit => 25000)
@last_updated = [@messages[0].updated_at,@blogs[0].updated_at].max
headers["Content-Type"] = "text/xml"
headers["Last-Modified"] = @last_updated.httpdate
render :layout => false
end
end
Что я хочу показать поисковику?
ссылки на страницы с разделами форума, ссылки на страницы с сообщениями, и страницы сообщений с блогах.
замечу что я добавил в файл routes.rb следующую строчку
map.sitemap "/sitemap.xml", :controller => "sitemap", :action => "xml"
и переименовал файл который у меня сгенерировался на views/sitemap/xml.rxml , привожу его содержание
xml.instruct! :xml, :version=>"1.0"
xml.tag! 'urlset', "xmlns" => "http://www.sitemaps.org/schemas/sitemap/0.9" do
#README https://www.google.com/webmasters/tools/docs/ru/protocol.html
#главная страница
xml.tag! 'url' do
xml.tag! 'loc', 'http://'+SITE_DOMAIN
xml.tag! 'lastmod', @last_updated.to_s(:date)
xml.tag! 'changefreq', 'daily'
xml.tag! 'priority', '0.1'
end
#разедлы
xml.tag! 'url' do
xml.tag! 'loc', url_for(:only_path => false, :controller => 'forums', :action => 'list')
xml.tag! 'lastmod', @last_updated.to_s(:date)
xml.tag! 'changefreq', 'daily'
xml.tag! 'priority', '0.1'
end
xml.tag! 'url' do
xml.tag! 'loc', blogs_url
xml.tag! 'lastmod', @last_updated.to_s(:date)
xml.tag! 'changefreq', 'monthly'
xml.tag! 'priority', '0.9'
end
#разделы форума
for f in @forums do
xml.tag! 'url' do
xml.tag! 'loc', url_for(:only_path => false, :controller => 'messages', :action => 'list', :forum => f.id)
xml.tag! 'lastmod', f.updated_at.to_s(:date) #strftime("%Y-%m-%d")
xml.tag! 'changefreq', 'monthly'
xml.tag! 'priority', '0.9'
end
end
#Страницы блогов
for blog in @blogs do
xml.tag! 'url' do
xml.tag! 'loc', formatted_blog_url(blog,:html)
xml.tag! 'lastmod', blog.updated_at.to_s(:date) #strftime("%Y-%m-%d")
xml.tag! 'changefreq', 'daily'
xml.tag! 'priority', '0.8'
end
end
#страницы сообщений на форуме
for page in @messages do
xml.tag! 'url' do
xml.tag! 'loc', url_for(:only_path => false, :controller => 'messages', :action => 'show', :id => page.id)
xml.tag! 'lastmod', page.updated_at.to_s(:date) #strftime("%Y-%m-%d")
xml.tag! 'changefreq', 'monthly'
xml.tag! 'priority', '0.7'
end
end
end
По мимо того что я показал поисковику ссылки на динмический контент тут я еще указал ссылки на разделы и страницы которые я считаю важными, повысив их приоритет при обходе ботом и указав частоту обновления каждый день.
Удачи всем в продвижении своего сайта 
sitemap это хорошо…
ток механизьм IMHO какой то сложный вышел…
вместо
xml.tag! ‘loc’, formatted_blog_url(blog,:html)
можно писать
xml.loc formatted_blog_url(blog,:html)
на 5 копеек дешевле :)
скармливание яндексу карты сайта показало, что это хороший вариант заставить яндекс проиндексировать сайт который только что написали.