2005-09-18 Sun

NP_Header|カテゴリー一覧ページをNOINDEXに

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 のキーワードになります。

2005-09-18 Sun by pushman - Category: Nucleus
Keyword:
Comment: 0 - TrackBack: 0

このページの先頭に戻る

「NP_Header|カテゴリー一覧ページをNOINDEXに」へのツイート

「NP_Header|カテゴリー一覧ページをNOINDEXに」へのトラックバック

TrackBack URL:

「NP_Header|カテゴリー一覧ページをNOINDEXに」へのコメント





このページの先頭に戻る