<< Pear XML_SerializerでXML生成 | main | Firefoxのinput要素が動作しない件 >>

2007.08.06 Monday

サイトマップファイルの半自動生成

無事、XMLファイルが生成できるようになったので、まずは、
サイトマップファイルを半自動生成する方法を考えてみます。

サイトマップファイルというのは、
検索エンジンの読み込み漏れを防ぐためにサーバーのHTMLルートに置いておくファイルで、通常は、sitemap.xmlというファイル名で作成しておきます。
一般の無料レンタルブログでは、HTMLルートにファイルを置くことは出来ないので、サイトマップファイルの設置は出来ないことが多いです。

サイトマップファイルは、googleだけじゃなく、yahooやMSNも読んでくれるので、作成しておくと検索エンジンに登録される可能性が高まります。

ま、反面、検索エンジンが暴れまくって、大変な転送量になったりするのが、玉に瑕ですけど。

--

--

■サイトマップファイルの仕様
スペックについては、
サイトマップの XML 形式
を参照してください。
単純なXMLなので、なんてことはないです。

■サンプル
ここでは、簡単のため、$filelistという配列にファイル名が入っているものとして話を進めていきます。
自分のサーバーからファイル名を読み取る方法については省略しますので、自分で実装してください。
また、日付(lastmod)、プライオリティ(priority)は固定値とします。
ちゃんとやりたい場合は、ファイルシステム関数などを参考に自分のサーバーからファイルリストを読み込む方法を考えて、$filelistに入れてあげれば、そのまま使えます。

サンプルソース
$filelist = array();
$filelist[] = 'filename1.php';
$filelist[] = 'filename2.php';
$filelist[] = 'filename3.php';
$filelist[] = 'filename4.php';
$filelist[] = 'filename5.php';
$filelist[] = 'filename6.php';
$filelist[] = 'filename7.php';
$filelist[] = 'filename8.php';
$filelist[] = 'filename9.php';
$filelist[] = 'filename10.php';

$basename = 'http://example.com/';
$priority = '0.5';
$lastmod = '2007-08-06';

require_once 'XML/Serializer.php';
$options = array(
  "indent" => " ",
  "linebreak" => "\n",
  "addDecl" => true,
  "rootName" => 'urlset',
  "defaultTagName" => "url",
  "encoding" => "UTF-8",
  "rootAttributes" => array(
    "xmlns" => "http://www.sitemaps.org/schemas/sitemap/0.9",
   ),
);
$serializer = new XML_Serializer($options);
$data = array();
foreach($filelist as $f){
  $loc = $basename . $f;
  $data[] = array("loc"=>$loc,"lastmod"=>$lastmod,"priority"=>$priority);
}
$status = $serializer->serialize($data);
if ($status === true) {
  $xml = $serializer->getSerializedData();
  echo "<pre>".htmlspecialchars($xml)."</pre>";
}
この実行結果は、以下のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
 <url>
  <loc>http://example.com/filename1.php</loc>
  <lastmod>2007-08-06</lastmod>
  <priority>0.5</priority>
 </url>
 <url>
  <loc>http://example.com/filename2.php</loc>
  <lastmod>2007-08-06</lastmod>
  <priority>0.5</priority>
 </url>
 <url>
  <loc>http://example.com/filename3.php</loc>
  <lastmod>2007-08-06</lastmod>
  <priority>0.5</priority>
 </url>
 <url>
  <loc>http://example.com/filename4.php</loc>
  <lastmod>2007-08-06</lastmod>
  <priority>0.5</priority>
 </url>
 <url>
  <loc>http://example.com/filename5.php</loc>
  <lastmod>2007-08-06</lastmod>
  <priority>0.5</priority>
 </url>
 <url>
  <loc>http://example.com/filename6.php</loc>
  <lastmod>2007-08-06</lastmod>
  <priority>0.5</priority>
 </url>
 <url>
  <loc>http://example.com/filename7.php</loc>
  <lastmod>2007-08-06</lastmod>
  <priority>0.5</priority>
 </url>
 <url>
  <loc>http://example.com/filename8.php</loc>
  <lastmod>2007-08-06</lastmod>
  <priority>0.5</priority>
 </url>
 <url>
  <loc>http://example.com/filename9.php</loc>
  <lastmod>2007-08-06</lastmod>
  <priority>0.5</priority>
 </url>
 <url>
  <loc>http://example.com/filename10.php</loc>
  <lastmod>2007-08-06</lastmod>
  <priority>0.5</priority>
 </url>
</urlset>
となり、サイトマップファイルの仕様に準拠したサイトマップファイルがプログラムにより半自動生成できます。

完全自動化するには、
除外するファイル名パターン、除外するディレクトリ、などへの考慮
日付、プライオリティの扱い
Cronなどによる自動実行
などを考える必要があります。

この程度なら、簡単に実現できますね。
これでも、十分実用的なサイトマップファイルですし。

同じような考え方で、ブログでない通常のウェブサイトでのRSS配信なども可能です。
ただ、この場合、日付の処理をしっかりしておかないと、大変なことになります・・・
自分の購読しているRSSで、ときたま、読んだはずの記事が新着記事として再配信されてきたりすることがあります。
もちろん、それはブログでなくて通常のウェブサイトが配信しているRSSです。
RSSファイルで記事配信するときには、このあたりも注意しないと、信頼性の低下につながる可能性があるので、十分に考慮する必要があります。

実際、あまりにも再配信が多いので、購読中止してしまいましたし。

あと、アメブロみたいな、RSSなのに何の意味もないRSSってのはやめましょう。
あんなの、まったくナンセンス、時代に逆行しているとしか思えません。
それなら、RSS2.0配信なんて、最初からしないほうが悪い印象はつかないのに、もったいない。
自分の中では、アメブロイコール最低ブログ
というランク付けになっちゃいましたからね。

ああ、また脱線してしまった。

--

テクノラティお気に入りに追加する

Comments

コメント入力は停止しています

海外からと思われるコメントスパムが横行しているため、全記事のコメント入力を停止しています。メッセージのある方は、ホームページの一番下に連絡欄がありますので、そちらからお願いします。

Trackback URL

トラックバックする場合は、
トラックバック元の記事にこのエントリへのリンクを記載してください
このエントリのタイトル「サイトマップファイルの半自動生成」
このエントリのリンク「http://kommy.s254.xrea.com/blog/log/eid53.html」