<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>elanbeat's weblog: typoをGoogle Sitemapに対応させる</title>
    <link>http://ja.elanbeat.com/articles/2006/05/15/generating-sitemap-of-typo</link>
    <language>ja</language>
    <ttl>40</ttl>
    <description>Lotus Elan on the Rail</description>
    <item>
      <title>typoをGoogle Sitemapに対応させる</title>
      <description>&lt;p&gt;Googleのインデックスに自サイトのURLを効率的に登録する方法として&lt;a href="http://www.google.com/webmasters/sitemaps"&gt;Google Sitemap&lt;/a&gt; が利用できます。typoでもGoogle Sitemapを利用できるように、&lt;a href="https://www.google.com/webmasters/sitemaps/docs/en/protocol.html"&gt;Google Sitemap Protocol&lt;/a&gt; を自動で生成させてみます。&lt;/p&gt;
&lt;h2&gt;準備&lt;/h2&gt;


	&lt;p&gt;Google Sitemapについてはここでは説明しません。すでにアカウントを持っていて、操作について知っているものとします。例えば、実際の利用には自サイトの所有者の確認等の作業が必要となります。&lt;/p&gt;


	&lt;h2&gt;方針&lt;/h2&gt;


	&lt;p&gt;typoでsitemap.xmlを生成する方法は、&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://hedleyrobertson.com/articles/2006/02/07/google-sitemaps-in-typo"&gt;Google Sitemaps in Typo&lt;/a&gt; [hedleyrobertson.com]&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;で解説されています。またこの元ネタとして、Ruby on Railsのフレームワークでsitemap.xmlを生成する基本的な方法が、&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://blog.ipangels.com/blog/_archives/2005/6/18/951620.html"&gt;IP Angels :: Generating Google SiteMaps with Ruby on Rails&lt;/a&gt; [ipangels.com]&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;で解説されています。&lt;/p&gt;


	&lt;p&gt;前者の様にtypoのxml_controller.rbで生成してももちろんよいのですが、xml_controller.rbにパッチが当たることがある&lt;sup&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt;ため、ここでは後者の方法でcontrollerを独立させてることにします。&lt;/p&gt;


	&lt;h2&gt;TypoでのSitemap生成&lt;/h2&gt;


	&lt;h3&gt;controllerの作成&lt;/h3&gt;


	&lt;p&gt;app/controllers/sitemap_controller.rbを作成する。&lt;/p&gt;


