このところ、Yahoo!の新検索エンジンであるYSTのクローラー(インターネット上のページをリンク伝いに読み込んで検索対象に加えていくロボット)がすごい勢いで新着ページを読み込んでいくようになって、Googleのクローラーが見劣りして見えます。このブログに新しい記事を載せると、早いときには次の日にはYahoo!の検索結果に現れてYahoo!経由のトラフィックがどんどん流れ込んでくるのに比べ、Googleはトップページだけは読み込んでも、その先の個別の記事ページは3、4日遅れ、という感じなのです(NP_SearchedPhraseプラグインで、検索キーワードの履歴を表示しているので、記事ごとにどこの検索サイトから人がやって来ているか一目瞭然)。
負けるなGoogle、というわけで、しぶしぶGoogle Sitemapsを試してみることにしました。Google Sitemapsは、Googleのクローラーに「うちのサイトには全部でこれこれこういうページがあって、それぞれ何月何日に更新されたからね」というサイトマップをXMLを使って知らせる仕組みです。クローラーがリンクをたどってもたもたとページを探して回るのではなく、サイトマップで教えたページを決めうちで読み込みに来るので、新しいページの更新も早くなるんじゃないかと期待できます。


Sitemapsに「このページを読め」と指示するためのXML(サイトマップと呼びます)は、Nucleusのスキンをひとつ専用に作るだけで自動的に生成できます。ありがたいことにNP_Cles()さんのところでSitemaps用のスキンファイルと表示用PHPファイルが公開されているので、それをいただいて来ました。
nakahara21.comのまみおさんが、そのPHPファイルを改造して圧縮した状態で送信するパッチを出していらっしゃったので、これもいただき。
準備ができたらSitemapsにログインして、サイトのページの一覧を示すXMLのありかを教えてあげれば完成です。
さて、せっかくページの一覧を更新日時付きで知らせるのなら、記事を書き換えたときやコメントが追加されたときに「変わったよ」と知らせてあげて、すぐに検索インデックスに反映して欲しいところ。積極的に知らせないとサイトマップの更新日時が変わってないのをいいことにクローラーがずっと来ない恐れもありますし。ところが、Nucleusはそれぞれのアイテム(記事)を後から編集しても、更新日時を記録しておく場所がない設計になっています。で、更新日時を記録しておくNP_UpdateTimeというプラグインをまみおさんが作っていらっしゃって、それを利用して最終更新日時を知らせるようにする方法が『農場主の日常 » Google Sitemaps 対応』に紹介されているのですが、これでも更新日時が変わるのは記事を書き換えたときだけで、コメントが追加されたときはなにも起こりません。
そこで、最新のコメント追加日時を反映したページ更新日時を表示する小さなプラグインを作ってみました。
20080618-NP_Lastmod.php.zipを解凍してプラグインディレクトリに置いてインストールしてください。
<%Lastmod%>というテンプレート変数が使えるようになります。この変数はアイテムの一番新しいコメントの日時、コメントがないときは記事の公開日時(NP_UpdateTimeがインストールしてあれば、最終更新日時)をUTCで表示します。ですから、サイトマップを表示するテンプレートの中の、更新日時を表示する部分を
<lastmod><%Lastmod%></lastmod>
と書き換えればOK。
おまけ機能として、記事を書き込んだときにGoogleに対してサイトマップを更新したことを知らせる”Resubmit”を自動的に送信する機能をつけておきました。各ブログの設定の画面で、そのブログのサイトマップのXMLのありか(URL)を入力しておけば、記事の書き込みの直後に送信されるはずです。
サイトマップのXMLは正常に出力されて、Google Sitemapsサービスに認識されることは今たしかめたのですが、NP_UpdateTime(実は、インストールしてもいない)との連携と、Resubmitはテストできていません。なにか不都合に気がついたら、ぜひお教えください。
さて、GoogleのクローラーはYahoo!に負けずに速攻でやってくるようになるでしょうか。
[2007/2/25 追記] しづきさんが、Yahoo!にも”Resubmit”する機能をつけてくださいました。上のリンクからダウンロードできます。
[2008/6/18 追記] 上記のVersion 0.4は、NP_UpdateTimeがインストールされていない環境では、正しいタイムスタンプを返さないバグがありましたので、修正しました。20080618-NP_Lastmod.php.zipからダウンロードして上書きしてください。

投稿者 樋口 理

「寄ってらっしゃい [Google Sitemaps]」に8件のコメントがあります
  1. NP_Lastmodを試してます。
    以下のような表示になりうまくいきません。
    NP_UpdateTimeはインストールしてありますが、これをアンインストールしても同じです。
    — ここから —
    -<url>
    <loc>http://otohsan.com/item/9</loc&gt;
    -<lastmod>
    <br/>
    <b>Warning</b>
    : Missing argument 3 for formatdate() in
    <b>/home/otohsan/www/nucleus/libs/globalfunctions.php</b>
    on line
    <b>1052</b>
    <br/>
    2005-06-18T11:17:13Z
    </lastmod>
    </url>
    — ここまで —

  2. 毎度お世話になっております。 🙂
    手抜きをしていたため、環境によってエラーが出ることがあったようです。
    直してみました。同じリンクからダウンロードして、試してみていただけますか?お手数をおかけします。

  3.  試しました。
    今度は問題なく表示できました。
    すばやい対応、ありがとうございました。

  4. ありがとうございます。確認しました。
    たぶん、NP_Lastmod.phpの最後のほうにある
    echo formatDate(‘utc’, $lastmod, ”);
    というところを
    echo formatDate(‘utc’, $lastmod, ”, $this->blog);
    に変更すればよいのではないかと思います。少し調べてみますので少々お待ちを。

  5. Nucleusのバージョンを3.22RC1にしたところまたglobalfunctions.phpにてエラーが出ました。
    今回は1133行です。
    NP_UpdateTimeをlastmodの時間表示に使っても同じくエラーがでたので、サクラキャンドルさんのところに質問しまたところ、globalfunctions.phpの大幅な変更に伴うもののようです。
    そのなかでformatDate()の変更が今回のエラーにつながっているとのコト。
    http://juntwo.s57.xrea.com/
    のコメント欄にやり取りがあります。
    NP_Lastmodに関してもformatDate()を呼び出す最終行あたりに同じような変更を加えたところうまく動いているようです。

  6. をー、なるほど。
    echo formatDate(‘utc’, $lastmod, ”, $this->blog);
    にしたら、エラーが消えました。

  7. ベィシックはオッケィ?

    ArchiveIndexは、だとかさんを読み直してハタと気がついた。
    【テーブルを使った表示に変更(むりやりCSSで表にしていたのをやめた)】ということは、
    もしかしてぜんぜんプラグインの中身が変わっちゃってたり…

  8. NP_GoogleSitemap について

    多くの方がGoogleサイトマップ用に NP_Cles() さんで配布されてるスキンを使用されてると思いますが、ウチでもご多分に漏れず使用させていただいてました
    また、更新日時の通知用に higuchi.com blog さんの NP_…

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です