【SEO】重複スラッシュのあるURLをリダイレクトさせる方法!

SEOのスコアが悪くなるからURLにスラッシュがたくさん表示されてなんとかしたいなす・・・

そんな時はPHPでリダイレクト設定をしよう!

広告を回してる際にCSVでアクセスされているページを書き出したら、

https://hogehoge.com////hogehoge

このようにスラッシュが複数続いているURLを発見して困惑しました。

「え、これって普通にアクセスできるんだ。」と。笑

リダイレクトだしhtaccessで何とかできるでしょ〜と考えていたら思った動きは出来ず。

ですがWordpressは優秀なので初めからリダイレクトの設定がされてみたいで、

スクラッチで作成したサイトに限られるのかな〜と思ってます。

今回はそんな重複スラッシュのPHPを使った解決方法を、ちょっとしたSEOの解説を含めてご紹介します!

URLの中に余分なスラッシュがあると、それはSEOにとって大きな問題です。

なぜなら、Googleなどの検索エンジンはこの余分なスラッシュをもって、同じページを異なるページとして認識してしまう可能性があるからです。

結果として、SEO上のランキングに大きな影響を及ぼすことがあります。

そんなURLの重複スラッシュを簡単に解決できるPHPのコードはこちら!

解決方法

下記のコードをphpファイルの<html>の上にコピペしてください。

拡張子は○○.phpでないと機能しないので注意してくださいね。

<?php
$requestUri = substr($_SERVER['REQUEST_URI'], 1);

$newUri = preg_replace('#/+#', '/', $requestUri);

if ($newUri !== $requestUri) {
    $newUrl = 'https://' . $_SERVER['HTTP_HOST'] . '/' . $newUri;
    header('Location: ' . $newUrl, true, 301);
    exit();
}
?>

これで一発解決ですね。

基本的にどのサーバーでも動作しますが、動かない時は利用しているサーバーのPHPバージョンが適切に設定されていない(バージョンが古い)場合が考えられるので、確認しましょう!

コードについて詳しく知りたい方は次の章を読んでください!

小難しい話になるので読まなくても大丈夫です。笑

具体的なコード解説

下記ではPHPのコードについて少々解説していきます!

1.['$_SERVER['REQUEST_URI']の利用

$requestUri = substr($_SERVER['REQUEST_URI'], 1);
['$_SERVER['REQUEST_URI']は現在実行中のスクリプトにアクセスするためのURIを格納します。

つまり、現在のページのURLとして考えてもらえれば問題ないです!

そして、substr()はPHPの組み込み関数で、文字列の一部を取り出すために使用します。

この関数は第一引数に元となる文字列、第二引数に開始位置(0から数えたインデックス)を取得するので、ここでの1は先頭のスラッシュを削除するために使われています。

なので、上記のコードは、現在アクセスされているURLの先頭のスラッシュを削除したものを$requestUriに格納するという意味になります。

2.preg_replace関数による置換

$newUri = preg_replace('#/+#', '/', $requestUri);

'preg_replace'はPHPの組み込み関数で、正規表現にマッチした部分を置換ることに使われます!

この関数は最初の引数に検索パターン(正規表現)、第二引数に置換後の文字列、第三引数に対象となる文字列を取得します。

上記のコードの場合、検索パターンは記号の#/+#です。

記号の意味はそれぞれ下記の文字を表しています。

  • #は正規表現のデリミタ(区切り文字)
  • /はスラッシュ
  • +は直前の文字が1回以上続くこと

なのでこの正規表現は「スラッシュが1回以上続く部分」を表しています。

そして、置換後の文字列'/'は単一のスラッシュです。

したがって上記のコードは$requestUri内の重複スラッシュを単一のスラッシュに置換した結果を$newUriに格納するという意味になります。

3.リダイレクト処理

if ($newUri !== $requestUri) {
    $newUrl = 'https://' . $_SERVER['HTTP_HOST'] . '/' . $newUri;
    header('Location: ' . $newUrl, true, 301);
    exit();
}

こちらはif文で先ほどのコードが理解できた方で、プログラミング言語を記述できる方ならできるかと思います。

長くなってしまうので割愛しますが、

このコードはif文を使用して、変数$newUriと$requestUriが異なる場合(元のURLに重複スラッシュが存在しそれが単一のスラッシュに置換されていた場合)に処理を行います。

以上がPHPのコード解説になります!

次の章ではhtaccessでリダイレクトしない理由について解説します!

なんでhtaccessじゃダメなの?

まずはhtaccessの記述を見てみましょう。

RewriteEngine on
RewriteRule ^before.html$ https://hogehoge.co.jp/after.html [L,R=301

見てわかる通りぶっちゃけできます!!笑

ですが各ページ全てのリダイレクトを記述する必要があるので、
そうなってくるとほぼコピペとは言えかなりの量になってしまいます。

htaccessは管理面でも必要最低限の記述が望ましいかなと。

PHPに苦手意識がある方でも先述の重複URLのリダイレクト方法であれば簡単に実装できるので是非使ってください。

そもそもSEOとは?

ここ数年何かと話題になるSEOですが、正式名称は"Search Engine Optimization"「検索エンジン最適化」と言う意味です。

SEOは、ブラウザで検索した際にユーザーが求める有益なコンテンツを表示・提供して、検索エンジンに正しくページ内容を評価されるよう、意図的にWebページを最適化することを指します。

その為、webサイトのURLに不要な文字があるとSEOに準じているとは言えませんし、

複数のページに同じ内容が記載されていることになるので出来るだけ対策をしましょう。

canonicalタグを設置すれば重複することはありませんが、webサイトのページボリュームを意識するならそれぞれのURLを記述するのがマストです。

canonicalとは?

canonicalタグをwebページに設置すると複数ある重複コンテンツを1つのURLにまとめる(正規化する)ことができます。

アクセスユーザーは複数のURLにアクセスすることができるので、どのページがメインのページかわかりづらいです。

ですが、canonicalタグを該当するURLに統一することにより、検索エンジンも重要なURLであることを判断できるようになります。

なので、同じ内容のページが別々のURLで複数インデックスされている場合は、canonicalタグが向いているURLのみインデックスされます。

SEOパフォーマンスの維持

ユーザーや検索エンジンが最初にアクセスしたURLが重複スラッシュを含んでいた場合でも、正しいURLにリダイレクトすることができます!

それによって同じコンテンツが異なるURLに存在するという問題を解決し、SEOのパフォーマンスを維持します。

まとめ

重複スラッシュ問題はこれで解決ですね。

SEOを意識したページ作成は今後のデザイナーから切っても切り離せない課題です。

もしも依頼したデザイナーの方が重複スラッシュを意識してリダイレクトしてくれていたら感動します。笑

みなさんも是非活用してくださいね〜!

それではまた!あなたもWEBデザイナーなるなる〜!

Twitterでフォローしよう

おすすめの記事