canonical属性をMediaWikiに。

canonical属性を使う

MediaWikiはひとつのページに同じ内容のページを複数置いている。
たとえば、印刷用バージョンこの版への固定リンク*1がそう。
こんなのがたくさんあるから、重複コンテンツの宝庫と思われても仕方がない。


そこで、以下の拡張を使うことにする。

これを使うことで、canonical属性によるページの優先度を付けることが出来る。

たとえば、MediaWikiのメインページ*2を例に取ると、

  • /メインページ
  • /index.php?title=(メインページ)&printable=yes
  • /index.php?title=(メインページ)&oldid=(数字)

というのがあって、この3つのページ全てにcanonical属性が"/メインページ"に向けられるようになる。

設定値

導入後、以下のような項目が現れた。

wgCanonicalNamespace = "";
wgCanonicalSpecialPageName = false;

おそらく、上で名前空間を指定できて、下で特別ページにも使うかどうかを決められると思う。

ハードリダイレクトとソフトリダイレクト

これはおまけ。

CanonicalHrefのいうソフトリダイレクトとハードリダイレクト

ソースコードの最初の部分にこういうのがある。

This extension prints out a link tag with a canonical url to the article, which handles Mediawiki's "soft" redirects much more elegantly.

"Mediawiki's "soft" redirects"がどういう意味なのかというと、おそらく#REDIRECT []によるリダイレクトのことなんだと思う。


MediaWikiのリダイレクトはちょっと特殊で、別のURLにリダイレクトさせずに#REDIRECT []で指定したページをそのままそのページに表示させる。
例えば、AというページとA'というページがあったとして、Aページに#REDIRECT [[A']]と書くと、AのURLでA'の内容が表示される。
ということは、AとA'はMediaWiki上では同じページなのだけど、検索エンジンから見たら重複コンテンツになる。
そこでこの拡張を使うと、リダイレクト先のページ(A')にcanonical属性を付けてAとA'に差を付けることが出来る。


この文の後に"Hard" redirectsという言葉が出てくるけど、JavaScriptを使って強制的にリダイレクトすることを言っていて、AにアクセスしたらA'のURLにそのまま転送するということを指している。

MediaWikiでいうハードリダイレクトとソフトリダイレクト

MediaWikiというかWikipediaでもハードとソフトの概念があるけど、これはCanonicalHrefのいうものとは違う。

#REDIRECT [[]]によるリダイレクトをハードであるとして、一度別のページを挟んでそのページで「このページに移動しますか?」という案内を表示するようにしたものがソフトリダイレクトだとしている。

*1:ちなみに、最新の履歴以外はメタタグでcontent="noindex,nofollow"となっている。

*2:エンコードすると、%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8となる。