WordPressサイトのSSL化まとめ

スポンサーリンク
ブログ運営論

この前、当ブログのSSL化に失敗して結局元に戻しました。今のところSSL化してもSEO的に大してメリットはないようなので中長期的に見送りという方向で決定していたのですが、実は二度目の挑戦で完全SSL化を果たしました。方針転換してSSL化に踏み切った理由と、移行に当たって考えられる障害と解決方法についてまとめてみます。

なぜSSL化したのか?

SSL化の目的は通信を暗号化して第三者による傍受やなりすましを防ぐことにあります。個人情報がやりとりされるサイトでは当然そのような対策は必要ですが、普通に公開している無名の個人ブログを暗号化してもまったく無意味で過剰反応だと言えます。Googleがブラウザに警告を表示するなど脅しをかけてきますが、そもそもブログがSSL化されているかどうかなんて気にする人はほとんどいないと思います。SSL化しなくても何の実害もないですから・・

それでもGoogleがサイトのSSL化を評価の基準にするとアナウンスしているため、web管理者の立場からは少しでも有利にするため無関心ではいられないのです。とは言っても現時点ではSSL化の影響はごくわずかで、やはりコンテンツの良し悪しが一番重要であることは言うまでもありません。それならばわざわざ手間をかけてSSL化しなくても当面の間ほっといても良いかという結論になります。

しかしここへ来て大きな動きがありました。無料ブログ最大手のFC2が9月中旬よりSSLの提供を発表したのです。今までFC2がSSL化してないのでほっといても大丈夫だと高をくくってましたが、大手が動くと他の無料ブログも一斉にSSL化を推進することが予想されます。そうなるとSSL化してない独立系ブログは不利になるわけです。もちろんコンテンツの良し悪しが重要であることには違いありませんが、もし同じくらいの内容であればSSL化されている方が優位になることは当然あり得るわけで、先手を打っておきました。

SSL化によって起こる問題

一昔前までは自分でSSLサーバー証明書を申請したり、サーバーの設定を変更したり、結構面倒でしたが、今では無料のSSLもあり、サーバーの管理画面からちょっと変更するだけで簡単にSSLサイトを提供することが可能になりました。SSL化すること自体は簡単で誰でもできます。

しかし実際にはそう一筋縄ではいかないのです。新規に立ち上げるサイトならば問題は少ないですが、既存のサイトをSSL化すると予想しなかった多くの問題に直面します。それで前回は挫折したわけです。その問題の本質とは、「混在コンテンツ」の存在です。

混在コンテンツというのは暗号化されたhttpsと平文のhttpが混じっている状態を言います。このうち、従来のhttpコンテンツの中にhttpsが混じっているのは全く問題ありません。しかし逆にhttpsコンテンツの中にhttpが混じっているのはNGなのです。httpsではすべての通信が安全であることを保証しなければならないため、一つでもhttpが混じっているとブラウザは「安全でないコンテンツ」として警告を表示します。

それだけならまだいいのですが、JavaScriptで動作するブログパーツやアクセス解析などはブラウザが実行をブロックしてしまうため、その部分が表示されず空白になってしまいます。具体的にはYouTube、ルートラボ、amazonなどほとんどのサービスが該当します。前回はこれを知らなかったため、スカスカのコンテンツがいっぱいできてしまって挫折したわけです。

もちろん最近のサービスはほとんどSSL化されているため、ブログパーツも問題なく表示されます。しかしSSL化以前に貼り付けた古いタグが問題になるのです。記事数が少なければ手作業で直すことも可能ですが、数百個以上もあるととてもやってられません。古い記事は放置してあきらめるしかないでしょう。これがSSL化の最大の障害となるわけです。

移行の準備

サイトURLの変更

サーバーの設定でSSLを有効にしても、それだけではまだSSLサイトにはなりません。httpsへのリンクはどこにも張られていないからです。WordPressを使用している場合、管理画面にログインして設定→一般を開き、サイトURLをhttpsに変更する必要があります。

上記のように、サイトのURLを二つともhttpsに書き換えます。これだけでメニューやアーカイブなどに張られている内部リンクはすべてhttpsに置き換わります。

なお、この操作をやると.htaccessのRewrite関係の記述が上書きされてしまいますので、リダイレクト設定をやる前にしておかなければなりません。自分はこれではまって悩みました(笑)。

SSL未対応のタグを更新または削除

FC2、ブログ村などのブログパーツで少し古いタグはhttpになっているものがあります。最近のものはSSL化されていますので、新しいタグをもう一度取得して貼り替えます。サイドバーに埋め込んでいるものはこれだけでOKです。

それでもSSL化されていないサービスはあきらめて削除し、代わりのものを探しましょう。

記事の内容を一括書き換え

上の処理を行っても、記事本文に埋め込まれている画像や内部リンクはhttpsに置き換わりません。これらは全部自分で書き換えるしかないのです。記事が十個くらいしかなければ手作業でやることも可能ですが、数百個もあればもはや不可能です。普通はあきらめるしかないでしょう。

