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

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ページは手動で修復した。しかしまだ完全に改善されていないので、今後も徐々に修正など手をかけていくことにする。

このエントリーをはてなブックマークに追加 遠田幹雄のLINE@アカウントを友だち追加  



この記事を書いた人

中小企業診断士:遠田幹雄の顔写真遠田 幹雄(とおだ みきお)
 
経営コンサルティング企業の株式会社ドモドモコーポレーション代表取締役。石川県かほく市に本社があり金沢市を中心とした北陸三県を主な活動エリアとする経営コンサルタントです。
小規模事業者や中小企業を対象として、経営戦略立案とその後の実行支援、商品開発、販路拡大、マーケティング、ブランド構築等に係るコンサルティング活動を展開しています。民民での直接契約を中心としていますが、商工三団体などの支援機関が主催するセミナー講師を年間数十回担当したり、支援機関の専門家派遣中小企業基盤整備機構の経営窓口相談に対応したりもしています。
保有資格:中小企業診断士、情報処理技術者
 
会社概要およびプロフィールは株式会社ドモドモコーポレーションの会社案内にて紹介していますので興味ある方はご覧ください。


この記事のURL「https://www.dm2.co.jp/2013/09/mt6-sitemapxml-1000.html」をQRコードで表示
この記事のURL「https://www.dm2.co.jp/2013/09/mt6-sitemapxml-1000.html」をQRコードで表示「https://www.dm2.co.jp/2013/09/mt6-sitemapxml-1000.html」
パソコンで表示されたページをスマホでも見たい場合は、このQRコードをスマホのカメラ(QRコードが読めるリーダー)で読むとページが表示されます。