以前投稿したこちらの記事で、「htmlからphpに拡張子が変わったのでSEO的によろしくないんですが、今回は私個人で管理していて、そんなにアクセスもないサイトなので、特に対策はせずにアップしようかなと思います。」と言っていたんですが、結局思うところがあって勉強がてらリダイレクト処理を書いてみることにしました。
今回リダイレクト処理することにした経緯
もう十数年も前になりますが、webサイト作り初めのころは拡張子はhtmlが基本だと思っていたので、phpって何か怪しいと思っていた時期もありました。
触ってみたら全然怪しいものじゃないんだけど(笑)
メンテナンスのことも考えると、やっぱりphpがいじりやすいので、phpを使いたい。
今はスマートフォンが主流になってるので、URLなんてしっかり見てる人いなさそうですが、そういう経緯があって私的にはやっぱり気になるので、今回は①拡張子を表示させない、②拡張子をhtmlからphpに変更した場合のSEO対策、この2点に重点を置いてリダイレクト処理を書いていきたいと思います。
今回も.htaccessを利用してリダイレクト処理をします。
①拡張子を非表示の状態で表示できるようにする
今回は表示したいページがhttps://example.com/hoge.phpだと仮定して書いています。
hogeで表示できるようにする
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
上記を.htaccessに記載するとhttps://example.com/hogeでも表示できるようになります。(コピペでOKです)
ただ、このままだと、1つのコンテンツでhttps://example.com/hoge.phpとhttps://example.com/hogeの2つのURLがある状態でSEO的によろしくないので、すべて.phpを表示させないURLで統一するようリダイレクト処理します。
hoge.phpをhogeにリダイレクトさせる
RewriteCond %{THE_REQUEST} \.php\ HTTP
RewriteRule ^(.*)\.php$ /$1 [R=301,L]
こちらを記載して、https://example.com/hoge.phpにアクセスがあった場合、https://example.com/hogeにリダイレクトさせます。
②拡張子を変更した場合のSEO対策
htmlからphpにリダイレクト
今回はhtmlからphpへの変更なので、hoge.htmlにアクセスがあった場合はhoge(hoge.php)にリダイレクトしたいのでこちらも書きます。
推奨
RewriteRule ^(.*)\.html$ /$1 [R=301,L]
非推奨
RewriteRule ^(.*)\.html$ /$1.php [R=301,L]
これでもいいんですけど、これだとhoge.html→hoge.php→hogeとリダイレクトするので、推奨コードの方が処理が少なく済んでいいかなと。
余談①
同名のhtmlファイルが残っているとサーバーの設定によっては上手く動かない(ローカルと本番環境で動作が違う)場合があります。
今回のようにhtmlからphpに拡張子を全て統一して変更、htmlファイルをサーバーから削除した場合は上記設定でリダイレクトが可能ですが、同名のhtmlファイルが残っているとサーバーの設定によっては上手く動かない(ローカルと本番環境で動作が違う)場合があります。詳細は少し長くなるので別の記事に書きたいと思います。
余談②
RewriteRuleですが、環境によってはディレクトリを書いてあげてください。
RewriteRule ^(.*)\.html$ /hogehoge/$1.php [R=301,L]
↑こちらはXAMPPで開発中のコードです。バーチャルホストの設定をしていなかったので、本番環境にあげたら階層が1つ下がってて「ん……? 」となって。
URL見ればわかるんですけど、人によって開発環境が違うと思うので念のため記載しておきます。
リンクの修正
リンクタグがhoge.phpになっていると、hoge.phpからhogeにリダイレクトするという余計な処理が増えるので、hoge.phpからhogeに変更しておきましょう。
変更前
<a href="hoge.php">HOGE</a>
変更後
<a href="hoge">HOGE</a>
indexページ
indexページはhttps://example.com/index.phpではなくhttps://example.com/の表示にしたいので、以前こちらの記事で書いた下記部分を書き換えておきます。
変更前
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ https://example.com/$1 [R=301,L]
変更後
RewriteCond %{THE_REQUEST} ^.*/index
RewriteRule ^(.*)index.php$ https://example.com/$1 [R=301,L]
以前の記事
まとめ
RewriteEngine on
RewriteCond %{THE_REQUEST} ^.*/index
RewriteRule ^(.*)index.php$ https://example.com/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
RewriteCond %{THE_REQUEST} \.php\ HTTP
RewriteRule ^(.*)\.php$ /$1 [R=301,L]
RewriteRule ^(.*)\.html$ /$1 [R=301,L]
これで①拡張子を表示させない、②拡張子をhtmlからphpに変更した場合のSEO対策の2点がクリアできました!




コメント