しかしWordPressの場合、データベースを直接操作することによって一括書き換えが可能です。自分もこの方法でやりました。具体的には、いったんテーブルをSQLファイルとしてエクスポートした後、テキストエディタで一括置換を行い、再びインポートするという手法です。つまり既存のテーブルをいったん削除して完全に置き換えるという操作ですね。

ただしこの方法はデータベースを直接操作するので、失敗すると記事が全部吹っ飛ぶ危険性があります。データベースの操作に自信のない人はやらない方が無難です。もちろん作業する前にデータベースの完全なバックアップを取っておかなければなりません。

ほとんどのサーバーにはphpmysqladminがインストールされていると思いますので、それを使えばデータベースの管理は簡単に行えます。まず記事の内容はwp_postsというテーブルに格納されていますので、そのテーブルを選択します。そして上のメニューから「エクスポート」を選択します。


上の方にある「エクスポート方法」のオプションで「詳細」を選択します。


すると「生成オプション」が表示されますので、「DROP TABLEコマンドを追加する」にチェックを付けます。これはテーブルをインポートする前にいったん削除するという命令なのですが、これを入れないと追記されてしまうため記事が二重になってしまいます。

上のオプションを設定したら、一番下の「実行」ボタンをクリックしてSQLファイルをダウンロードします。

次にそのSQLファイルをテキストエディタで開いて、中身を一括置換します。置換する項目については後述します。


SQLファイルの修正が終わったら、今度はインポートします。上のメニューから「インポート」を選択し、修正したSQLファイルを指定してアップロードします。結構時間がかかりますので気長に待って下さい。

SQLが正常に読み込まれたら書き換えは完了です。

書き換える項目

画像と内部リンク

自分のサイトの中にある画像はすべてhttpから始まる絶対URLで埋め込まれていますので、これをhttpsに一括置換します。内部リンクも同様です。ただし単純にhttpをhttpsに置換してはいけません。それでは余計なものまで置換されてしまいます。必ず「http://自分のドメイン」を「https://自分のドメイン」に丸ごと置換するようにして下さい。これなら余計なものまで置換されることはありません。

YouTube

最近のタグはSSL化されていますが、5年以前くらいのタグはhttpのままになっていますので、空白になってしまいます。これは「http://www.youtube.com」を「https://www.youtube.com」に置換するだけでOKです。

ルートラボ

自転車乗りならルートラボを貼り付けている方も多いと思いますが、やはり数年以上前のタグはhttpのままになっています。そのままでは空白になってしまいますので、「http://latlonglab.yahoo.co.jp」を全部httpsに置換します。

amazonアソシエイト

これも数年以上前のタグはhttpが残っています。そのままでは表示されません。しかし実はこれが一番厄介です。amazonの場合、URLが一種類だけでなく、複数のパターンが存在します。amazonという文字列で検索して、該当するものを全部httpsに置換しなければなりません。全部で5~6種類あったと思います。

しかしこれだけでは表示されない場合もいくつかありました。最終的にはamazonを貼り付けた記事を全部確認し、表示されてなかったら新しいタグに貼り直すしかないと思います。もちろん商品が古くてなくなっていたら外した方が良いです。

轍 ONLINE

自前ですいません。実は轍 ONLINEもSSL化されていなかったため、もろに空白になってしまいました(爆)。というわけで轍 ONLINEも急遽SSL化しました。「http://map.cyclekikou.net」を「https://map.cyclekikou.net」に置換すればOKです。これからSSL化を考えている方は上記の修正をお願いします。

その他

それ以外にも人によっては楽天アフィリエイトなどを埋め込んでいる方もいると思いますが、それも全部自分で検索して置き換えて下さい。Google AnalyticsやGoogle Adsenseはよほど古いものでない限り大丈夫のようです。

なおhttpで始まる外部リンクについては、クリックしない限り表示されないため、そのままでも問題はありません。

httpsへ強制リダイレクト

上記の修正を行ってサイトを隅々まで確認し、これで大丈夫!と思えたら最後にhttpからhttpsへのリダイレクトを設定しておきましょう。これによりhttpでアクセスされても自動的にhttpsに転送されます。

これをやらないとGoogleにはhttpとhttpsのインデックスが二重に登録されることになり、重複コンテンツとみなされる恐れがあります。必ず転送して一本化しておきましょう。

リダイレクトを設定するには、サーバーのルートディレクトリにある.htaccessに次の記述を追加します。

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://自分のドメイン/$1 [R=301,L]

これはhttpsでないアクセスをすべてhttps以下に転送せよという意味です。R=301というのは、永続的な移行、つまり引っ越したことを検索エンジンに知らせるためのオプションです。

なおWordPressでパーマリンクのカスタマイズをやっていると、すでにRewrite関係の命令が書き込まれているはずです。その場合は、RewriteEngine Onの下に残り2行を追加します。

まとめ

これで一応、警告や非表示コンテンツはなくなったかなと思いますが、とても全部チェックできませんので、古い記事は問題が残っているかもしれません。古くからやっていて規模が大きくなると大変ですよ・・

SSL化ってそれ自体はとても簡単なのですが、その後に生じる問題を全部潰すのが大変なんですよね。本当に良い勉強になりました(笑)。

片雲の風に誘われて