Wordpress 将非类别页面 /page/nnn 重定向到它们的规范 URL

Wordpress Redirecting Non Category Pages /page/nnn to their Canonical URLs

我似乎在几乎所有其他 Wordpress 站点都发现了一个奇怪的问题。

假设,您已将博客主页设置为静态 WP 页面 /myhome。你有一个单独的博客页面 /blog.

现在,这工作正常,应该是:

/blog
/blog/page/2
/blog/page/3
/blog/page/4

但是,对于所有其他页面,例如/about-us,这些链接也有效:

/about-us/page/2
/about-us/page/3
/about-us/page/4

并显示/about-us页面的内容。

我的问题是 /about-us/page/2 理想情况下应该重定向到 /about-us(这是规范的 URL),因为除了 /blog 之外的任何其他页面都没有分页。

我错过了什么?这似乎发生在我检查过的几乎所有网站上,从 SEO 的角度来看确实令人沮丧。

这不是正常的 Worpdress 行为,如果页面未启用分页,则它不应接受页面参数。刚刚在 Wordpress 页面上测试,/mypage/page/2 给出了 404。

这可能与您的主题以及 post 的查询方式有关。例如。在您的主题文件中查找 posts_per_pagenumberposts,并找到与您的页面相关的查询。然后将值更改为 -1 以禁用分页。

另一种解决方案是重定向所有分页 URL(博客除外)- functions.php:

function redirect_pagination() {
    if(!preg_match('/blog/', $_SERVER['REQUEST_URI'])) {
        if(preg_match('/page\/[0-9]+\/?$/', $_SERVER['REQUEST_URI'])) {
            $new_url = preg_replace('/(page\/[0-9]+\/?)$/', '', $_SERVER['REQUEST_URI']);
            wp_redirect($new_url, 301);
            exit;
        }
    }
}
add_action( 'init', 'redirect_pagination', 1 );

这是有意设计的。多年来,WordPress 重写变得越来越复杂,许多插件利用页面的 page 端点(通常带有模板和自定义查询)——重定向引入了潜在的痛苦世界。

长话短说,反正无所谓。 WordPress 为页面添加 <link rel="canonical />,因此无需担心重复内容。

更新: 对于您想忽略潜在风险的本地化情况,这会将所有页面 URL 规范化 - 请注意,它不会检查页面是否实际分页(即使用 <!--nextpage--> quicktag),如果你使用它会破坏这个功能。

function wpse_199180_canonical_pages( $wp ) {
    if ( ! is_admin() && is_page() && isset( $wp->query_vars['paged'] ) ) {
        wp_redirect( get_permalink( get_queried_object() ), 301 );
        exit;
    }
}

add_action( 'wp', 'wpse_199180_canonical_pages' );