SuppleRedirect

提供:きまぐれ手記 Kimagurenote
移動先: 案内検索
当サイトではアフィリエイト広告を掲載しています
English information available at mw:Extension:SuppleRedirect
即席イメージロゴ

Extension:SuppleRedirect は、存在しないページへのリンク(赤リンク)を他のサイトへのリンクに自動的に置き換えるために自作した、MediaWikiExtension(拡張機能)

また、存在しないページが開かれた際には自動的に転送するため、サイト分割した際のSEOにも適している(いちいち#REDIRECTを手動で設定する手間が省ける)。

筆者はサイト分割した際やサイト立ち上げの際に全ページの#REDIRECTを手動で作成していたが、ページ数が増えると面倒なので、MediaWiki 1.35 以降で提供されている REST API を使って自動でリンクを設定するようにしたのが始まり。

初期設定 Setting

Download

SuppleRedirect_20230815.zip (6KB)

Download and unzip it on your MediaWiki extensions directory.

You can use it freely at your own risk. I license it under the Revised BSD License.

English installation guide is here.

LocalSettings.php

Edit LocalSettings.php file to add below.

LocalSettings.php 
/* Extension:SuppleRedirect */
wfLoadExtension( 'SuppleRedirect' );
$wgSuppleRedirectRestURL['my'] = "https://mywiki.example.com/rest.php";
$wgSuppleRedirectBaseURL['my'] = "https://mywiki.example.com/mywiki/";
$wgSuppleRedirectRestURL['ja'] = "https://ja.wikipedia.org/w/rest.php";
$wgSuppleRedirectBaseURL['ja'] = "https://ja.wikipedia.org/wiki/";
$wgSuppleRedirectRestURL['en'] = "https://en.wikipedia.org/w/rest.php";
$wgSuppleRedirectBaseURL['en'] = "https://en.wikipedia.org/wiki/";

And check Special:Version on your wiki.

追加設定 Additional settings

301 Moved Permanently

このExtensionでは、赤リンクを置き換えるのみならず、空ページが開かれた際に Locationヘッダを追加して転送する。

サイト分割などでページが移転した旨を検索エンジン等に知らせたい場合は、LocalSettings.php に下記の設定を追加すると、301 Moved Permanently(恒久的な転送)を通知する。

LocalSettings.php 
$wgSuppleRedirectPermanently = true;

この設定を行わない場合は(つまり規定では)307 Temporary Redirect(一時的な転送)を通知する。新設サイトなどで一時的に他のサイトを参照したい(後でページを作成するつもりの)場合は、こちらが適している。

言い替えると、後々新規記事を作成するつもりの場合は、この値を設定しない(307 Temporary Redirect のままにしておく)方が(SEO的に)良い。

Namespace

このExtensionは NS_MAIN でのみ動作する

カスタム名前空間を使っている場合など、複数の名前空間を記事本文に使っている場合は、$wgContentNamespaces を適切に設定することで、これらの名前空間でも転送が働くようになる。

記事本文以外、TalkやTemplateなどは自動転送する意味がないので、転送しない。

言語の違いによる名前空間名の不一致

記事名に標準名前空間 (NS_MAIN) のみを使っている場合には無問題だが、$wgContentNamespaces を設定している場合は要注意。

英語以外のサイトでは名前空間名(でいいのかな?)に翻訳が入るようになり、該当する記事名は 「ヘルプ:」 「カテゴリ:」 「テンプレート:」 「ファイル:」 などに内部で暗黙のうちに置き換えられてしまう。APIでもこの名称で出力される。

このため、言語が異なるサイト間では、標準以外の名前空間では自動転送できない場合がある。

例えば、「Wikipedia:Help desk」は自動転送されるが、「Help:Menu」は自動転送されない

プログラマ的には不便なことこの上ないと思うのだが、議論の末に決まったことのようなので、こういう仕様だと思って諦めましょう:)

Wikipedia: はカスタム名前空間なので、翻訳に含まれておらず、自動翻訳されないため。
w:en:Help:Menu」は存在するのだが、日本語のサイトでは内部で「ヘルプ:Menu」に置き換えられてしまうため。

特定のページを除外する

特定のページを転送したくないときは、下記のように設定することで除外できる。 下記の例では、「Test」および「テスト」というページ名に限り、転送しないようにしている。

LocalSettings.php 
$wgSuppleRedirectExcludes = [ "Test", "テスト" ];

ページ名の英字の大文字・小文字は区別される

MediaWikiの制限により、英字で始まるページ名は、先頭を大文字にする必要がある。 ただし、$wgCapitalLinks = false; にした場合を除く。

先頭が小文字のページ名は作成できない、いわゆる全角英字にも適用される

Timeout

MediaWiki Rest API が読み込めない場合のタイムアウト時間は、PHPの規定による。規定値(60秒)は php.ini の default_socket_timeoutで変更できる。

この設定値は同サイトの他の動作にも影響するので慎重に設定する必要があるが、規定の60秒は長すぎると思うので、できれば php.ini で短めに設定しておくと良い(ちなみに作者は3秒に設定している)。

Usage

*[[Xiaomi 13 Pro]] - local link
*[[会津鉄道]] - #REDIRECT manually
*[[フジ (植物)]] - auto redirect via this extension to ja.wikipedia
*''[[Wisteria floribunda]]'' - auto redirect via this extension to en.wikipedia
*[[Not found on any sites]] - red link (not found on this site and other sites)

新しい記事を作成したいときは

このExtensionを使うと、空ページを開けなくなる

もし新規記事を作成したい場合は、redirect=no を付けて開くことで転送されなくなる。

https://yourwiki.example.com/index.php?redirect=no&title=新しい記事名

(管理用ページなどから)Wikitextでリンクを設定したい場合の例:

[{{fullurl:新しい記事名|redirect=no}} 「新しい記事名」を作成]
自動で転送されるため。ただし他のサイトに同名の記事が無ければ、従来の空ページが表示される。

内部リンク扱い

このExtensionは内部リンク [[…]] を対象としているので、生成・置換されるリンクは内部リンクやInterwikiと同様の扱いになり、A.external$wgExternalLinkTarget は付かない。

同様に、API:Extlinks の対象にもならない。

例→ https://kimagurenote.net/api.php?action=query&format=json&prop=extlinks&titles=SuppleRedirect&formatversion=2

History

2023.08.15 (v1.0.0)
初版

Links

Related articles