【ワードプレス移行】はてなブログ標準URLで移行したワードプレスのパーマリンクを変更(2019年版)

【ワードプレス移行】はてなブログ標準URLで移行したワードプレスのパーマリンクを変更(2019年版)

はてなブログ標準URL形式でワードプレスに移行したブログのパーマリンクを変更し、301リダイレクトの設定をしたので、簡単だがその作業ログを公開する。

注意:本エントリーを読まれる際の注意事項

  • この記事は個人的な作業記録を記した内容のため誤っている可能性があります。当サイトの閲覧によって発生したいかなる損害に関しても、当サイトは一切の責任を負うものではありません。
  • 記事を書いた後に行っているカスタマイズによって、移行時の内容と現在のサイト状況が必ずしも合致していない部分があります。

パーマリンク変更に至るまで

2017年まではてなブログを使っていたが、記事の投稿ははてなブログの標準URL形式(/entry/年/月/日/数字)で投稿していた。

  • 【はてなブログの標準URL形式】

id.hatenablog.ドメイン/entry/年/月/日/数字

  • 【はてなブログのカスタムURL形式】

id.hatenablog.ドメイン/entry/任意名

はてなブログのカスタムURL形式に設定すると、「entry」の部分だけは外せないが、/年/月/日の部分がなく、数字の部分も任意の名前を付ける事が出来る。
カスタムURL形式の利点はワードプレスに移行しても、ある程度同じようなパーマリンクとなり、移行や投稿が楽になる事がある。
また、数字だと見た目で何の記事か分からないが、任意名だと記事の内容の推測が付くので、アクセス解析などでも見た目で分かり易くなる。

本来は、はてなブログ使用中にカスタムURL形式に変更していれば、移行作業でもっと楽が出来たのだが、当時は余裕がなく全くそういった事を考えられなかった。

移行当時は、独自ドメインを取得しており、wwwサブドメイン付きのURLになっていたので、2017年の移行時は以下のパーマリンクの形式でワードプレスへ移行していた。

  • 【このブログのワードプレスへの移行形式】
www.ドメイン/entry/年/月/日/数字

このあたりは、以下の記事にまとめているので、合わせて参照いただければと思う。

entry年月日が付いたパーマリンク形式でも特に問題はないが、ワードプレスで記事を投稿する時の年月日がそのままURLに設定され、古い記事になると年月日が古いと見て分かってしまうことがデメリットといえる。URLが無駄に長くなるよりもシンプルにしたいのもあった。

そこで、今回、移行から2年以上経つが、ワードプレスのパーマリンクを投稿名(sample-post)に設定し直した。
また、旧URLから新URLへの301リダイレクト設定を行った。
以下は、作業内容と、参考にさせていただいたエントリーを掲載する。

作業前の状態

  • バージョン:WordPress 5.2.3, PHP 7.2.17
  • パーマリンク設定:カスタム構造(/entry/%year%/%monthnum%/%day%/%postname%)

ワードプレスのパーマリンク変更作業

SPONSORED LINK

ワードプレスのバックアップを取得

作業前に、ワードプレスのデータベースバックアップを行う。
レンタルサーバーのphpMyAdminでデータベースバックアップを取得する。
public_htmlフォルダ以下もFFFTPで丸ごとダウンロードしておけば、問題が発生しても今の状態まで戻す事が出来る。

現状のURLの一覧表を作る

現状を記録しておくため、URLの一覧表を表計算ソフトなどで作成する。
また、301リダイレクト設定後に、リダイレクトがちゃんとされていることをこの一覧表で確認する。

ワードプレスのパーマリンク設定の変更

ワードプレスのダッシュボードの設定>パーマリンク設定からパーマリンク設定を「投稿名(sample-post)」に変更する

  • 変更前:
    カスタム構造(/entry/%year%/%monthnum%/%day%/%postname%)
  • 変更後:「投稿名」形式に変更
    投稿名(sample-post)

変更を保存を押す。

この変更を行うと、全ての投稿記事のURLは「ドメイン/%postname%/」に即座に変更される。
今までのURLの外部リンクと内部リンクは全て切れるため、正常にアクセス出来るように、以下の301リダイレクト設定をする。
(301リダイレクト設定しないと既存の記事の検索評価は全てリセットされる。)

パーマリンクを変更した記事のURLの一覧表を作る

パーマリンクを変更後のURLチェックする為に一覧表を作る。
やり方などは現状URLを記録した方法と同じやり方で行う。
これで旧新のURLの一覧表を取得したことになる。

301リダイレクト設定をする

ここからは、旧パーマリンクから新パーマリンクへリダイレクト(301リダイレクト)設定をする内容となる。
リダイレクト設定は、.htaccessを編集したり、プラグインを使ったりと、幾つかの方法がある。

