パラメータ付きURLのリダイレクトについて

Web制作

リダイレクトとはWEBページから別のページに自動的に転送される事を言います。
リダイレクトには主に301と302の2種類あり、サイトのリニューアルを行う際には301を使います。
301リダイレクトは恒久的に転送するというもので、検索エンジンに引っ越し先を知らせることにより旧ページの評価を引き継げますので、リニューアルには必須とも言えます。
.htaccessやプログラムファイルを置けない等の理由で301リダイレクトが出来ないうんちサーバーもありますが、そういう場合はリニューアルしてサイト構成が変わると評価が引き継げないのでSEOは一からです。
くれぐれも変なサーバーを使わないようにしましょう。

通常の301リダイレクト

通常の301リダイレクトは.htaccessにこんな感じで書けば行えます。

<IfModule mod_rewrite.c>と</IfModule>はApacheのmod_rewriteというモジュールが有効かどうかの確認です。
有効であれば中身を実行しますよという記述で、そもそもこれがmod_rewrite有効でなければリダイレクトはできませんので無くてもいいんですが、念のためみたいなところありますね。

RewriteEngine onは、mod_rewriteの機能をオンにしますよという記述です。
mod_rewriteの機能自体はあっても機能がオフの状態ならリダイレクトはできませんので、これは必要な記述です。

最後に残ったこれがリダイレクト指示の本体です。

old.htmlからnew.htmlに飛んでるという形ですね。
たとえディレクトリ構造やドメインが変わっていても、これで検索エンジンの評価を引き継いだ状態で引っ越しできます。

パラメータのついたURLの場合

先日リニューアルした元のサイトは一部Wordpressで構築されていましたが、パーマリンク設定がデフォルトのままで運営していました。
するとどういう事が起こるでしょうか。
記事のURLは基本的にすべて同じで、記事IDのパラメータだけ異なるという状態になります。

【例】
https://hogehoge.com/blog/?p=1
https://hogehoge.com/blog/?p=2

これを上記の記述でリダイレクトしようとするとこういう記述になります。

ただ、これでは動きません。
?p=1というパラメータをこれでは理解できていないんですね。
?p=1の場合も?p=2の場合もhttps://hogehoge.com/blog/というURLとみなされ、同じところに飛んでしまいます。

パラメータ付きのURLから転送する場合には下記のように記述すればOKです。

RewriteCondとは条件分岐です。
簡単に言うと、パラメータが「cat=1」という条件を満たせば、https://hogehoge.com/blog/からhttps://hogehoge.com/blog/post1/に飛んでね、という事です。

日本語パラメータのついたURLの場合

wordpress等のCMSで作成した記事やカテゴリー等は日本語になる場合があります。
今回のサイトではタグが日本語で運営されていました。
そういった場合には当然日本語のURL(パラメーター)になります。

https://hogehoge.com/blog/?tag=果物

これを下記のように日本語のままで記述してしまうと動きませんでした。

日本語等の本来URLに使用できない文字は、内部的にはURLエンコードという仕組みで別の文字に変換してブラウザは判断しています。例えば「あ」なら「%E3%81%82」です。
上記の例の「果物」は「%E6%9E%9C%E7%89%A9」になります。
これを踏まえてエンコードした状態で記述してみましょう。

これでリダイレクトに成功しました。

URLエンコードは下記のサイトで変換できます。
デコード(エンコードの逆)もできますので、ブックマークしておくと便利です。
https://tech-unlimited.com/urlencode.html

それでもダメな場合?

先日リニューアルしたサイトでは上記対応ですべてうまくいったのですが、ネットで色々見ていると、URLエンコードでもリダイレクトに失敗したという情報を見ます。
サーバーやその設定にもよるんでしょうか。
そういった記事を少し紹介します。

「\(バックスラッシュ、環境によっては円マーク)」でエスケープ

「%」を「\x」に置き換える

逆に日本語で記述するのが良い?

もう無理だからphpで解決
※phpバージョン7以降はereg_replace()が削除されている為、preg_replaceを使う必要があります。

サーバー環境によって、正解が異なりそうです。
ややこしすぎません?

関連リンク

digrartのホームページ制作
https://www.digrart.jp/web/web-design/

ホームページ制作に関するお問い合わせ
https://www.digrart.jp/contact/

facebook twitter はてなブックマーク LINE

Webに関するお問い合わせ、
お電話、ご相談はこちら。