Woocommerce 分页 - 防止第 1 页上的 301 重定向
Posted
技术标签:
【中文标题】Woocommerce 分页 - 防止第 1 页上的 301 重定向【英文标题】:Woocommerce pagination - prevent 301 redirect on page 1 【发布时间】:2018-02-22 00:51:43 【问题描述】:使用最新版本的 Wordpress 和 Woocommerce。
如果我的商店中有 2 页产品,并且我点击了分页链接中的 PAGE 1,我会收到一个 301 重定向,该重定向会转到 /shop。
出于 SEO 的目的,我想禁用 301 重定向并将链接保持在分页链接中,即 /shop/page/1
这似乎是 Woocommerce 中的默认行为,这不是我的 Shopkeeper 主题正在做的事情。
【问题讨论】:
您找到解决方案了吗?有同样的问题。 对不起,我没有。我摆脱了 Woocommerce 分页并实现了 javascript 分页导航! 【参考方案1】:在我正在构建的网站上遇到了同样的问题。尽管您要求保留 /shop/page/1/(没有 301),但实际上最好将 /shop/ 作为您的第一页。否则,您将有两个相同的页面提供 Google 不喜欢的相同内容。
我采取的方法是将分页的输出更改为 NOT include /page/1/ 在链接中。然后删除 301,因为链接开始时是正确的。为此,我使用了过滤器paginate_links
。
add_filter('paginate_links', function($link)
$pos = strpos($link, 'page/1/');
if($pos !== false)
$link = substr($link, 0, $pos);
return $link;
);
希望这会有所帮助。
【讨论】:
原版 WP 博客网站有类似的问题,此修复按预期工作。我不确定为什么在 OOB WP 代码中没有解决这个问题。 当您到达第 10 页又名 /shop/page/10/ 时,此代码会中断吗?似乎第二行代码应该是“$pos = strpos($link, 'page/1/');” (注意添加的斜线)。 对我来说效果很好。谢谢。【参考方案2】:您可以使用以下正则表达式仅匹配第 1 页。SaRiD 的答案也将匹配第 10-19、100+ 页等,因为它们都以 1 开头。
add_filter('paginate_links', function ($link)
return preg_replace('#page/1[^\d\w]#', '', $link);
);
【讨论】:
Clean.. 将其粘贴到您的 functions.php 和 BLAM 中!不再出现第 1 页分页 301 永久重定向错误! 朝着正确方向迈出了一步,但我想说这更正确:return preg_replace('#/page/1/#', '/', $link); 只有在使用斜线作为分隔符时才需要转义。 @scott8035 假设您的网址使用斜杠,这并不总是正确的,因为它们在 WordPress 中是可选的。【参考方案3】:SaRiD 的答案将匹配所有以 1 开头的页码。
Christopher Geary 的回答使用 preg_replace,这是不必要的,应尽可能避免。
If you don't need fancy replacing rules (like regular expressions), you should use this function instead of preg_replace().
以下解决方案仅适用于 str_replace!如果 WordPress 永久链接中的尾部斜杠未被禁用并且永久链接中没有进一步的路径部分 /page/1/。
add_filter( 'paginate_links', function( $link )
return str_replace( '/page/1/', '/', $link );
);
感谢 SaRiD 和 Christopher Geary 之前的回答。
【讨论】:
如果永久链接结构不包括尾部斜杠,这将不起作用。这不适用于原始问题中提供的示例。 @ChristopherGeary - 是的,你是对的,但我在回答中明确提到了这种情况。在这种情况下,您可以删除 $search 和 $replace 参数中的尾部斜杠。以上是关于Woocommerce 分页 - 防止第 1 页上的 301 重定向的主要内容,如果未能解决你的问题,请参考以下文章