Google Sitemaps
Google Sitemapsとかっていうサービスが始まったのでこのブログでも対応してみました。以下にテンプレートがあります。
Niall Kennedy's Weblog: Google Sitemaps using Movable Type
このテンプレートをこのまま使う分には問題はないのですが、ただカスタマイズすることを考えるとちょっと注意しなくてはならない点があります。
ひとつはSitemap Protocolを読むと、lastmod要素のタイムスタンプはISO 8601形式(Date and Time Formats)で指定することになっていますが、実際にはISO 8601形式のすべての時刻表現を受け付けてくれるわけではないようです。私の気が付いた限りでは、以下のようにLocal Time + Time Zone offset (2005-06-04T09:24:00+09:00)で指定しようとすると、Google Sitemapsは「Invalid Date」と判定するようです。
<lastmod> <$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$> </lastmod>
KennedyのテンプレートにあるようにUTC時間を指定していれば問題ありませんし、Googleが早々にこの問題を解決する可能性があります。
もうひとつは、MTBlogURLに対する更新時間(lastmod)も表示させようと思って以下のように書くと、現在時刻の9時間前の時刻を返してしまう点です。
<url> <loc><$MTBlogURL encode_xml="1"$></loc> <lastmod><$MTDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></lastmod> <priority>1.0</priority> </url>
これはMTDateにutc="1"オプションを与えた場合に2回オフセット補正されてしまう(正確にはgmtimeに対してlocaltimeからUTCへの補正を行ってしまう)ために起きます。Local Time Zoneが+09:00の場合には9時間前の時刻になります。例えば時刻が「2005-06-04T21:09:00+09:00」であったとするとそのUTC時刻は「2005-06-04T12:09:00Z」ですが、これを誤って9時間補正して「2005-06-04T03:09:00Z」を返してしまうということです。
このバグを修正するには以下のパッチを当てる必要があるでしょう。
--- lib/MT/Template/Context.pm.bak 2005-01-13 15:47:37.000000000 +0900
+++ lib/MT/Template/Context.pm 2005-06-04 22:56:13.000000000 +0900
@@ -1444,6 +1444,7 @@
my @ts;
if ($args->{utc}) {
@ts = gmtime $t;
+ delete $args->{utc};
} else {
@ts = offset_time_list($t, $_[0]->stash('blog_id'));
}
このエントリーのトラックバックURL: http://as-is.net/mt/mt-tb.cgi/278
Comments (0)