日本語を含むURLを301リダイレクトするときの作業手順と注意点

こんにちは、ショウゴ(@gorian91)です。

先日、ブログのパーマリンクを変更し、記事のURLが変更になったので、全記事に301リダイレクトの設定を行ったのですが、日本語を含むURLだけリダイレクトが失敗する現象が起きて、解決するのに時間がかかりました。

地味に手間がかかったので、同じ問題に遭遇している方の参考となるように作業手順と注意点についてまとめておきました。

日本語を含むURLを301リダイレクトで転送する

全体の作業手順としてはこうです。

  1. 移転元のURL一覧を取得
  2. 移転元のURLをデコードする
  3. パーマリンクを変更
  4. 新しい記事のURL一覧を取得
  5. .htaccessに301リダイレクト処理を記述
  6. リダイレクトできているかを確認
サーバーはエックスサーバー、ブログはWordPressを使って構築をしている前提で話を進めていきます。

移転元のURL一覧を取得する

301リダイレクトの設定を行うために、まずは元記事のURL一覧を取得します。

WordPress限定ですが、記事のURL一覧を取得する方法を解説している記事があったので、こちらの記事を参考に作業を行いました。

やり方としては、WordPressのテーマ編集からfunctions.phpに記事URL一覧を取得する関数を追加して一覧を取得、コピペする方法ですね。

僕が調べた限りでは、これが一番楽やり方でした。

取得したURLをGoogleスプレッドシートでファイルを作成して、そこにコピーしておきます。

移転元のURLをデコードする

記事のURL一覧が取得できたら、次は元記事のURLをデコードして日本語に変換します。

先程、説明したやり方でURLを取得すると、移転元のURLはエンコード(記号化)された状態で取得されます。

つまり、こういう状態で取得されます。

https://gorian91.com/2018/02/08/%e3%82%b3%e3%83%a9%e3%83%a0/9488/

ですが、日本語URLを301リダイレクトする場合、移転前のURLはエンコード前の日本語URLを記述する必要があるので、

https://gorian91.com/2018/02/08/コラム/9488/

こうしておく必要があります。

これをやってないとリダイレクトに失敗するっぽいので、記号化された部分のURLを日本語に変換しておきましょう。

僕はこのツールを使って一括で変換しました。

取得したURLを貼り付けるだけでまとめて変換できるので楽ちんです。

パーマリンクを変更する

元記事のURLを取得し、デコード(日本語に変換)できたら、次はパーマリンク設定を変更します。

「WordPressの設定>パーマリンク設定」から任意の設定に変更して保存。

移転後のURLを取得する

次に移転元の記事URLを取得したのと同じやり方で、パーマリンク変更後の新しいURLを取得します。

移転元の記事URLの取得作業で追加したURLの一覧を取得する関数をそのままにしておき、パーマリンク変更後にプレビューすれば、新しいURLの一覧が取得できます。

.htaccessに301リダイレクト処理を記述

移転元と移転後のURLを取得できたら、あとは.htaccessに301リダイレクト処理を記述すればOK。

コードはこんな感じです。

事前にGoogleスプレッドシートでこのような表を用意しておくと作業が楽になります。

Googleスプレッドシートで表にしておくと作業が楽です

記述するコードが準備できたら、あとは、エックスサーバーのファイルマネージャーから、.htaccessファイルを開きコードを追記します。

コードを追記したら、保存文字コードを「UTF-8」に設定して保存して設定完了です。

エックスサーバーでは、「.htaccess編集」という機能がありますが、この機能を使って.htaccessファイルを編集すると文字コードが「EUC」で保存され、結果、それが原因でリダイレクトが失敗してしまいます。

なので、.htaccessファイルを編集する場合は、ファイルマネージャーから編集し、保存文字コードを「UTF-8」にするようにしましょう。

リダイレクトができているかを確認

作業が終わったら、あとはリダイレクトができているかを確認します。

リダイレクトを検証ツールでURLを入力して確認。

リダイレクトできていることが確認できたら、最後に念のため、移転元のURLを入力して、新しいURLが表示されるかも確認しておきましょう。

無事に移転されたら設定は完了です。

リダイレクト検証ツールではリダイレクトが効いてるっぽいのに、ブラウザで開いたらリダイレクトされないときは、ブラウザのキャッシュが残っているだけかもしれないので、キャッシュを削除してから確認すると確実です。

まとめ

作業自体はそれほど複雑ではありませんが、日本語URLをエンコードされた状態で記述していたらリダイレクトが効かないのと、文字コードをUTF-8にしておかないと失敗するので、その2点だけは注意しておく必要があるかなと思います。

あと、僕の場合はブラウザのキャッシュを削除するのを忘れるという初歩的なミスをして「設定できているのにリダイレクトされない…なんでや…」という状態になったので、確認する前のキャッシュの削除もお忘れなく。

.htaccessファイルは編集方法を間違うと、ブログが表示されなくなることもあるので、作業をする前は必ずバックアップをして復元できるようにしておきましょう。

活動にご賛同いただけるスポンサー様を募集しています

当ブログでは、運営者であるショウゴが行なっている活動に協賛いただける企業・団体、個人のスポンサー様を募集しています。

私は現在、大阪でWebの仕事をしながら「難病であってもやりたいことをなるべく諦めなくて良い社会」の実現を目指して活動を行っており、難病カフェ大阪の運営や難病や障害理解を促すコンテンツの作成などを行なっています。

世間の関心も少しずつ集まっており、メディアへの露出も続いているため、宣伝効果も見込めます。興味がある方はぜひご検討ください。