プラグインを使う場合、作業の手間や時間が少ないことが利点だが、プラグイン自体が動作保証されていないことがデメリットとなる。.htaccessに直接書く方が長期的に見るとリスクは低い。
また、レンタルサーバーではプラグインを常時起動すると動作が重くなるため、プラグインはなるべく減らしたい。
このことから、このサイトでは.htaccessでリダイレクト設定をすることとした。

リダイレクト設定方法の種類

.htaccessで301リダイレクトを設定する方法は、調べた限りでは2パターンある。

  1. 正規表現を使って変換処理を.htaccessに1行で書く
  2. 旧と新のパーマリンク(URL)の1対1の変換表を作り、変換するURLを全て.htaccessに全て書く

方法2の場合、301リダイレクトの一覧表を作り、全てを.htaccessに貼り付ける機械的なやり方になる。
変換表の方が機械的に出来そうだったが、.htaccessが物凄く長くなってしまうため、正規表現で1行で書くやり方を行う事とした。

正規表現で1行で書く場合、はてなブログの標準形式で「/entry/%year%/%monthnum%/%day%/%postname%」としていたため、entry以下余分な部分を削除するため、.htaccessに以下の処理を追加する。

RewriteRule ^entry/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ /$4 [R=301,L]

この正規表現により、旧URL形式である「/entry/%year%/%monthnum%/%day%/%postname%」でアクセスされた場合、301リダイレクト時にentry以下の部分が削られ、URLが「/%postname%」だけになってアクセスされる。

追記(2019/10/24)
.htaccessに上記の変更を行うと、「/entry/category/xxx/xxx/xxx」のようなカテゴリーにアクセスされた場合、エラーになってしまっていた。
Googleアナリティクスで見ると/entry/category/xxx/xxx/xxxにアクセスされて404エラーになった履歴があったため判明した。
これは単純にカテゴリーURLがはてなブログの標準形式では/entry/category/xxxになっていたものが、.htaccessで/entry部分を除外したため、カテゴリーURLが/category/xxxになってしまったため生じたものだ。
ブログの中でカテゴリーURLにアクセスされた場合は問題ないが、外部のサイトの外部リンクなどで何かのカテゴリーにURLごとリンクされている場合は/entry部分が存在しないURLになるため、エラーになってしまう。
これも同じようにhtaccessでリダイレクトで飛ばすことが出来るので.htaccessに追加で以下を入れた。

RewriteRule ^entry/category/(.*)$ category/$1 [R=301,L]

この正規表現により、旧カテゴリー形式である「/entry/category/xxx/xxx/xxx」でアクセスされた場合、「/category/xxx/xxx/xxx」に301リダイレクトされる。

追記(2020/11/07)
Adsenseのエラーメッセージで「広告クローラのエラー」が発生し、画面を確認した所「/entry/tag/tag-xxxxxx」のページが見つかりませんと表示されていた。

原因は上記で対応済みになった「/entry/category/」と同じで、はてなブログ標準形式の「entry」をクローラーが読んでいるが「/entry/tag/tag-xxxxxx」が存在しない(パーマリンク形式でentryをなくしてentryなしのURLに.htaccessで301リダイレクトさせているため)ためだが、.htaccessの記述に「/entry/tag/xxx/」を「/tag/xxx/」に301リダイレクトさせる記述が漏れていたため発生していた。

なぜ今頃になって発生してきたかについては、sitemapでtagを読み込む設定に変更したからだろう。(Wordpressダッシュボード>設定>Sitemapコンテンツ>WordPress標準コンテンツに「タグページを含める」という項目があり、以前はチェックを外していたが、どこかのタイミングでチェックありに変更していたため。)

対応は「/entry/category/」の時と同じで.htaccessに「entryなしURLに301リダイレクトさせる」記述を追加してサーバーにFTPアップロードする。

RewriteRule ^entry/tag/(.*)$ tag/$1 [R=301,L]

.htaccessに301リダイレクトを追加する

FFFTP等のFTPクライアントソフトでレンタルサーバーにアクセスする。
/ドメイン名のフォルダ/public_htmlフォルダにアクセス。(ファイルのある階層の位置は、レンタルサーバーによって異なる。)
フォルダにある「.htaccess」をPCローカルにダウンロード。
(直接サーバーパネルから作業しても構わないが、ローカルで編集したファイルをサーバーアップロードする方が確実な印象があるため。)

