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_page
和 numberposts
,并找到与您的页面相关的查询。然后将值更改为 -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' );
我似乎在几乎所有其他 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_page
和 numberposts
,并找到与您的页面相关的查询。然后将值更改为 -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' );