この記事は約3分で読めます。
本文は約1921文字です
【コピペのみ】htmlサイトのURLからindex.htmやindex.htmを消す方法
業者が管理していたWordpressサイトを解約したのですが、入手できたバックアップデータはhtmlサイトに変換されたデータでした。
サイトを表示すると、すべてのページのURLにindex.htmlが付いてしまいます。
index.htmlを付けずにアクセスされた場合でも、index.htmlのページが表示されるので問題は無いです。
しかし、Google的には同じページで2つのURLが存在することになるので、正規化が必要です。
URLの正規化としては、http⇒httpsへの正規化、www有り無しの正規化がよく知られており、.htaccessファイルでリダイレクトを書くことで対応します。
一方、index.htmlの有り無しの正規化については、検索するとドメイン直書きのものばかりで、汎用性がありませんでした。
index.htm/index.htmlをURLから消すカスタマイズ
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# index.htmlなしに統一
RewriteEngine on
RewriteCond %{HTTP_HOST} (.+)$ [NC]
RewriteRule ^(.*)index\.htm http://%1/$1 [R=301,L]
コードの解説
このコードは、Apacheサーバーの .mod_rewrite モジュールを使用して、URL中の “index.html” および “index.htm” を削除し、末尾に “index.html” または “index.htm” があるURLをそれらの拡張子がないURLにリダイレクトするものです。各行の詳細は以下の通りです。
RewriteEngine on
この行は mod_rewrite エンジンを有効にします。これにより、URLのリライトおよびリダイレクトが可能となります。
RewriteCond %{HTTP_HOST} (.+)$ [NC]
この行は次にあるリライトルール(RewriteRule)が適用される条件を定義します。ここでは、訪れたホスト名(%{HTTP_HOST})が何であれ、このルールにマッチします。[NC]
フラグはこのマッチングを大文字小文字を区別しない(No Case)で行うことを示します。
RewriteRule ^(.*)index\.htm http://%1/$1 [R=301,L]
この行は実際のリライトルールを定義します。これは正規表現 “^(.*)index.htm” にマッチするURLを “http://%1/$1” にリダイレクトします。ここで、 ^(.*)index\.htm
は、URLの最初 (^) から “index.htm” までの任意の文字列にマッチします。そして、そのマッチした部分を $1 で参照できます。リダイレクト先の “http://%1/$1” では、%1 は RewriteCond でマッチしたHTTPホスト名に、$1 は URLの “index.htm” の前までの部分にそれぞれ置き換わります。 [R=301,L] は、このリダイレクトがHTTPステータスコード 301(永久リダイレクト)で行われ、このルールにマッチしたらそれ以降のルールを処理しない(Last)ことを示します。
したがって、例えば “http://example.com/index.html” や “http://example.com/index.htm” は、このルールにより “http://example.com/” にリダイレクトされます。
まとめ
管理業者に依頼したWordpressサイトが独自システムで、管理者権限がない場合、プラグインでの移転ができません。
契約を解除する時に通常はバックアップデータをもらえるのですが、独自システムの場合はバックアップデータがもらえない代わりに、htmlサイトに変換したデータが提供されることがあります。
その場合に、wordpressサイトとしてGoogleにインデックスされていたページ(index.htmlなし)とhtmlサイトのページのURL(index.htmlあり)が不一致になりますので、その場合はこの記事の方法で正規化すれば対応できます。
コメント