パーマリンクを「/2020/04/30/192935.html」のように日付に設定していると、WordPressのバージョンアップ5.4.1の影響でアーカイブページが表示され投稿ページが見れなくなりました。
サイトは正常の表示され管理画面にも入れるのでWordPressのバージョンを戻すのは簡単ですが、もし次回以降のWordPressアップデートで修正されないままだと、セキュリティの面でよくないです。
しかもパーマリンクをスラッグに変更しようとすると、このブログの場合400記事もあるので、個別のスラッグをリダイレクトする作業は正直面倒。
機械的にリダイレクトできないか考えてみます。
投稿記事にはそれぞれ「投稿ID」を持っています。この投稿IDをパーマリンクに設定すると、リダイレクトも機械的に行うことができるのではと思います。
さらに、投稿記事の「記事URL」と「記事ID」一覧がCSVで抽出できれば変更作業の負担も少なくて済みます。これは、プラグイン「Export All URLs」で可能です。
また、リダイレクトのプラグイン「Redirection」はCSVのインポートができます。
なので、Export All URLsで抽出した「記事URL、記事ID」からリダイレクト用のCSVを作成して、Redirectionでリダイレクトさせます。
パーマリンク変更とリダイレクトの手順
- プラグインExport All URLsで、記事URLと投稿IDリストをCSV形式で出力
- リダイレクト用の形式にCSVを作成
- パーマリンクの設定を日付→投稿IDに変更
- プラグインRedirectionでリダイレクト用CSVをインポート
日付パーマリンクから投稿IDへ一括リダイレクトの注意として、パーマリンク変更してからリダイレクト用CSVをインポートするまでの時間にアクセスしたユーザーは投稿ページが表示されません。アクセスの少ない時間帯に作業することをすすめます。
手順確認のためテスト用ブログのWordPressで作業しています。今後WordPressバージョンアップを様子見ながら当ブログの日付パーマリンクを投稿IDに変える予定です。
修正されるか分からないアップデートを待つのもしょうがない気がしたので、2020/5/3に日付パーマリンクから投稿IDに変更しました。
WordPress5.4.1で日付パーマリンクの記事が見れない現象について
アーカイブのページが表示され、記事の内容が見れません。
WordPressのバージョンをダウングレードして修正バージョンが出るのを待つことで解決はしそうなんですが、日時のパーマリンクがバグではなく仕様の可能性も高いです。
構造は必ず %post_id% あるいは %postname% で終了し、各パーマリンクが個々の投稿を指すようにしてください (例 /%year%/%monthnum%/%day%/%postname%/ )。
WordPressのパーマリンクは投稿ID(post_id)やスラッグ(postname)を入れる必要があるみたいで、日時のみのパーマリンクは使えたけど非推奨。
WPのサポートフォーラムに今回のバージョンアップが仕様ではなかとの書き込みも。
マイナーバージョンアップで変更するのは、理解しずらいですが、
もしかしたら何処かの修正で、パーマリンク設定を厳密にする必要が生じたのかもしれませんね。
今回のバージョンアップでパーマリンクのルールが厳密になって、日付のみのパーマリンクが使えなくなったとも考えられます。
投稿日が「年日時分秒」まで一緒な記事が複数あるとアーカイブページが表示されてしまうので、重複はなくても日付パーマリンクのみは問題があったのでしょう。
2020/05/16現在、まだ5.4.1からバージョンアップされていないので、パーマリンクで日時が使えなくなったのは仕様なのかバグなのかは分かりません。
もし、今後のアップデートで改善しなくてこれが仕様の可能性が高い場合、ダウングレードしたWordPressを使用続けるのはセキュリティ上よろしくないです。
Export All URLsで記事URLと投稿IDをCSVに出力
- 使用するプラグイン:Export All URLs
Export All URLsは記事のURL,や投稿IDを抽出してCSVで保存できるプラグインです。
Export All URLsをインストール
インストールしたら「ツール>Export All URLs」にアクセス。
Export All URLsでCSVファイルを生成する
英語は苦手なので、キャプチャー画像の各項目の補足説明は翻訳というよりは個人的な解釈になってます。
上から
- 投稿ページ
- 記事ID(投稿IDのこと)
- 記事URL
- 公開
- CSV
を選択します。
固定ページはスラッグを指定して投稿していますし、下書き保存や予約投稿はまだ公開前なので抽出する必要が無いと思います。
『Export Now』で抽出します。
サーバー上にCSVファイルが生成されます。
Export All URLsで生成したCSVをダウンロードする
一番上のメッセージ『Click here』からCSVファイルがダウンロードされます。
ダウンロードが完了したら、2番目のメッセージの『Click here』でサーバー上にあるCSVファイルを削除します。
ブラウザの更新をするとメッセージが消えるので、生成したCSVファイルはサーバーに残ったままになります。
生成されたCSVの保存先は画像を保存している場所と同じ「/wp-content/uploads/2020/05」になってます。※年月はCSVを生成した月によって変わると思います。
CSVファイルはWordPressのメディアには表示されませんが、FTPソフトやサーバーコントロールパネルのファイルマネージャーなどから削除できます。
リダイレクト用に形式にCSVを作成
Export All URLsでダウンロードしたCSVをプ、ラグインRedirectionでリダイレクト用のっ形式に合わせるCSVを作成します。
今回は、パーマリンクの設定で「http://サイトURL/id-1」のようにします。「年/月/日/」の階層を無くします。
Export All URLsで抽出したCSVをExcelやGoogleスプレッドシートなどで開きます。
この中から必要な項目はは「Post ID」と「URLs」です。
RedirectionのインポートするCSVの形式
リダイレクトできるCSVのフォーマットは「リダイレクト元URL,リダイレクト先URL」です。
スプレッドシートやエクセルだと以下のような書き方になります。
https://coronblog.kanazawacycleparking.jp/2020/04/30/192935.html | /id-11008 |
リダイレクト先のPostIDの先頭に「/」を入れる必要があります。パーマリンクを投稿IDだけにする場合「/1」のようにしますが、今回は「id-投稿ID」のように文字を入れます。
ブログがサブディレクトリでない限りドメインのURLは不要。
Redirectionのフォーマットに合わせるように別シートに作成
Redirectionのフォーマットに合わせるようにCSVを作成します。
別シートを作成したら、ヘッダー部分の1行目以外をコピーして並び替える。
次に、投稿IDの先頭に「/id-」の文字を”式”を使って付け足します。
B列のセルの文字の先頭に「/id」を加えるように、C列を「=”/id”&B1」で記入力します。「id」の部分は任意の文字です。
スラッシュを含めて任意に入れる文字はダブルクォーテーションで囲みます。
文字を末尾に追加する場合は「=”/”&B1&”文字”」になります。
投稿IDのみ「/1102」のような場合は、スラッシュだけの「=”/”&B1」です。
&を利用した文字の追加は「スプレッドシート、エクセル」共に共通。
文字を追加する式が出来たら、下のセルにもコピーします。
C列が「/id-投稿ID」の形式になりました。
C列をB列にコピーしてます。
書式情報は不要なので「値のみ」貼り付けます。
書式としてコピーするとURLに文字が追加されるので注意。
貼り付けたらC列は不要なので削除します。
これで、「リダイレクト元、リダイレクト先」の形式になったのでCSVで保存します。
テキストエディタで開くと、「リンク元URL,リンク先URL」の形式です。
リダイレクト用CSVはパーマリンク変更後にRedirectionにインポートさせます。
パーマリンクを変更する
「設定>パーマリンク設定」を開く。
今回は、パーマリンクの変更を先に行ってからリダイレクトの設定をします。
今回は階層なしの「/id-投稿ID」にします。パーマリンクはリダイレクト用に作ったCSVと同じにします。
パーマリンクの設定
- 旧:/%year%/%monthnum%/%day%/%hour%%minute%%second%.html
- 新:/id-%post_id%
変更したら『変更を保存』をクリックしてパーマリンクを変更します。
Redirectionで記事URLをリダイレクト
- 使用プラグイン:Redirection
Redirectionで記事の旧URLを新URLにリダイレクトします。
Redirectionをインストールする
「ツール>Redirection」で開く。
※プラグイン有効時に画面が切り替わる場合があります。
Redirectionの初期設定
最初にRedirectionを開くと初期設定をします。
英語は苦手なので、Google翻訳などからの個人的な解釈。
個人的にチェックを有効にする項目
- 投稿・固定ページのスラッグ変更で自動リダイレクト
- サイト内の404エラーページをログに保存
投稿・固定ページのスラッグ変更で自動リダイレクトは、パーマリンクを「%postname%」に設定してて、個別にスラッグを変更したときのみ自動的にリダイレクトの情報が登録されます。
パーマリンクの変更を行った場合は、自動リダイレクトになりません。
真ん中のサイト内の404エラーページのログ保存は、ユーザーが404ページにアクセスしたときにログが保存されるので、リンク切れの発見につながります。
最後の項目はリダイレクトや404ページにアクセスしたユーザーのIPを記録するので、パーマリンク変更で旧ページからのリダイレクトが多くなるので不要かなと思います。
『セットアップを続行』で次へ。
Redirectionでリダイレクト用のCSVをインポートする
Redirectionの画面の「インポート/エクスポート」を開く。
アップロードボタンを押します。
インポートが完了したら、設定がされているか『転送ルール』を確認します。
Redirectionでリダイレクトを確認する
古いリダイレクト元のURLをクリックして、リダイレクトがされているか確認します。
古い記事URLからリダイレクトされて記事の内容が表示されます。
もし、404エラーで記事が表示されない場合やアーカイブのままの場合は、リダイレクトとパーマリンクの設定を見直してください。
今後のアップデートで変わらなかった場合のためにリダイレクトの手順を覚えておく
いきなり本番環境で行うよりも、テスト用ブログをローカル環境やレンタルサーバーの空きスペースを利用して作って、手順を確認しておくといいでしょう。
日付パーマリンクでアーカイブページが表示されるのはバグなのか仕様なのかは投稿時点で分かりませんが、一時的にWordPressバージョンを戻して今後の対応してくれるか分からないアップデートを待つよりもパーマリンクを投稿IDに変更したほうが早いような気もします。
現に、当ブログも2020/5/3に日付パーマリンクから投稿IDに変更しました。
パーマリンクはIDなど文字を付けづに「/123」のように投稿IDのみにしました。