ムーバブルタイプ(MovableType)

MT6でもサイトマップ(sitemap.xml)出力で記事数が1000件以上だと「Can’t call method “execute” on an undefined value」エラーになる

この記事は約9分で読めます。

MT6のテンプレート一覧

ムーバブルタイプ(MT)は仕様上、1000件以上の記事出力に制限をかけている。問題になるのが「sitemap.xml」で、当サイトは3000件近い記事数があるので、普通にサイトマップをMT用のテンプレートで出力しようとすると「Can’t call method “execute” on an undefined value」というエラーが表示されてしまう。そこで対策としていくつかの案を試しているところである。
ある処理を行えば3000件の記事のURLが入ったサイトマップが出力できた。しかし、WEBブラウザで通常表示されないという問題もあり、ちゃんとグーグルがクロールしてくれるかどうかも心配である。今のところ、サイトマップを分割して複数作成し、ウェブマスターツールに複数のサイトマップを登録する方法で実施している。

MT6のテンプレート一覧

シックス・アパート社のWEBサイトにはMT用のサイトマップテンプレートが紹介されている。
以下「http://www.movabletype.jp/documentation/appendices/sitemap.html」より引用

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.9">
<url>
<loc><$MTBlogURL encode_xml="1"$></loc>
</url>
<MTCategories>
<url>
<loc><$MTCategoryArchiveLink encode_xml="1"$></loc>
</url>
</MTCategories>
<MTIgnore>ブログ記事</MTIgnore>
<MTEntries lastn="0">
<url>
<loc><$MTEntryPermalink encode_xml="1"$></loc>
<lastmod><$MTEntryModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></lastmod>
</url>
</MTEntries>
<MTIgnore>ウェブページ</MTIgnore>
<MTPages lastn="0">
<url>
<loc><$MTPagePermalink encode_xml="1"$></loc>
<lastmod><$MTPageModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod>
</url>
</MTPages>
</urlset>

普通はこのままでOKである。
しかし、このままで使えるのはブログ記事数が999件以下(1000未満)のブログ。1000件以上の記事があるブログの場合は「Can’t call method “execute” on an undefined value」というエラーが表示される。これはMTが標準では1000件以上のループ処理を行わない仕様だからのようである。新バージョンのMT6でもそのループ制限は引き継がれているようだ。

対策としては、サイトマップを999件以下の記事に分割して複数出力する方法を試してみた。

参考にしたのは「MTの女王様」とし名高いタスクマザーの中野治美氏のブログである。中野治美氏のブログには以下の様な解決方法が記述されている。

MT4のエントリー数のループ限界値「MTEntries」の続報・MT4のエラーメッセージ:「Can’t call method “execute” on an undefined value ・・・」の対策の一案その2より

<MTEntries lastn=”999″>
・・・
・・・
</MTEntries>

<MTEntries offset=”999″ lastn=”999″>
・・・
・・・
</MTEntries>

<MTEntries offset=”1998″ lastn=”999″>
・・・
・・・
</MTEntries>

なるほど。offsetとlastnの組み合わせによるエラー回避という方法である。

早速、この方法で試してみたところ約3000件のURLのサイトマップが作成できた。しかし、別の問題が発生した。作成したサイトマップ(sitemap.xml)をブラウザで確認しようとすると、行数が多すぎてクロームではうまく表示できない。たしかにソースとすれば軽く1万行を超えるので問題ありそうである。

幸い、グーグルウェブマスターツールには複数のサイトマップを登録することができる。そこで、上記のアイデアを使って、複数のサイトマップを作成しウェブマスターツールに登録するという案である。

今回作成したサイトマップは、とりあえず2つに分割した。最新記事999件は「sitemap.xml」、それ以降の記事は「sitemap_all.xml」というファイル名で出力するようにテンプレートを作成。標準的なサイトマップ名である「sitemap.xml」はグーグル以外の検索エンジン(BING)などでも読まれるのでエラーが起きにくいように配慮し、最新記事+カテゴリURLで構成するようにした。

▼「sitemap.xml」のテンプレート(サイトURL、カテゴリURL,ブログ記事の最新999件めまでのURL表示)

<?xml version=”1.0″ encoding=”UTF-8″?>
<urlset xmlns=”http://www.google.com/schemas/sitemap/0.9″>
<url>
<loc><$MTBlogURL encode_xml=”1″$></loc>
</url>
<MTCategories>
<url>
<loc><$MTCategoryArchiveLink encode_xml=”1″$></loc>
</url>
</MTCategories>

<MTIgnore>ブログ記事</MTIgnore>
<MTEntries lastn=”999″>
<url>
<loc><$MTEntryPermalink encode_xml=”1″$></loc>
<lastmod><$MTEntryModifiedDate utc=”1″ format=”%Y-%m-%dT%H:%M:%SZ”$></lastmod>
</url>
</MTEntries>

<MTIgnore>ウェブページ</MTIgnore>
<MTPages lastn=”0″>
<url>
<loc><$MTPagePermalink encode_xml=”1″$></loc>
<lastmod><$MTPageModifiedDate format=”%Y-%m-%dT%H:%M:%S”$><$MTBlogTimezone$></lastmod>
</url>
</MTPages>
</urlset>

▼「sitemap_all.xml」のテンプレート(ブログ記事の1000件め以降~3996件までのURL表示)

<?xml version=”1.0″ encoding=”UTF-8″?>
<urlset xmlns=”http://www.google.com/schemas/sitemap/0.9″>

<MTIgnore>ブログ記事1000以上分</MTIgnore>

<MTEntries offset=”999″ lastn=”999″>
<url>
<loc><$MTEntryPermalink encode_xml=”1″$></loc>
<lastmod><$MTEntryModifiedDate utc=”1″ format=”%Y-%m-%dT%H:%M:%SZ”$></lastmod>
</url>
</MTEntries>

<MTEntries offset=”1998″ lastn=”999″>
<url>
<loc><$MTEntryPermalink encode_xml=”1″$></loc>
<lastmod><$MTEntryModifiedDate utc=”1″ format=”%Y-%m-%dT%H:%M:%SZ”$></lastmod>
</url>
</MTEntries>

<MTEntries offset=”2997″ lastn=”999″>
<url>
<loc><$MTEntryPermalink encode_xml=”1″$></loc>
<lastmod><$MTEntryModifiedDate utc=”1″ format=”%Y-%m-%dT%H:%M:%SZ”$></lastmod>
</url>
</MTEntries>

<MTEntries offset=”3996″ lastn=”999″>
<url>
<loc><$MTEntryPermalink encode_xml=”1″$></loc>
<lastmod><$MTEntryModifiedDate utc=”1″ format=”%Y-%m-%dT%H:%M:%SZ”$></lastmod>
</url>
</MTEntries>

</urlset>

とりあえず、実験的にこの案で実施。うまくインデックスしてくれるかどうかの様子を見ることにした。

▼3つのサイトマップで登録しなおした直後のウェブマスターツールのサイトマップ登録のグラフ

ウェブマスターツールのサイトマップグラフ

9/15に着手したドメイン移転(サーバをニフティのココログからさくらインターネットに引っ越し)以降、グーグルボットの動きも盛んになっている。
ウェブマスターツールで見るクローラーの動き

URLの重複コンテンツ問題は閲覧上位の100ページは手動で修復した。しかしまだ完全に改善されていないので、今後も徐々に修正など手をかけていくことにする。