What is sitemap:
Sitemaps are an easy way for webmasters to inform search engines about pages on their sites that are available for crawling. In its simplest form, a Sitemap is an XML file that lists URLs for a site along with additional metadata about each URL (when it was last updated, how often it usually changes, and how important it is, relative to other URLs in the site) so that search engines can more intelligently crawl the site.
It’s basically a XML file describing all URLs in your page:
The following example shows a Sitemap that contains just one URL and uses all optional tags. The optional tags are in italics.
<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <loc>http://www.example.com/</loc> <lastmod>2005-01-01</lastmod> <changefreq>monthly</changefreq> <priority>0.8</priority> </url> <url> <loc>http://www.example.com/catalog?item=12&desc=vacation_hawaii</loc> <changefreq>weekly</changefreq> </url> <url> <loc>http://www.example.com/catalog?item=73&desc=vacation_new_zealand</loc> <lastmod>2004-12-23</lastmod> <changefreq>weekly</changefreq> </url> <url> <loc>http://www.example.com/catalog?item=74&desc=vacation_newfoundland</loc> <lastmod>2004-12-23T18:00:15+00:00</lastmod> <priority>0.3</priority> </url> <url> <loc>http://www.example.com/catalog?item=83&desc=vacation_usa</loc> <lastmod>2004-11-23</lastmod> </url> </urlset>
Creating your dynamic sitemap with Ruby on Rails:
First write this on your routes file.
map.sitemap "/sitemap.:format", :controller => "home", :action => "sitemap", :conditions => { :method => :get }
So sitemap URL will be http://www.mysite.com/sitemap.xml
Now on controller write some method to fetch data.
@posts = Post.all @categories = Category.all
Now the logic is done and you have to create view for your sitemap to show that sitemap when some request riches http://www.mysite.com/sitemap.xml.
We need to build a XML containing the 3 main nodes to make it a sitemap:
loc – The URL of your page
priority – The priority of the indexing page process between 0 and 1
lasmod – Date of the last modification
changefreq- How frequently the page is likely to change. This value provides general information to search engines and may not correlate exactly to how often they crawl the page. Valid values are
- always
- hourly
- daily
- weekly
- monthly
- yearly
- never
First node is mandatory, the others are optional. Using the XML builder, create the file sitemap.xml.builder to our sitemap and put the next lines:
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 xml.url do xml.loc "#{base_url}" xml.changefreq "monthly" xml.priority 1.0 end xml.url do xml.loc "#{base_url}/FAQ" xml.lastmod Time.now.to_date xml.changefreq "monthly" xml.priority 1.0 end xml.url do xml.loc "#{base_url}/contact-us" xml.lastmod Time.now.to_date xml.changefreq "monthly" xml.priority 1.0 end xml.url do xml.loc "#{base_url}/about" xml.lastmod Time.now.to_date xml.changefreq "monthly" xml.priority 1.0 end @categories.each do |category| xml.url do xml.loc category_url(category) xml.priority 0.9 end end @posts.each do |post| xml.url do xml.loc post_url(post) xml.lastmod post.updated_at.to_date xml.changefreq "always" xml.priority 0.9 end end @categories.each do |category| xml.url do xml.loc category_url(category) xml.lastmod post.updated_at.to_date xml.changefreq "always" xml.priority 0.9 end end end
That’s it. Happy coding 🙂