&lt;pre&gt;
&lt;/code&gt;
class SitemapController &amp;lt; ContentController
  caches_action :sitemap
  session :off

  def sitemap
    @headers[&amp;#8216;Content-Type&amp;#8217;] = &amp;#8216;text/xml; charset=utf-8&amp;#8217;
    @articles = Article.find(:all, :conditions =&amp;gt; &amp;#8216;published=1&amp;#8217;, :order =&amp;gt; &amp;#8216;created_at &lt;span class="caps"&gt;DESC&lt;/span&gt;&amp;#8217;)
    @pages = Page.find(:all, :order =&amp;gt; &amp;#8216;created_at &lt;span class="caps"&gt;DESC&lt;/span&gt;&amp;#8217;)
  end
end
&lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;注意: 最新のchangeset(1042～1053あたり)ではpublish関連で大幅な変更がなされています。最新版ではcreated_atの代わりにpublished_atを使うべきですが、ここではcreated_atを使っています。&lt;/p&gt;


	&lt;h3&gt;viewの作成&lt;/h3&gt;


	&lt;p&gt;app/views/sitemap/sitemap.rxmlを作成する。&lt;/p&gt;


&lt;pre&gt;
&lt;/code&gt;
xml.instruct! :xml, :version=&amp;gt; &amp;#8216;1.0&amp;#8217;, :encoding =&amp;gt; &amp;#8216;UTF-8&amp;#8217;
xml.urlset( :xmlns =&amp;gt; &amp;#8216;http://www.google.com/schemas/sitemap/0.84&amp;#8217;) do
  # First entry is the main entry to the site
  xml.url do
    xml.loc server_url_for(:controller =&amp;gt; &amp;#8220;articles&amp;#8221;)
    xml.changefreq &amp;#8216;daily&amp;#8217;
    xml.priority &amp;#8216;0.9&amp;#8217;
  end

  for entry in @articles
    xml.url do
      xml.loc article_url(entry, false)
      xml.lastmod entry.updated_at.xmlschema
      xml.changefreq &amp;#8216;weekly&amp;#8217;
      # xml.priority &amp;#8216;0.5&amp;#8217; # default
    end
  end

  for page in @pages
    xml.url do
      xml.loc url_for(:controller =&amp;gt; &amp;#8220;pages&amp;#8221;, :action =&amp;gt; page.name, :only_path =&amp;gt; false )
      xml.lastmod page.updated_at.xmlschema
      xml.changefreq &amp;#8216;weekly&amp;#8217;
      xml.priority &amp;#8216;0.5&amp;#8217;
    end
  end
end
&lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;注意: ここでは&lt;a href="http://hedleyrobertson.com/articles/2006/02/07/google-sitemaps-in-typo"&gt;元記事&lt;/a&gt; に従って、indexの優先度を0.9に、各記事を0.5にしています。&lt;/p&gt;


	&lt;h3&gt;route.rbの設定&lt;/h3&gt;


	&lt;p&gt;config/route.rbにマッピングを追加する。&lt;/p&gt;


&lt;pre&gt;
&lt;/code&gt;
  map.xml &amp;#8216;sitemap.xml&amp;#8217;, :controller =&amp;gt; &amp;#8216;sitemap&amp;#8217;, :action =&amp;gt; &amp;#8216;sitemap&amp;#8217;
&lt;/code&gt;
&lt;/pre&gt;

	&lt;h2&gt;テーマ毎に設定する&lt;/h2&gt;


	&lt;p&gt;以上の設定でhttp://yourblog/sitemap.xmlが生成されるようになったはずです。複数のブログを運営しているなどでtheme毎に生成の仕方を変化させたい場合は、app/views/sitemap/sitemap.rxmlをtheme/your_theme/views/sitemap/sitemap.rxmlにコピーして変更します。&lt;/p&gt;


	&lt;h2&gt;パラメータのチューニング&lt;/h2&gt;


	&lt;p&gt;上記ではindexのプライオリティを0.9, 各記事のプライオリティを0.5(デフォルト)にしてありますが、私はindexを0.5, 各記事を0.9にしています。本ブログでのindexは所詮記事の冒頭部分のリストでしかありませんし、またタイムラグも発生するためです。&lt;/p&gt;


	&lt;p&gt;また、今回はアーカイブやタグ関連のURLについては生成していませんが、様子を見ながら追加していくことも必要かもしれません。本ブログの場合はindexと同様にプライオリティを下げる方向にする予定です。(sitemap.xmlにURLがなくても通常のクロールによりインデックス化されます。詳細はGoogle Sitemapのヘルプをご覧下さい。)&lt;/p&gt;


	&lt;p&gt;その他、更新頻度やクロールさせるページ毎のチューニングは、サイトのポリシーに従って設定する必要があります。&lt;/p&gt;


	&lt;h2&gt;参考&lt;/h2&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://wiki.elanbeat.com/instiki/show/TypoGoogleSitemapHowTo"&gt;TypoをGoogle Sitemapに対応させる&lt;/a&gt; [wiki.elanbeat.com]&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p id="fn1"&gt;&lt;sup&gt;1&lt;/sup&gt; 最近ではAtom Feed関連の修正など&lt;/p&gt;


	&lt;h2&gt;広告&lt;/h2&gt;


&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=elanbeatswebl-22&amp;#38;o=9&amp;#38;p=8&amp;#38;l=as1&amp;#38;asins=4274066401&amp;#38;fc1=333333&amp;#38;IS2=1&amp;#38;lt1=_blank&amp;#38;lc1=0000FF&amp;#38;bc1=ffffff&amp;#38;bg1=ffffff&amp;#38;f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;</description>
      <pubDate>Mon, 15 May 2006 02:00:00 +0900</pubDate>
      <guid isPermaLink="false">urn:uuid:c8556b6d-dbef-4ba1-a852-b51a8622e653</guid>
      <author>elanbeat</author>
      <link>http://ja.elanbeat.com/articles/2006/05/15/generating-sitemap-of-typo</link>
      <category>blog</category>
      <category>software</category>
      <category>typo</category>
      <category>typosphere</category>
      <category>rubyonrails</category>
      <category>google</category>
      <category>sitemap</category>
      <trackback:ping>http://ja.elanbeat.com/articles/trackback/205</trackback:ping>
    </item>
  </channel>
</rss>
