EC-CUBEでは、以下のように「www」や「index.php」が含まれたURLでもサイトにアクセスできてしまいます。
- https://ドメイン/
- https://www.ドメイン/
- https://ドメイン/index.php
- https://www.ドメイン/index.php
上記のいずれのURLでも、同じトップページにアクセスできます。
このままでもサイト運営上は特に問題ないように思えますが、Googleサーチコンソールでは以下のように重複コンテンツの指摘を受ける原因になってしまい、SEO的にあまりよろしくありません。
そこで本記事では、URLの表示を統一(URLを正規化)する方法を紹介します。
SEO対策としても有用ですので、未実施の方はやっておいて損はないかと思います。
.htaccessファイルを修正し、リダイレクトさせる
wwwやindex.phpが含まれるURLにアクセスした際、それらが含まれないURLに自動転送(リダイレクト)させることで解決します。リダイレクトの設定は、ルートディレクトリに保存されている.htaccessファイルで行います。
.htaccessをダウンロードし、<IfModule mod_rewrite.c>
タグ内のRewriteEngine On
の下に、リダイレクトの条件を書き加えます。
.htaccessを修正するときは必ずバックアップを取っておき、元に戻せるようにしておきましょう。
ちょっとした記述ミスにより、サイトが表示されないなどのトラブルになる場合があります。
wwwありのURLからなしのURLにリダイレクト
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
- https://www.ドメイン → https://ドメイン
- https://www.ドメイン/XXX → https://ドメイン/XXX
wwwなしをwwwありへリダイレクトしてもよいですが、URLは短いほうが入力しやすいので「wwwなし」に統一する方がオススメです。
index.phpありのURLからなしのURLにリダイレクト
# index.phpの直後に何もない、またはスラッシュのみの場合にルートにリダイレクト
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php/?\s [NC]
RewriteRule ^index\.php/?$ / [R=301,L]
# index.phpに続くパスが指定された場合にリダイレクトを行う
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php/(.+)\s [NC]
RewriteRule ^index\.php/(.+)$ /$1 [R=301,L]
- https://ドメイン/index.php → https://ドメイン
- https://ドメイン/index.php/XXX → https://ドメイン/XXX
これで、index.phpをすべて取り除いたURLにすることができます。
追記コードまとめ
<IfModule mod_rewrite.c>
タグ内のRewriteEngine On
の直後に、以下コードを追記します。
(他の既存ルールとの衝突を避けるため、RewriteEngine On
の直後/他のルールの前に配置します。)
# wwwありのURLからなしのURLにリダイレクト
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
# index.phpの直後に何もない、またはスラッシュのみの場合にルートにリダイレクト
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php/?\s [NC]
RewriteRule ^index\.php/?$ / [R=301,L]
# index.phpに続くパスが指定された場合にリダイレクトを行う
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php/(.+)\s [NC]
RewriteRule ^index\.php/(.+)$ /$1 [R=301,L]
変更後は、ブラウザのキャッシュをクリアするか、プライベートモードでテストして期待通り動くか確認してください。