在WordPress中,您有三种主要的“视图”:
“标准”主页只是一个有点特殊的归档页面,一个静态首页一个有点特殊的单一页面。
使用端点时page
在首页url中,WordPress在内部设置查询变量page
到一个特定的数字(可能是paged
对于常规页面)。
问题是paged
是一个查询变量,在WordPress中,它只对存档和搜索视图有意义,事实上,数据库中没有对单个结果分页。
简而言之,WordPress承认url在形式上是正确的,但忽略它设置的查询变量。
事实上,如果您尝试对任何其他页面(不是头版)执行相同的操作,则行为是相同的。
简而言之,这些URL即使不是“规范”URL,也不会产生404,因为它们对应于一组有效的查询变量,返回一个非空结果。
对于单数帖子,这不会发生,因为WordPress对帖子会重定向“规范”url。
WordPress对首页和普通页的处理方式不同,因为很多人将其用作帖子归档的入口点,在这里分页非常有意义。
因此,在成本/收益平衡中,WordPress首选默认情况下不会将页面重定向到其规范url。
即使是因为,关于SEO,这并不是真正有不良影响的事情,除非你有指向主页url的所有web链接/page/xxx
已附加。
在这种情况下,如果这样的URL不再有效,您应该小心301重定向它们。
顺便说一下,您可以强制WordPress对页面和首页应用规范重定向:
add_action(\'template_redirect\', function() {
if (
(is_page() && get_query_var(\'paged\'))
|| (
is_front_page()
&& get_option(\'show_on_front\') === \'page\'
&& get_query_var(\'page\')
)
) {
wp_safe_redirect(get_permalink(get_queried_object_id()), 301);
exit();
}
}, 99);
作为替代方案,您还可以在这些URL上强制404。在我看来,301重定向对搜索引擎优化没有真正的好处,但对不再使用该页面的用户有负面影响。
顺便说一下,代码是这样的:
add_action(\'template_redirect\', function() {
if (
(is_page() && get_query_var(\'paged\'))
|| (
is_front_page()
&& get_option(\'show_on_front\') === \'page\'
&& get_query_var(\'page\')
)
) {
global $wp_query;
$wp_query->set_404();
status_header( 404 );
nocache_headers();
locate_template(array(\'404.php\', \'index.php\'), true);
exit();
}
}, 99);