Googleウェブマスターツール用サイトマップとは
Googleは、検索対象となるページを見つける為に、定期的にサイトを巡回し、巡回したページ中に存在するリンクを辿って自動的に検索対象を増やしていきますが、Googleによる検知が遅れたり、漏れたりすることがあります。これを防ぐ為に、ウェブサイト運営者側から明示的に「このページを検索対象にして欲しい」という旨を連絡することができます。具体的には、ウェブサイト上の全てのページのURLを羅列した「サイトマップファイル」を作成し、Googleウェブマスターツールを使ってGoogleへ送信することで、これが可能になります。詳しくは「Googleウェブマスターツール」のサイトをご覧ください。登録等は無料ですが、ウェブサイトの登録やサイトマップファイルの送信作業にはFTP等を使ったウェブサイトのファイル管理権限が必要です。
サイトマップファイルを自動生成する
この「サイトマップファイル」は、以下のような形式のXMLファイルです(URLを羅列するだけのテキストファイルでもOKですが、更新日時などを指定できるXML形式の方が有利です)。<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url><loc>http://cms.al-design.jp/</loc></url> <url><loc>http://cms.al-design.jp/newslist.php</loc></url> <url><loc>http://cms.al-design.jp/newsentry.php?eid=00108</loc><lastmod>2013-05-22</lastmod></url> <url><loc>http://cms.al-design.jp/newsentry.php?eid=00107</loc><lastmod>2013-05-16</lastmod></url> <url><loc>http://cms.al-design.jp/newsentry.php?eid=00106</loc><lastmod>2013-03-18</lastmod></url> <url><loc>http://cms.al-design.jp/newsentry.php?eid=00105</loc><lastmod>2012-12-27</lastmod></url> <url><loc>http://cms.al-design.jp/newsentry.php?eid=00104</loc><lastmod>2012-07-20</lastmod></url> </urlset>これは、CMS Designer公式サイトのトップページと、ニュースの個別ページについて記述してあるサイトマップファイルです。
このファイルを手入力で作成してGoogleへ送信してももちろんOKなのですが、せっかくCMSを使用しているのですから、これも自動生成しましょう。
まず、CMS化したい部分を見極めます。上記の内容で考えるなら、ニュースの個別ページ、つまりnewsentry.php?eid=xxxxx に対するurlタグの繰り返し部分をCMSで生成できれば問題なさそうです。
まず、繰り返さない部分、つまり固定の部分を通常のページとして作成します。
ここでは gsitemap.php という名前で作ります。
gsitemap.php(未完成版)
<?php require( "cmsdesigner/include/view.php.inc" ); ?> <?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?> <cmsd:output encoding="UTF-8" /> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url><loc>http://cms.al-design.jp/</loc></url> <url><loc>http://cms.al-design.jp/newslist.php</loc></url> </urlset> <?php cmsd_end_template(); ?>注意事項として、2行目(つまり本来の先頭出力になる部分)の、
<?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?>の部分は、xml宣言です。いきなり「<?xml~」のように書き始めてしまうと、<? の部分がPHPの開始部分と判断されておかしくなってしまうので、このようにPHPコードのecho命令を使ってxml宣言を文字列として出力するようにしています。この辺はPHPを利用しているシステムでは少し不便です…。
3行目のcmsd:outputは、出力エンコーディングをUTF-8に指定しています。
それ以外の部分は、サイトマップファイルを普通に書いています。CMSで自動生成しない部分(この例で言うと、トップページや一覧表示ページなど)はここに列挙していきましょう。
このファイルをウェブサイトへアップロードして、いったんブラウザから開き、ブラウザの右クリックメニュー等からソースコードを確認します。エラーなどが起こらず、以下のような出力がされているかを確認してください。
<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url><loc>http://cms.al-design.jp/</loc></url> <url><loc>http://cms.al-design.jp/newslist.php</loc></url> </urlset>では、ここに埋め込む「繰り返し部分」を定義していきます。繰り返しになっているのは、「ニュース」のコンテンツです。この「ニュース」コンテンツ用のデザイン定義に、新しくサイトマップ用のデザイン定義を加えましょう。ニュース用のスキーマフォルダを開き、そこに以下のファイルを追加します。
news.list.gsitemap.design.xsl
<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html" encoding="EUC-JP" omit-xml-declaration="yes" /> <xsl:template match="/entrylist"> <xsl:for-each select="entry"> <url> <loc>http://cms.al-design.jp/newsentry.php<xsl:value-of select="@href" /></loc> <lastmod><xsl:value-of select="@year" />-<xsl:value-of select="@month" />-<xsl:value-of select="@day" /></lastmod> </url> </xsl:for-each> </xsl:template> </xsl:stylesheet>やっていることは単純で、以下のような、urlタグ、locタグ、lastmodタグを、各エントリ毎にfor-eachで出力しているだけです。
<url><loc>http://cms.al-design.jp/newsentry.php?eid=00108</loc><lastmod>2013-05-22</lastmod></url>最後に、作成したデザイン定義を使ってニュースコンテンツをgsitemap.phpに埋め込めば、完成です。
gsitemap.php
<?php require( "cmsdesigner/include/view.php.inc" ); ?>
<?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?>
<cmsd:output encoding="UTF-8" />
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url><loc>http://cms.al-design.jp/</loc></url>
<url><loc>http://cms.al-design.jp/newslist.php</loc></url>
<cmsd:entrylist name="news1" design="gsitemap" rows="99999" />
</urlset>
<?php cmsd_end_template(); ?>
このgsitemap.phpをウェブサイトに設置し、Googleウェブマスターツールの管理画面より「送信」してください。なお、その前に、Googleウェブマスターツールにウェブサイトを「登録」する為に、特殊なファイルをウェブサイトにアップロードして「認証」をする必要があるのでご注意ください(手順はウェブマスターツールのサイトに詳しく説明されています)。
ご不明な点がありましたら、ユーザーズフォーラムなどでお気軽にご質問ください。