404 для страниц пагинации отдельных записей

Контент постов можно делить тегом <!--nextpage-->, тогда каждая часть текста будет доступна под своим адресом.

К примеру, добавим по контенту 2 таких тега, тем самым разделим его на 3 части, которые будут доступны по следующим адресам:

  • 1 часть - https://site.com/test-post/
  • 2 часть - https://site.com/test-post/2/
  • 3 часть - https://site.com/test-post/3/

Если перейти по адресу https://site.com/test-post/1/, то перенаправит на https://site.com/test-post/, тут всё логично. Но если перейти на https://site.com/test-post/4/ или другую несуществующую часть контента - отобразится всё как обычно, но текста не будет (части 4 ведь нет). То есть страница есть, а контента нет. В таких случаях должна быть ошибка 404, но WP отдаёт ответ 200, что может плохо сказать на сео. Исправим это поведение.

Данный недочёт есть не на всех сайтах!

По умолчанию WP перенаправляет на основной УРЛ с несуществующей страницы пагинации записей (постов).

Вероятнее всего это связано с отключением функции redirect_canonical():

remove_action( 'template_redirect', 'redirect_canonical' );
// Вариант 1. Отменяем пагинацию для отдельных страниц
// (тенденция, что их никто и не использует)
add_filter( 'pre_handle_404', 'remove_single_post_pagination', 10, 2 );

function remove_single_post_pagination( $false, $wp_query ) {

	if ( is_singular() && get_query_var( 'page' ) ) {

		$wp_query->set_404();
		status_header( 404 );
		nocache_headers();

		return 'stop';
	}

	return $false;
}

Эта заметка встроена в: pre_handle_404