WING (AFFINGER5)のAMP対応で分割ページのURLがGoogle Search Consoleで404エラーになる問題の修正

投稿日:2018/10/1 (月) 更新日:

はじめに

WING (AFFINGER5) テーマは AMP に対応しており、以下の項目でチェックを設定することで有効化できます。

WordPress 管理 → [AFFINGER5 管理] → [投稿・固定記事] → [AMP対応]

当サイトはパーマリンク設定を以下のように設定しています。

カスタム構造 /blog/%year%/%monthnum%/%day%/p%post_id%/

WordPress ではページネーション (pagination) というページ分割機能があります。1つの記事が長くなった際にページを分割する機能です。たとえばこのページです。

上記で [次のページへ] をクリックすると URL が遷移して次のページとして表示されます。その URL は

/blog/2018/10/01/pXXXX/
/blog/2018/10/01/pXXXX/2/

となるのですが、AMP で表示すると

/blog/2018/10/01/pXXXX/amp/
/blog/2018/10/01/pXXXX/amp/2/

のように、/amp/ の後ろにページ番号が付与されます。

これだと配信している sitemap.xml の関係か、Google Search Console で該当ページが見つからない 404エラーが出るようになります。

Google Search Console AMP エラー (404)

Google では以下のようにあるべきのようです。

/blog/2018/10/01/pXXXX/amp/
/blog/2018/10/01/pXXXX/2/amp/

そこで、回避方法を考えました。

  1. AMP の2ページ目以降を ~/pXXXX/2/amp/ と出力できるようにテーマを修正
  2. ~/pXXXX/amp/2/ を ~/pXXXX/2/amp/ に転送するようにテーマを修正

1.の方が圧倒的にスマートなのですが対処方法が解決できなかったので、2.案で対処することにしました。

回避方法

1.WING (AFFINGER5) のテーマ、もしくは子テーマにある function.php に以下を追記します。

// AMP のページネーション対策
// パーマリンク設定:/blog/%year%/%monthnum%/%day%/p%post_id%/ の場合
if ( ! function_exists( 'amp_init_custom' ) ) {
	function amp_init_custom() {
		add_rewrite_rule('^blog/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/p([0-9]+)/([0-9]+)/amp?(/(.*))?/?$',
				 'index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&p=$matches[4]&page=$matches[5]&=$matches[8]&=1',
				 'top');
	}
}
add_action( 'init', 'amp_init_custom' );

2.テーマを更新し、[WordPress 管理画面] → [設定] → [パーマリンク設定] ページを開き [設定を保存] ボタンをクリックします。

add_rewrite_rule() 関数は WordPress に追加でリライトルールを指定するもので、第1引数に元の URL、第2引数に転送先 URL を示します。パーマリンク設定によって add_rewrite_rule 関数の第1引数、第2引数のインデックス番号が変わってきますので適宜修正してください。AFFINGER5 テーマ ファイル内の funcitons-amp.php にadd_rewrite_rule 関数の呼び出しが書かれているのですが直接終了するとテーマのアップデート時に支障が出ると考え別途呼び出しするように記述しました。

更新後にページの修正確認のリクエストを送信し、翌日エラー ステータスは解消されました。

Google Search Console AMP エラー (404) 解消

Rewrite Rule の一覧を確認する方法

以下のプラグインをインストールすることで、どのような Rewrite Rule が組み込まれているか取得することができます。ここで amp ページの Rewrite Rule を確認し、文字列を修正して対処しました。

Rewrite Rules Inspector

ひとまずこれでエラーの発生は解消できましたが、あまりスマートな方法に見えません。ぜひ本家テーマで「1.」に対応できるよう修正していただけるとありがたいです。

関連記事

-Web
-, ,

Copyright© WINGFIELD since1981 , 2018 All Rights Reserved.