WordPressのパーマリンクの形を自由に設定できます。そして、絶対に設定してはいけない形があります。
のような、/[数字] の構造は絶対にやめましょう。
月別ページと重複する
上記のような数字だけのパーマリンクは、PostIdを利用して、パーマリンク設定でカスタム構造を「/%post_id%」に設定したり、カスタム構造を「%postname%」に設定して、Slugs or PostIDを利用すると作れます。
今後将来、インターネットのファイルの形式がずっとHTMLである保証はありません。https://www.wakatta-blog.com/1234 のような、拡張子.htmlがないリンク形は理にかなっています。
しかし、とんでもない落とし穴が待っていました。数字だけのファイル名だと、年別ページと重複する可能性があるのです。PostIDが1から999までは良いのですが、4桁、つまり1000から9999までは、WordPress側で自動的に記事を非表示する「4桁フィルター」が作動して、記事が表示されなくなってしまうのです。
2103年の月別ページと、PostIDが2013の記事が同じURL https://www.wakatta-blog.com/2013 になってしまいます。PostIDをリンクに使いたい場合は、「/1234」ではなく、「/post-1234」や「/1234.html」のような形にしないといけないのです。【追記】コメント頂いたように「/post/1234」も良いですね。
PostIDが4桁なんて、そう簡単にはたどり着かないかと思うかもしれません。実はPostIdは記事数と一致しません。リビジョン数や下書き数も等もカウントするブログ全体の通し番号なので、あっという間に1000を超えてきます。
▼▼▼▼
既に設定してしまって、多くの記事をポストしてしまっている方もいると思います。ご安心ください。対策はあります。
「4桁フィルター」を無視する
年別ページを使う方ケースはほとんどありません。年別ページを今後絶対に使わないと決めて、「4桁フィルター」を無効にしてしまう方法があります。
[解決済み] 記事が見つかりませんでした を参照して、function.phpファイルにフィルターを無効にする記述をしてください。
今のPostIDから、パーマリンクを新しい形に変える
パーマリンク設定をカスタム構造「%postname%」にして、function.phpに下記のコードを記述します。
[php]
function auto_post_slug( $slug, $post_ID, $post_status, $post_type ) {
$nowPostId = 1;
if ( preg_match( ‘/(%[0-9a-f]{2})+/’, $slug ) || preg_match( ‘/[0-9]{4}/’, $slug )) {
if($post_ID > $nowPostId) {
$slug = ‘post-‘ . $post_ID;
//$slug = $post_ID . ‘.html’;
}
}
return $slug;
}
add_filter( ‘wp_unique_post_slug’, ‘auto_post_slug’, 10, 4 );
[/php]
管理画面から新しい記事を「新規追加」すると、スラッグの部分がpost-***のように自動的に書き変わります。***が現在のPostIdです。
上記コードの$nowPost = 1の「1」を***の数字に書き換えて、再びfunction.phpファイルを上書きすると。この記事以降はpost-***のリンクの形で投稿できます。もちろん、スラッグを自分で書き換えることもできます。その際は英数字でスラッグを書くことになります。
過去の記事の数字が3桁以下であれば、元々問題ないのでそのまま利用して、今後の記事は4桁問題を回避できるパーマリンクにできます。
過去記事のURLを変更してしまうと、301リダイレクトで処理しないと検索エンジンからの流入が無くなってしまう上に、重複コンテンツとみなされて、最悪ペナルティを食らう可能性もあります。
ぜひお試しください。
【追記】
今は問題なくても、将来的に自作などの4桁問題に未対応のテーマに変更した場合に、問題が顕在化する可能性もあります。4桁問題は存在しますので。
今後新しくブログを立ち上げる方は、「/%post_id%」は設定しないほうが無難かなと思います。
コメント