読者です 読者をやめる 読者になる 読者になる
MENU

【301リダイレクト必須】はてなブログ・WordPress引越し時のリダイレクト方法を現役seo担当が教えてやんよ

SEO お役立ち

301リダイレクトアイキャッチ

引っ越すべきか~引っ越さないべきか~?

どうした?家賃滞納でついに家追い出されたか?

滞納してないわ!てか実家暮らしだ!

カラスが実家暮らしダサい

わかったこの話は止めよう

リアルな方の引っ越しで悩んでいたわけじゃねぇよ

ほほう、いっちょ前にブログの引っ越しで悩んでいたと?

ちょいちょい見下してねぇか?

誉れ高きヤンキーを見下すなんてそんな恐れ多いこと(・∀・)

なんか腹立つわ~(#゚Д゚)

ブログの引越しってか、記事の一部をまとめて別サイトを作ろうかと。

特化ブログを作るってことね。

いいじゃない、テーマとか決めちゃってサクッと移しちゃえば。

俺もそう思ったんだけどよ~、こうゆうのって移しちゃうとそれまで持ってたseo効果や順位ってリセットされるじゃん?

8割ぐらい引き継がせる方法あるわよ。

まじで?また一からやらないといけないとかつらたんだったから、悩んでたんだが。

じゃあ、今回はサイト引越し時にSEO効果を8割り程度引き継がせることができる301リダイレクトについて教えるわよ。

サイト引越しや一部記事を移して新サイトを作ろうと考える人は少なくないかと思う。
僕も、SEO記事が30程度溜まってきたら特化サイトを作ろうかと考えているんだよ。

今回はそうゆう時にseoの効果を8割り程度引き継がせることができる301リダイレクトについて解説!
WordPressやはてなブログでのやり方について教えるよ。

※はてなブログは301はできないので他のリダイレクト方法を教えるよ

リダイレクトの種類と301リダイレクトを行う必要性について

まずは、301リダイレクトを行う必要性について話すわよ。

301ってついてるってことは他にも種類があるってことか?

いいところに目を付けたわね。

天才ですから

黙れ小僧

他にも302リダイレクトとかも存在していて、それぞれ用途・意味があるわ。

リダイレクトの種類・書き方の種類

301リダイレクト
完全にサイトが移動したよってことを検索エンジンに伝えてくれるリダイレクト。
移動したサイト情報が正しく伝わるため、移動前のサイトや記事のseo効果を8割ぐらいは引き継いでくれる。
サイトや記事の引越しの場合は極力これを使おう
302リダイレクト
301と同様移転したよってことを検索エンジンに伝えてくれますが、こちらは一時的に移転したよってことを伝えてくれる。
なので、seo効果等は移転前のページが持ったまま、ページの表示だけ302リダイレクト先のページで行っている感じ。
サーバーエラーやメンテナンスで一時移転を余儀なくされた時等に使える。
303・307リダイレクト
調べたら、「GETメソッドでアクセスし~…」「POSTが~…」って、僕もわからないような専門用語出てきた。
多分、そうそう使う機会が無いと思うからこうゆう名称のリダイレクトがあるってことだけ知っておこう。
304・305・306
これらはリダイレクトではまったく使われないけど、存在しているものになる。
意味は304が「未更新」、305は「プロキシを使用せよ」、306は未使用のステータスコード

使うのは7個中2個か?

そうね、残り5個は素人はほぼ使わないようなリダイレクトね。

コレ以外にもリライト方法は存在しているけど、検索エンジンにしっかり情報を伝えてくれるのは301リダイレクトぐらいね。

リダイレクトの種類はわかったから、書き方教えてくれよ。

リダイレクトの書き方については以下のようにいくつか種類があるわ。

  • HTML(metaタグ)
  • JavaScript
  • PHP
  • Perl
  • .htaccess

この中で一番かんたんにできるのはHTML(metaタグ)で記述する方法ね。

HTMLで記述した場合は引き継がれたりしねぇの?

この場合は一切引き継がれないから、ただリダイレクトするのみになるわ。

この中で一番使いやすいと思われるのが「.htaccess」を使う方法ね。

「.htaccess」?なんか拡張子みたいになってね?

これについては次に詳しく説明するわよ。

metaタグでのリダイレクトは、headタグ内に記述するだけなので、seo効果を引き継ぐ必要がないならこれだけで問題ないよ。
今回は一番使いやすい「.htaccess」での301リダイレクト方法を説明するよ。

僕も使っているはてなブログだと.htaccessは使えないから、他の方法も併せて紹介するよ。

.htaccessを使った301リダイレクト

「.htaccess」ってのは、サーバー内である程度の制御を行っているファイルよ。

制御って言っても難しく考えないで、今回はリダイレクトの処理を行ってくれるファイルだと思っておけばいいわ。

最初の説明で頭がパンクしかけたわ(;・∀・)

このファイルにリダイレクトの処理を書いていくわけだな。

そうね。WP使っている人はサーバーを繋げて中を見てみるとわかるけど、デフォルトで.htaccessのファイルが設置されているはずよ。

ただ、「.htaccess」は基本Apacheを利用しているサーバーじゃないと動かないわ。

こ、今度は「Apache」?ウーラーラーって叫べばいいのか?

それはアパッチの雄叫びね

アパッチのおたけび

ロリポップサーバーやさくらサーバー・Xサーバーとか主なサーバーでは基本使っているからさほど気にしなくて大丈夫よ。

ああ、なんだ基本的にはサーバー側で使われているのか。

まず、.htaccessファイルがサーバーにある人は、それをローカルの適当なフォルダーに落としてきて。

そのままだと中身が見れない&追記ができないから、ファイル名を「htaccess.txt」に買い換えて。

テキストファイルに変更してメモ帳なんかで開く感じか?

そうゆうこと。

サーバーに.htaccessファイルが設置されてないとかで、一から作る人は「htaccess.txt」を真っさらなテキストファイルとして作ればいいわ。

とにかくhtaccessのテキストファイルを作ればいいのか。

ページ単位でのリダイレクト方法

WP内に設置されている.htaccessファイルは大体以下のような中身になっているはず。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

WPの.htaccessを弄る人は↑の表記より更に上の位置に、一から作っている人は真っさらなhtaccessファイルに↓を追記・記載してね。

RewriteEngine on
RewriteRule ^page.html$ http://www.sample.com/new_page.html [R=301,L]

「page.html」にユーザーが訪れたら、「http://www.sample.com/new_page.html」にリダイレクトする処理を行わせているわ。

「page.html」と「http://www.sample.com/new_page.html」をそれぞれ飛ばしたいページと飛ばしたい先に書き換えればいい?

その解釈であってるわよ。

ただ、これだとページ単位でのリダイレクトしかできないから、次はディレクトリ単位でのリダイレクト方法を教えるわ。

ディレクトリ単位でのリダイレクト方法

今度はディレクトリ単位でのリダイレクト方法を教えるわよ

ディレクトリがよくわからない人も多いんじゃね?

ん~、さすがに説明が難しいから、ページ単位とディレクトリ単位でどう違うか後から教えるわ

あざっーす!!

イラッ

シュンッ

ディレクトリ単位でのリダイレクトの場合はさっき追記・記載したやつを↓のやつに帰ればいいわ。

RewriteEngine on
RewriteRule ^directory_name(.*)$ /new_directory$1 [R=301,L]

この場合「directory_name」にアクセスしてきたら「new_directory」に移動させるってことよ。

つまり、どうゆうことだってばよ?

例えば、「またここ」を転送元にして、新しく作ったサイトに飛ばす処理だと仮定するわね。

ページ単位の場合、.htaccess内で指定した「またここ」内の特定のページにアクセスされたら指定のページに飛ばされる。

他のページだとそのまま飛ばされずに元のサイトに留まらせるってことか。

で、ディレクトリ単位での指定だと、「またここ」サイト内のどこかにアクセスされたら新しいサイトの一致するページに飛ばされる。

え?移動先のページのファイル名が変更されていた場合は?

その場合、エラーになるわね。

ディレクトリ単位でのリダイレクトは、ページ名・階層が変更されていないこと前提になるわ。

ページ単位とディレクトリ単位で使い分けなきゃいけないわけね。

そうゆうことね。

これってさ、一致するページに飛ばす意味ってあるの?

全部移動先のサイトトップに飛ばしちゃってもいいけど、一致するページにちゃんと飛ばしてあげるほうがseoとしては効果高いわよ。

たかがリダイレクト処理だけでも奥が深いんだな(;・∀・)

サイトのドメイン変更をしたのみで、ページ名や階層が同じならディレクトリ単位でのリダイレクトが一番簡単にできるよ。
サイト内のまとまったカテゴリーのページを移して特化サイトを作る時なんかはページ単位でのリダイレクトが使いやすいよ。

階層が複雑になったり、ページ数が多すぎて大変すぎるなら全てトップに飛ばすようにしちゃってもいいけど、あんまりお勧めしない。
シロも言ってるけど、seoとしての効果は薄まっちゃうからね。

.htaccessはアドレスの正規化もできる

「.htaccess」はリダイレクト以外にも何かできるのか?

リダイレクトの一種だけど、URLの正規化なんかもできるわよ。

URLの正規化?元から正規のURLになってるけど…。

あなたのサイト、アドレスを入れたらトップページが出てくるわよね?

当たり前じゃん。

じゃあ、アドレスの後ろに「index.html」って打ち込んでみて。

…トップページが表示された。

って、トップページはどのサイトも「index.html」で作ってるから当然なんじゃねぇの?

もちろん、トップページにアクセスされることには何ら問題ないは。

問題はトップにアクセスできるアドレスが2つあることでseo効果が薄まってることね。

絶望

な、なんで、アクセスできるURLが2つあるとseo効果が薄くなるんだよ?

本来は1つでもらえるはずの評価が2つに分裂しちゃって、一つ一つが低くなっちゃってるってことよ。

うわーーーー

チッキショー

ざまぁ

まぁ、今から正規化しても遅くないからやり方教えるわよ。

姉御教えてくだせぇ!

『姉御』ヤメロ

へい!

URLに『www』有りかなしかによって、.htaccessに↓の記述のどちらかを追加・記載すればOKよ

『www』有りの場合

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
order deny,allow

RewriteEngine on
RewriteCond %{THE_REQUEST} ^.*/index.(html|php)
RewriteRule ^(.*)index.(html|php)$ http://%{HTTP_HOST}/$1 [R=301,L]
order deny,allow

『www』無しの場合

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
order deny,allow

RewriteEngine on
RewriteCond %{THE_REQUEST} ^.*/index.(html|php)
RewriteRule ^(.*)index.(html|php)$ http://%{HTTP_HOST}/$1 [R=301,L]
order deny,allow

トップページのファイルが「index.php」だった場合でも正規化できる記述になってるわよ。

早速、自サイトに設置してくる。

設置方法わかるの?

そりゃあ、もち…わからねぇ…

じゃあ、次に設置方法も教えるわよ。

サイトのトップなんかはちゃんとURLを正規化しておかないと評価が分散しちゃうから要注意。
.htaccessの設置方法は少し特殊なので、次の説明を参考にしよう。

.htaccessの設置方法

「.htaccess」の設置方法は少し特殊だけど、さほど難しくはないわよ。

テキストファイルのままじゃあやっぱり動かねぇの?

サーバーの制御を行っているファイルだから、流石にテキストファイルじゃ無理よ。

ああ、やっぱり。

難しくは無いから手順をまとめたものを記載するわよ。

  1. 「htaccess.txt」など、先程編集したテキストファイルをそのままサーバーに上げる
  2. 上げる場所は「index.html」など、トップページのファイルが設置してある場所
  3. アップロード後、ファイルを右クリック→「名前の変更」またはf2キーを押す
  4. ファイル名を「htaccess.txt」→「.htaccess」に変更

設置できたら、試しにindex.htmlを後ろに付けたアドレスを入力してみて。

ん~、反映されてねぇ~

キャッシュが残ってるわね。

ブラウザごとにキャッシュが残って反映されていないことがあるから、以下サイトを参考にキャッシュをクリアしてから再度やってみて。

synclogue-navi.com nelog.jp

あ、キャッシュ消して再度アクセスしてみたらできたわ。

リダイレクトも同じ要領で設置してアクセスして反映されていれば完了よ。

今回アップロードしてからファイル名を変更する手順を説明したけど、アップロード前にファイル名を変更しちゃってからアップロードでも問題なく反映されるよ。
ただ、ローカルの状態で変更を行うと「拡張子を変更するとファイルが使えなく~」みたいな注意が出てきたりして面倒だから、アップロードしてから変更するのがお勧め。

あと余談だけど、サーバー内でファイル名なんかを日本語にしちゃうとバグっちゃうので注意。
ファイルの削除も通常じゃできなくなって面倒くさくなるので、ファイル名を日本語にするのだけは止めよう。

はてなブログなど、.htaccessが使えない場合のリダイレクト方法

ここまではWP等の.htaccessが使える環境でのリダイレクト方法を開設してきたわね。

ああ、そういえば俺のサブサイトははてなブログ使っているし、このサイトもはてなブログだたから.htaccess設置できねぇな。

そうね。だからここでは、.htaccessが使えないサイトでのリライト方法を教えるわよ。

普通のリダイレクト方法だとseoの効果を引き継げないんじゃないの?

もちろん、そこも考慮してちゃんとseo効果が引き継げる形での方法を教えるわよ。

私も伊達にseoやってきたわけじゃないのよ。

.htaccessじゃなくても引き継げる方法が存在しているのか。

301リダイレクトは.htaccessじゃないとできないけど、他に方法が存在しないとは言ってないからね。

(;^ν^)ぐぬぬ…

今回は↓のサイトの記事を参考にさせてもらっているわ

beiznotes.org

まずこのサイトに掲載されているjavascriptコードを設置。

<p>移転しました。
<script type="text/javascript" language="javascript">
<!--
 // 新urlの作成
  var domain = "https://www.sample.com/"; // 新ドメイン + ディレクトリに置き換える。末尾はスラッシュ。
  var path = location.pathname.substr(6).replace(/\//g, "") + "-2"; // パスの整形
  var url = domain + path; 

 // リンクhtmlの書き出し
  document.write("<a href=\"" + url + "\">" + url + "</a></p>");

 // リダイレクト
  setTimeout("redirect()", 5000); // 5 sec
  function redirect(){
    location.href = url; 
  }
 
  // canonical の書き換え
  var link = document.getElementsByTagName("link")[0];
  link.href = url;
-->
</script>

設置する場所は~?

デザイン→スパナマーク(カスタマイズ)→記事→記事上のところにコピペよ。

↑のやつはアクセスして来た人を5秒後に新サイトに移動させる設定になってるわ。

これって秒数も設定できるの?

「//リダイレクト」のすぐ下に書いてある「setTimeout("redirect()", 5000);」この中の5000の数字を変えれば、飛ばす時間を変更できるわ。

これは5000で5秒ってこと?

その通りよ。1ミリ秒って単位になっているから、1000で1秒になるってことよ。

なるほど~。これって必ず設置してある該当の記事ページに来た人は強制的に飛ばされるよな?

そうなるわね。

該当の記事ページにきたときに飛ぶかどうかをユーザーに選ばせる方法ってないの?

珍しく鋭い質問してきたわね。

そうゆう人のために、それ専用に↑のコードを書き換えたものを↓に作ったわよ。

<p>こちらのページは移転しました。<br />
<script type="text/javascript" language="javascript">
<!--
 // 新urlの作成
  var domain = "http://www.sample.com/"; // 新ドメイン + ディレクトリに置き換える。末尾はスラッシュ。
  var path = location.pathname.substr(6).replace(/\//g, "") + "-2"; // パスの整形
  var url = domain + path; 

 // リンクhtmlの書き出し
  document.write("<a href=\"" + url + "\">" + url + "</a></p>");
 
  // canonical の書き換え
  var link = document.getElementsByTagName("link")[0];
  link.href = url;
-->
</script>
移転先は <a href="http://www.sample.com/">こちら</a>

ォオー!!(゚д゚屮)屮さっすが~!

これでGoogleにはちゃんとしたインデックス先を示せて、ユーザーは移動するかどうか選べるね。

自動で移動させるやつも、選べるやつもどちらも「http://www.sample.com/」を移動先のアドレスに書き換えて設置で使えるわ。

コピペでできるのありがたや~。

もちろん、設置したらSearchConsoleのFetch as Googleでクローラーが早めに回ってきてもらえるよう呼びかけておくのよ。

あと、スマホページが別になっている人は、デザイン→スマホマーク→記事→記事上のところに同じように貼り付ければOKよ。

参考元の記事にも書いてあるけど、javascriptでcanonicalタグってのを書き換えてるよ。
これを書き換えることで、seo効果をもたせた状態でGoogle検索エンジンに移転先のページをインデックスしてもらってる。

301リダイレクトと同じ効果かどうかはわからないけど、canonicalタグでやってるからほぼ効果は変わらないと思う。
はてなブログみたいな.htaccessが使えないサイトから引越しを考えている人は使ってみてね。

まとめ

それじゃあ今回も2人が話してきたことをまとめるよ。

  • サイト移転やページ移転する場合は極力301リダイレクトをしよう
  • リダイレクトには301~307まで様々な種類が存在している
  • 301リダイレクトを設定しておけばseo効果を引き継いで移転できる
  • 301リダイレクトは.htaccessファイルでしかできない
  • .htaccessでのリダイレクトはページ単位とディレクトリ単位の2つがある
  • .htaccessならURLの正規化もできる
  • .htaccessファイルは設置方法が特殊なので注意
  • はてなブログみたいな.htaccessが使用できないサイトでもcanonicalタグとjavascriptでリダイレクトができる
  • javascriptを使った方法なら、強制的に飛ばさずにユーザー側で選択できるようにも設定できる

大体こんな感じかな。
.htaccessは今回紹介した内容以外にも様々な処理をさせることができるから、気になる人はググってみよう。

canonicalタグもURLの正規化をしてくれるタグだから、301が使えないようなサイトからの移転なら必須。
このタグはWebサイトとスマホサイトが別である場合にも同一のサイトであることを示すために必要なタグだよ。

canonicalタグの使い方に関しては後々記事にしていこうと思うよ。
サイトの移転・ページの移転を考えているならこの記事の内容を参考にseo効果を出来る限り引き継いで移転しよう!