はじめに
WING (AFFINGER5) テーマは AMP に対応しており、以下の項目でチェックを設定することで有効化できます。
WordPress 管理 → [AFFINGER5 管理] → [投稿・固定記事] → [AMP対応]
当サイトはパーマリンク設定を以下のように設定しています。
カスタム構造 /blog/%year%/%monthnum%/%day%/p%post_id%/
WordPress ではページネーション (pagination) というページ分割機能があります。1つの記事が長くなった際にページを分割する機能です。たとえばこのページです。
上記で [次のページへ] をクリックすると URL が遷移して次のページとして表示されます。その URL は
/blog/XXXX/ /blog/XXXX/2/
となるのですが、AMP で表示すると
/blog/XXXX/amp/ /blog/XXXX/amp/2/
のように、/amp/ の後ろにページ番号が付与されます。
これだと配信している sitemap.xml の関係か、Google Search Console で該当ページが見つからない 404エラーが出るようになります。
Google では以下のようにあるべきのようです。
/blog/XXXX/amp/ /blog/XXXX/2/amp/
そこで、回避方法を考えました。
- AMP の2ページ目以降を ~/pXXXX/2/amp/ と出力できるようにテーマを修正
- ~/pXXXX/amp/2/ を ~/pXXXX/2/amp/ に転送するようにテーマを修正
1.の方が圧倒的にスマートなのですが対処方法が解決できなかったので、2.案で対処することにしました。
回避方法
1.WING (AFFINGER5) のテーマ、もしくは子テーマにある function.php に以下を追記します。
2.テーマを更新し、[WordPress 管理画面] → [設定] → [パーマリンク設定] ページを開き [設定を保存] ボタンをクリックします。
add_rewrite_rule() 関数は WordPress に追加でリライトルールを指定するもので、第1引数に元の URL、第2引数に転送先 URL を示します。パーマリンク設定によって add_rewrite_rule 関数の第1引数、第2引数のインデックス番号が変わってきますので適宜修正してください。AFFINGER5 テーマ ファイル内の funcitons-amp.php にadd_rewrite_rule 関数の呼び出しが書かれているのですが直接終了するとテーマのアップデート時に支障が出ると考え別途呼び出しするように記述しました。
更新後にページの修正確認のリクエストを送信し、翌日エラー ステータスは解消されました。
Rewrite Rule の一覧を確認する方法
以下のプラグインをインストールすることで、どのような Rewrite Rule が組み込まれているか取得することができます。ここで amp ページの Rewrite Rule を確認し、文字列を修正して対処しました。
https://wordpress.org/plugins/rewrite-rules-inspector/
ひとまずこれでエラーの発生は解消できましたが、あまりスマートな方法に見えません。ぜひ本家テーマで「1.」に対応できるよう修正していただけるとありがたいです。