以下、PCローカルで作業する。

  • .htaccessのバックアップをコピーして保存。
  • .htaccessをSakuraなどで開いて編集。(UTF-8で編集する)
  • .htaccessに以下のリダイレクト設定を記述する。(コメントの# BEGIN WordPressの前に記述する)

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^entry/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ /$4 [R=301,L]
RewriteRule ^entry/category/(.*)$ category/$1 [R=301,L]
</IfModule>
# BEGIN WordPress

.htaccessを保存したら、FFFTPでサーバーへアップロードして上書きする。
先ほどダウンロードしてきた場所に.htaccessをアップロードすると上書きされる。

一旦、ワードプレスのダッシュボードにアクセスが出来るかどうかを確認する。(特に問題なくダッシュボードにアクセス出来た。)
ダッシュボードにアクセス出来なくなった場合、バックアップしておいた.htaccessをFFFTPで戻す。

動作確認

以下の動作確認を行う。

URLの遷移動作のチェック

  • 旧URL一覧表で旧URLが新URLにリダイレクトされる事を確認する。変更前のURL形式
    https://example.com/entry/yyyy/mm/dd/postname
    ↓(変更後のURL形式にリダイレクトされるはず)
    https://example.com/postname/幾つかURLをブラウザに入れて表示を試したが、特に問題なく旧URLが新URLにリダイレクトされた。
  • 新URL一覧表で新URLが正常表示されることを確認する。特に問題なく表示された。
  • 表示されない場合は、ブラウザのキャッシュを削除して試してみる。

リダイレクトの301コードのチェック

リダイレクトされた際に「301コード」が取れているかを確認する。
確認の方法は、クロームのデバッグ機能を使うか、ウェブのリダイレクトチェッカーで確認する。

特に問題なく表示されたが記事を一件ずつ確認するので時間がかかった。

サイト内リンクの書換え(実施せず)

サイト内部の記事で、内部リンクを参照している場合、旧URLの形式になっているため、新URL形式に変更する。
一括変更については、プラグインのSearch Regexを使うのが一番楽で早い。

が、Search Regexで「Post content」の検索・置換をしようとした場合、カスタム投稿タイプには対応していないらしく、検索や置換は出来なかった。
(Search Regexでpostとpageしか対応していないため)

結局、内部リンクを変更しなくても、サイトにアクセスされた段階で301リダイレクトされて新URLにアクセスされるため、内部リンクはそのままにしてもそれほど問題ないと判断し、変更せずそのままとした。

その他の変更

  • 固定ページ等に書いていた、「ドメイン/entry/yyyy」で各年代毎のアーカイブを表示していたが、新URL形式はentryがないためリンク切れになっていた。固定ページを手動で変更して対応。
  • ウィジェットで使っている月別アーカイブは、パーマリンク構造の変化を自動で反映してドメイン/yyyy形式になっていたので対応不要。

GoogleサーチコンソールでURL検査・インデックス登録

新形式のパーマリンクで検索エンジンのページクロールを促進するため、GoogleサーチコンソールでURL検査を行う。
サーチコンソールは新しくなっており、以前のFetch as Googleはなくなっている。代わりにURL検査というツールになっている。

URL検査後、「URL は Google に登録されています」と表示される。「インデックス登録をリクエスト」を押す。

一件に数分かかるため、かなり時間がかかった。
また、52件目の登録から、「割り当て量の超過 プロパティの URL 検査の割り当て量を超えています。割り当て量は毎日更新されます。」と表示され、インデックス登録出来なくなった。
恐らく、一日の許容量が設定されており、50件前後を超えると登録出来なくなると思われる。

XMLサイトマップを通知

SNSカウントは0に

パーマリンク変更後は、SNSカウントは0になる。パーマリンクを変更する事で、ソーシャルのブックマークや「いいね」などのカウントがゼロになる。

英文字名のパーマリンクに変更(今回は変更せず)

これは、はてなブログで書いていた記事のパーマリンク形式が「123456」のような数字IDになっているため、英文字名のスラッグ(パーマリンク名)に変更したいということ。

(例)
パーマリンク変更前(はてなブログ標準URL形式)
https://example.com/entry/yyyy/mm/dd/数字ID

現状(数字ID形式)
https://example.com/数字ID/

変更したい(英文字postname)
https://example.com/postname/

が、一度に色々な変更をすると、後で問題が起きた時に切り分けが難しくなるため、今回はパーマリンク形式の変更と301リダイレクトだけすることにした。
(一応、2017年以降の投稿は英文字名で投稿していたので、直近のpostnameは全て英文字になっている。)

2019年11月追記

このサイトでは現在URLは「ドメイン/postname/」という形式にしているが、移行時に「www.ドメイン/entry/年/月/日/数字」形式のURLで移行したことで、段階的に以下の変更作業が必要だったため、合わせて掲載する。

ブログ・ワードプレス・レンタルサーバーカテゴリの最新記事