1. としきのやしき正門
  2. 電算棟
  3. 板塀(掲示板)の手入れ(改造)
  4. canonical属性付加

canonical属性付加

この掲示板で使っているWebForumというシステムは、かなり高機能です。とはいえ、やっぱり掲示板、という面も多々あります。ある意味、高機能すぎる仕様に、あちこち追いついていないといった感じ。

例えば、ある一つの発言に対して、どのようにリンクをたどってたどり着いたかによってURLが異なってしまう、という状況があります。具体的には、ツリーリストを経由したか発言番号順リストを経由したか、といった情報をURLの中に含めているのです。

このこと自体は、システム単体なら、特に問題はありません。ところが、広く世間一般に公開してみなさんに使ってもらおうと考えると、いささかの問題が発生します。

広く公開する場合、みなさんにたどり着いていただくためのありふれた方法としては、Googleをはじめとした検索エンジンに拾ってもらう必要があります。ところが、同一のコンテンツに複数のURLが割り当てられると、重複コンテンツといって、検索サイトに表示されにくくなってしまうのです。この辺、詳細は、それこそ検索エンジンで「重複コンテンツ」を検索してみてください。

この問題を解決するための根本的な方法は、URLに必要以上の情報を持たせない、ということしかありません。ただ、そのためには、例えばクッキーを使ったセッション管理を導入するなど、もはや改造の域を超えた対策が必要になってきます。そこで、次善の策というか、わりと簡単に導入できる方法を採用してみました。

それが、canonical属性です。 これは、次のようなものです。

この属性を指定することにより、複数のURLに分散されてしまった重複コンテンツは、実は一つのURLなんだ、ということを検索エンジンに認識してもらうことが可能になります。

具体的には、次のようになります。 「HTTPのヘッダとHTMLのヘッダ」のページにも書きましたが、今まで、HTMLのヘッダのために、以下のコードを使っていました。


    &header(sprintf("<META HTTP-EQUIV=\"Expires\" CONTENT=\"%3s, %02d %3s 20%02d %02d:%02d:00 GMT\">\n",$w[$wday],$day,$m[$mon],($year+1900)%100,$hour,$min));

こうなっているところを


    &header(sprintf("<link rel=\"canonical\" href=\"http://$myhost:9801/bbs/wforum.cgi?mode=newsort\">\n<META HTTP-EQUIV=\"Expires\" CONTENT=\"%3s, %02d %3s 20%02d %02d:%02d:00 GMT\">\n",$w[$wday],$day,$m[$mon],($year+1900)%100,$hour,$min));

このようにしました。かなり長くなってしまっていますが、これは一例。mode=newsortの場合ですね。その他に、mode=msgviewとmode=allreadの場合にそれぞれ対応するリンクを出力するスクリプトを仕込んであります。それらは、さらに長くなってしまうので、ここでは省略。スクリプトの出力した掲示板のソースを見ればどんなものかはわかると思うので、ここではあえて書きませんが、もしお問い合わせをいただければお答えさせていただきます。

なお、上記にもチラッと書きましたが、この属性は、間違えて用いると、検索エンジンに全く出てこなくなってしまう可能性があります。効果が大きい分、副作用も大きいという、あたかも劇薬のようなものです。くれぐれも間違えて用いることのないよう、十分なデバッグは必須です。



板塀(掲示板)の手入れ(改造)
電算棟
やしきの間取り


Copyright © 2019 としき
このページの情報及び著作権は「としき」に帰属します。
Toshiki / toshiki @ jcom.zaq.ne.jp