石上です。
Google Sitemapは、Googleのクローラーにウェブサイトの更新を知らせるXMLファイルです。Googleのクローラーは、このファイルを元にインデックスを効率的に、かつ漏れなく作成することができるようになります。ちなみに、Google Sitemapの効果を検証する – 検索エンジン対策では、Google Sitemapsを利用する事によってSEOに有効だとしています。作成するのは面倒ですが、SEO対策にもなるようなので是非とも作成しましょう。
今回は、このGoogle SitemapにRadiant CMSで簡易的に対応してみたいと思います。
まず、更新情報に含めたくないページに「no_html」というような除外の目印となるパートを加えます。私の場合、RSSファイルやrobots.txtなどに加えました。
次に、「Google Sitemap」というレイアウトを作成します。その際、Content-typeを「text/xml」にするのがミソです。
レイアウト: Google Sitemap
<?xml version="1.0" encoding="UTF-8" ?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
<r:content />
</urlset>
<span class="cp"><?xml version="1.0" encoding="UTF-8" ?></span>
<span class="nt"><urlset</span> <span class="na">xmlns=</span><span class="s">"http://www.google.com/schemas/sitemap/0.84"</span><span class="nt">></span>
<span class="nt"><r:content</span> <span class="nt">/></span>
<span class="nt"></urlset></span>
次に、「sitemap_children」というスニペットを作成します。このスニペットのループの中で自分自身を呼び出すことで、再帰的に階層構造を巡回することが出来ます。ベースとなるURLは、各々の環境に合わせて変更してください。
スニペット: sitemap_children
<r:children:each>
<r:unless_content part="no_html">
<url>
<loc>http://www.example.com<r:url /></loc>
<priority>0.5</priority>
<changefreq>weekly</changefreq>
<lastmod><r:date format="%Y-%m-%dT%H:%M+09:00" for="updated_at" /></lastmod>
</url>
</r:unless_content>
<r:snippet name="sitemap_children" />
</r:children:each>
<span class="nt"><r:children:each></span>
<span class="nt"><r:unless_content</span> <span class="na">part=</span><span class="s">"no_html"</span><span class="nt">></span>
<span class="nt"><url></span>
<span class="nt"><loc></span>http://www.example.com<span class="nt"><r:url</span> <span class="nt">/></loc></span>
<span class="nt"><priority></span>0.5<span class="nt"></priority></span>
<span class="nt"><changefreq></span>weekly<span class="nt"></changefreq></span>
<span class="nt"><lastmod><r:date</span> <span class="na">format=</span><span class="s">"%Y-%m-%dT%H:%M+09:00"</span> <span class="na">for=</span><span class="s">"updated_at"</span> <span class="nt">/></lastmod></span>
<span class="nt"></url></span>
<span class="nt"></r:unless_content></span>
<span class="nt"><r:snippet</span> <span class="na">name=</span><span class="s">"sitemap_children"</span> <span class="nt">/></span>
<span class="nt"></r:children:each></span>
最後に、「sitemap.xml」というページを作成します。ルートのすぐ下に作成しましょう。レイアウトとして先ほど作成した「Google Sitemap」を指定すると、このページの処理結果が<r:content />の部分に出力されます。
ページ: sitemap.xml
<r:find url="/">
<url>
<loc>http://www.example.com<r:url /></loc>
<priority>1.0</priority>
<changefreq>daily</changefreq>
<lastmod><r:date format="%Y-%m-%dT%H:%M+09:00" for="updated_at" /></lastmod>
</url>
<r:snippet name="sitemap_children" />
</r:find>
<span class="nt"><r:find</span> <span class="na">url=</span><span class="s">"/"</span><span class="nt">></span>
<span class="nt"><url></span>
<span class="nt"><loc></span>http://www.example.com<span class="nt"><r:url</span> <span class="nt">/></loc></span>
<span class="nt"><priority></span>1.0<span class="nt"></priority></span>
<span class="nt"><changefreq></span>daily<span class="nt"></changefreq></span>
<span class="nt"><lastmod><r:date</span> <span class="na">format=</span><span class="s">"%Y-%m-%dT%H:%M+09:00"</span> <span class="na">for=</span><span class="s">"updated_at"</span> <span class="nt">/></lastmod></span>
<span class="nt"></url></span>
<span class="nt"><r:snippet</span> <span class="na">name=</span><span class="s">"sitemap_children"</span> <span class="nt">/></span>
<span class="nt"></r:find></span>
これで完成です。ルート直下の「/sitemap.xml」にアクセスして正しく出力されているか確認しましょう。以下のように出来ていれば完成です。
http://www.example.com/sitemap.xml
<?xml version="1.0" encoding="UTF-8" ?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84"><span class="cp"><?xml version="1.0" encoding="UTF-8" ?></span>
<span class="nt"><urlset</span> <span class="na">xmlns=</span><span class="s">"http://www.google.com/schemas/sitemap/0.84"</span><span class="nt">></span>
<url>
<loc>http://www.example.com/</loc>
<priority>1.0</priority>
<changefreq>daily</changefreq>
<lastmod>2007-07-04T10:34+09:00</lastmod>
</url>
<url>
<loc>http://www.example.com/news/</loc>
<priority>0.5</priority>
<changefreq>weekly</changefreq>
<lastmod>2007-07-06T16:15+09:00</lastmod>
</url>
…(略)