2005-09-18 Sun
Blog を休止中にも Nucleus はいじくり回していたので、いろいろと検索していたのですが、まれに検索結果がよさそうなのに、実際にそのサイトに行くとすでに更新されていて個別ページがどこかわからないことが結構ありました。原因は、検索エンジンが Permalink をインデックスせず、カテゴリー一覧や、トップページといった、更新状況によって内容の変わるページをインデックスしているためです。
さくっと見つかればいいですが、そうそううまくいくことも少なく、調べ物をしているときはイーッとなります。
また、旧サイトは一度データベースが壊れたのですが、現在は一部復旧しています。というのも Google のキャッシュに残っていたからなのですが、この時もカテゴリー一覧がインデックスされていて、喜んだのもつかの間、再び悲しい気持ちに沈んでいきました。
もうこんな思いはしたくないので、検索エンジンに「インデックスするのはトップページと個別アイテムページだけでよい!」と命令することにしました。
当サイトでは、個別アイテムごとのキーワードを設定するために「NP_Header」を使用させてもらっています。このプラグインは、アイテムだけでなくBlogごとにもキーワードを設定できたり、検索エンジンのクロールを制御する meta タグを出力してくれる、とても便利なプラグインです。今回はこのプラグインをちょこっといじらせてもらって、上記の機能を付加することにしました。
まず、どういった流れでキーワードを出力しているのか調べてみますと、129行目あたりに<
switch ($skinType)
というコードがあります。ここ以降で現在表示しているスキンタイプを判断して、その時に付加するキーワードを選択しているようです。
case 'item':
なら「個別アイテムページ」といった具合ですね。次の
case 'search': case 'error': case 'imagepopup': $keywords = 'DONOTSEARCH'; break;
はそれぞれ「検索ページ」「エラーページ」「画像ポップアップウィンドウ」の場合は、キーワードを「DONOTSEARCH」にしなさい。という意味でしょうね。ちなみに「DONOTSEARCH」がキーワードになると、metaタグには
<meta name="ROBOTS" content="NOINDEX" />
と表示され、通常の検索エンジンはそのページをインデックスしません。
ここにはありませんが「月別アーカイブ」「月別アーカイブ一覧」も検索させないようにするため「break;」の後に以下を追加します。
case 'archive': case 'archivelist': $keywords = 'DONOTARCHIVE'; break;
「DONOTSEARCH」ではありませんよ。「DONOTARCHIVE」です。これは後で自分で定義する meta タグを出力するために作りました。
で、カテゴリー一覧ページかどうか判別可能にするために「function doSkinVar」に「$catid」も呼び出しておきます。
function doSkinVar($skinType)
{
global $CONF, $manager, $blog, $catid, $itemid, $nucleus;
さらに「default:」以下を次のように修正。
if ($catid) {
$keywords = 'DONOTARCHIVE';
} else {
$keywords = $this->getBlogOption($blogid, 'keywords');
}
break;
これは「今開いているページがカテゴリーページなら、キーワードは「DONOTARCHIVE」、それ以外なら設定済みのキーワードを取得せよ」という if 文です。これで「カテゴリーページ」「月別アーカイブ」「月別アーカイブ一覧」の meta タグを同じように出力できるようになったので、あとは「DONOTARCHIVE」の時に、どんな内容の meta タグを出力するかを決めればいいだけです。
185ページ付近に
if ($keywords == 'DONOTSEARCH') {
echo '<meta name="Robots" content="NOINDEX" />' . "¥n";
}
else {
という個所があります。ここを見ると、キーワードが「DONOTSEARCH」の場合の処理がわかりますね。ここに「DONOTARCHIVE」用のコードを記述します。
if ($keywords == 'DONOTSEARCH') {
echo '<meta name="ROBOTS" content="NOINDEX" />' . "\n";
}
elseif ($keywords == 'DONOTARCHIVE') {
echo '<meta name="ROBOTS" content="NOINDEX, FOLLOW" />' . "\n";
}
else {
とします。今回は、インデックスされては困るわけですので「NOINDEX」としていますが「FOLLOW」とすることで、そのページのリンクは無視されず、SEO 的な評価につながると思います。
以上で修正は完了です。こうすることで当サイトは「トップページ」「個別アイテムページ」だけが、検索エンジンにインデックスされるはずです。まだ確認できていないので、すこし不安ですが…
NP_Header 1.1で、Bulkfeeds を使用するかしないか選択できるようになったのですが、オプション画面で設定してもどうやら動いていないご様子…ということで、377行目付近の
$item =& $manager->getItem($itemid, 0, 1);
の前に
if ($this->getOption('use_bulkfeeds') == 'yes') {
を追記します。対応する閉じタグ「}」をお忘れなきよう。忘れるとエラーがでてしまいますよ。
return $keywords;
の後に閉じタグ「}」が3つあれば大丈夫だと思います。ただ、この改造をすると、個別アイテムページのキーワードがデフォルトでそのアイテムが属する Blog のキーワードになります。
« Old 2005-09-17
NP_OnlyImg|イメージタグのみを取り出す
2005-09-18 New »
NP_chat|背景色を交互に変化させる