パーマリンクまたも修復

WordPress3.1.1で個別の記事に飛ぼうとすると404エラー(当該記事なし)が出てしまうという症状が発生した。

トップページやカテゴリーページなどでは問題ない。ひとつひとつの記事に行けないのだ。なぜ気づいたのかといえば、新しい記事を投稿しようとしたところ、プレビューが表示できなかったからである。

パーマリンクがおかしくなっているようだった。「散歩の思考」では、公開年月日にスラッグという英語の記事名を組合せた形式で個々の記事のURLを指定している。たとえばこの記事なら

「http://swingbooks.jp/2011/05/03/permalink_again/」

となるのが正しい。ところが、これが

「http://swingbooks.jp/sb_wp/2011/05/permalink_again/」

というようになってしまっていた。「sb_wp」というディレクトリ名が混入し、日付が脱落していたのだ。

以前にアップグレードしたときも似たような症状が生じたことを思い出した。先日WordPressを3.1.1へアップグレードしたところだ。そのときはとくに問題に気づかなかったし、つい最近までは投稿時のプレビューもできたのだが。

調べてみると、2010年7月以降の記事がおかしくなっていることがわかった。それ以前は問題ないようなのだ。

となると、それはやはりWPを3.0にアップグレードした時期にあたる。あのときも、パーマリンクがおかしくなり、手動で修正した。そのとき書いた記事がこちら。情けないことに、パーマリンクの修復について書いたこの記事も、月別やカテゴリー別のリストでなら読めるが、単発で読もうとすると404エラーが出てしまう状態になっていた。

さらに調べてみると、このサイトの記述が参考になった。

「パーマリンク設定後に記事やページが404エラーで表示されない」(賢威レビューとカスタマイズサポートさん)http://kasegoo.info/operation/652/

じつは、昨年7月のWPのアップグレードでパーマリンクの不具合が発生して以降、まさにここで指摘されている「二重パーマリンク」のやり方を採ってきていた。すなわち、管理画面>投稿>投稿編集で記事を編集するさい、タイトル欄の直下にある「パーマリンク」という欄に、手動でパーマリンクを記入し、それとはべつに管理画面>ツール>Meta-dataから「スラッグ」も記入するようにしていた。

あのときは、こうすることで修復できたのだった。しかしこのやり方では、二重でパーマリンクを指定することになってしまい、コンフリクトを起こすことがある、ということらしい。

じっさい、先ほどあげたおかしなパーマリンクのうち、日付の脱落については、おそらく投稿編集画面のパーマリンク欄に、勘違いして日付を抜いて入力してしまい、WPが自動で振るパーマリンクとデータベース上で不整合をおこしてコンフリクトした可能性があると考えられる。

ちなみに「sb_wp」混入だが、管理画面>ツール>Custom Permalinksで各記事のパーマリンクを確認すると、「sb_wp」を挿入したものが表示される。ぼくの借りているレンタルサーバ内のディレクトリ構成の関係もあって、WP内部ではこのパーマリンクで管理しているのだろう。そして、外からのアクセスにたいしては「sb_wp」を抜いたURLで見せている、という二重の関係にあるようだ。それがコンフリクトによって崩れ、パーマリンクが露わになってしまった、ということではないだろうか。確証はないが。

正しい指定の仕方はこうだ。

投稿編集画面の「パーマリンク」の欄は空欄のままでよい。記入するのは「スラッグ」の欄のみ。日本語でもいいが、パーマリンクの指定のしやすさや管理のしやすさから、ぼくは簡単な英語名をつけることにしている。スラッグを記入すれば、パーマリンクのほうは、あらかじめ管理画面>設定>パーマリンク設定で指定してあるやり方に従って、WPが自動的に発行してくれる。

なお投稿編集画面に「スラッグ」欄が見つからなければ、画面右上の「表示オプション」をクリックして表示させることができる。ぼくの環境では、スクロールしていったずいぶん下のほうにあらわれる。

さて、そこで修復作業に入る。

2010年7月以来のすべての記事を、管理画面>投稿でひとつずつ開き、投稿編集画面のタイトル欄の直下の「パーマリンク」欄を削除して「更新」ボタンを押す。そのあと記事を見てチェックする。404エラーとならずにパーマリンクが復旧して記事が表示されていれば、OKだ。

この作業だけならスラッグの変更をせずに済む。つまり、パーマリンクも変更されないので、検索エンジンの過去のデータや、ほかのサイトから各記事に直接張ってくださっているリンクと不整合を生じさせずに済む。しかし、あいにくこの程度で済んだのは、作業した記事の総数のうちの3割くらいであった。

あとはいずれもスラッグを変更しなければならない。3点ほど細かい症状というか癖が見られた。

  1. 題名(タイトル)の文頭に英数字が含まれるばあいは、それに合わせて、同じ英数字でスラッグを付ける。不整合だとエラーのまま。
  2. 既存のスラッグの文字列に、ハイフンやアンダーバーを挿入したり、末尾に数字や文字を付け足すだけでOKなばあいもある。が、このケースは少ない。例:hdd4tb → hdd-4tb
  3. 既存のスラッグの文字列と異なるものに変えると、わりあいうまくいく。とくに冒頭の文字を既存のものと変えてしまうとうまくいくようだ。例:yamato → 2010yamato

スラッグを変更した記事については、旧スラッグと新スラッグを、べつにエディタを開いて控えておく。先述のとおり、スラッグを変更したらパーマリンクも変更されてしまい、それにともなう不都合が生じる。これを回避するためには、ちょっと力業ではあるが、永久リダイレクトで対処するのがいいだろうからだ。

リダイレクトの書き方は以前にまとめたとおり。今回のばあい、スラッグの変更を余儀なくされた記事は49本(やれやれ)。それぞれについて、あらかじめエディタ(Macならたとえばmi)で、書式どおりに記述しておく。そして、FTP(MacならCyberduckなど)でサーバにアクセスして、エディタで.htaccessファイルを開いて、今回追加するリダイレクトのぶんをコピーして追記し、アップロードする。

ブラウザに旧パーマリンクのURLを入れてみて、新パーマリンクへ自動で飛ぶのが確認できれば、作業完了である。問題に気づいてから復旧まで、半日がかりであった。