WooCommerce:如何更改永久链接结构
已发表: 2021-09-28WooCommerce 永久链接结构对于新手来说可能看起来不寻常。 URL 的那些/product/和/product-category/部分是众所周知的独特特征,但一些专家不同意这是处理永久链接 SEO 的最方便方法。
一个流行的想法是始终保持 URL 结构尽可能简单,并删除其中任何不必要的部分。 您不必相信这些专家或我的话,因为 Google 的官方指南建议避免使用带有不必要参数的冗长 URL。
那么,这对 WooCommerce 商店建设者究竟意味着什么?
首先,像/shop/ 、 /product-category/和/product/这样的 URL 基础可以被认为是不必要的,因为 Google 知道如何定义商店和产品页面,而无需在 URL 中指定。
并且您可能不想让爬虫对站点深度产生错误的认识,因此他们不会对这些页面的评分低于应有的评分。 同样,一个众所周知的规则 - 靠近主文件夹(域)的页面对搜索引擎更有意义。
如果您同意此类声明,那么了解如何重新设计 WooCommerce 中的永久链接结构将很有帮助。 因此,请提前阅读以了解相关信息。
WooCommerce 的默认永久链接结构是什么?
让我们看看永久链接现在是如何工作的,以及我们可以做些什么来使它们更加用户友好。
在创建永久链接设置时,您必须确保指出一些事项:
- 产品类别库(默认为/product-category/ )
- 产品标签库( /product-tag/默认)
- 产品页面基础(可以是/product/ 、 /shop/或任何其他自定义基础)
您无法将这些选项留空或对两个永久链接使用相同的选项(例如/shop/ )。 产品、类别和标签库应该是唯一的,以免引起分类法、帖子和页面之间的冲突。
因此,商店页面的默认 URL 可能如下:
- 对于类别页面:site.com/product-category/category-slug
- 对于标签页:site.com/product-tag / tag -slug
- 对于产品页面:site.com/product/product-slug
虽然它对于标签页面非常好(您可能需要一些基础来定义类别和集合之间的差异),但使用这些基础来处理类别和产品页面 URL 可能是多余的。
为什么要考虑更改默认永久链接
有时 WooCommerce 用户敦促摆脱/product-category/和/product/基础或以其他方式操纵标准 URL 结构。 发生这种情况有两个重要原因:
- 他们希望看到简单明了的 URL ,这也可以从 SEO 的角度受益。
- 如果从另一个 CMS 切换到 WP\Woo 并希望保持相同的 URL 结构
删除 URL 的这些部分是否可以改善您的 SEO 结果是有争议的。 但这是人们甚至考虑破坏 WooCommerce 的默认永久链接结构的最普遍原因。
有一些受人尊敬的消息来源告诉我们如何构建永久链接以及为什么较短的 URL 更好——Backlinko 搜索引擎排名因素(第 10 点)、Moz 构建 URL 的最佳实践(第 6 点和第 11 点)。
如果您正在创建一个新网站,可以安全地进行此类实验并查看它如何帮助您的 SEO。 而在已经完善的网站上更改永久链接可能是一件冒险的事情。 我会进一步解释我的担忧。
另一方面,关于更改永久链接以匹配您的旧网站 URL,这似乎是合理的,并且让您有更多机会不损害您的 SEO 跟踪记录。
如何从 WooCommerce 永久链接中删除 /product-category/ 和 /product/
当您不需要使用 301 重定向来让您的用户和爬虫知道 URL 已更改时,以下方法可以安全地用于新网站。
您需要做的第一件事是转到 WP Settings > Permalinks 并滚动到“ Product category base ”并写下“。” (点)作为自定义基础。
然后,将此代码段粘贴到您的 functions.php 文件中:
add_filter( 'request', function( $vars ) {
global $wpdb;
if( ! empty( $vars['pagename'] ) || ! empty( $vars['category_name'] ) || ! empty( $vars['name'] ) || ! empty( $vars['attachment'] ) ) {
$slug = ! empty( $vars['pagename'] ) ? $vars['pagename'] : ( ! empty( $vars['name'] ) ? $vars['name'] : ( !empty( $vars['category_name'] ) ? $vars['category_name'] : $vars['attachment'] ) );
$exists = $wpdb->get_var( $wpdb->prepare( "SELECT t.term_id FROM $wpdb->terms t LEFT JOIN $wpdb->term_taxonomy tt ON tt.term_id = t.term_id WHERE tt.taxonomy = 'product_cat' AND t.slug = %s" ,array( $slug )));
if( $exists ){
$old_vars = $vars;
$vars = array('product_cat' => $slug );
if ( !empty( $old_vars['paged'] ) || !empty( $old_vars['page'] ) )
$vars['paged'] = ! empty( $old_vars['paged'] ) ? $old_vars['paged'] : $old_vars['page'];
if ( !empty( $old_vars['orderby'] ) )
$vars['orderby'] = $old_vars['orderby'];
if ( !empty( $old_vars['order'] ) )
$vars['order'] = $old_vars['order'];
}
}
return $vars;
});
然后添加一个过滤器以从产品页面 URL 中删除/product/ base:
function na_remove_slug( $post_link, $post, $leavename ) {
if ( 'product' != $post->post_type || 'publish' != $post->post_status ) {
return $post_link;
}
$post_link = str_replace( '/product/', '/', $post_link );
return $post_link;
}
add_filter( 'post_type_link', 'na_remove_slug', 10, 3 );
function change_slug_struct( $query ) {
if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) {
return;
}
if ( ! empty( $query->query['name'] ) ) {
$query->set( 'post_type', array( 'post', 'product', 'page' ) );
} elseif ( ! empty( $query->query['pagename'] ) && false === strpos( $query->query['pagename'], '/' ) ) {
$query->set( 'post_type', array( 'post', 'product', 'page' ) );
// We also need to set the name query var since redirect_guess_404_permalink() relies on it.
$query->set( 'name', $query->query['pagename'] );
}
}
add_action( 'pre_get_posts', 'change_slug_struct', 99 );
摘自此 StackOverflow 的讨论的片段,除了某些情况外,对于大多数用户来说似乎都可以正常工作:
- 传统 URL 将响应 404 错误。 因此,如果您之前已将这些页面编入索引,请务必创建 301 重定向到相应页面。
- 它可能不适用于分页或导致过滤器出现问题,具体取决于您使用的主题和插件。
如何使用自定义永久链接为 WooCommerce 设置高级永久链接规则
尽管 WooCommerce 在其文档中警告我们要从 URL 中删除/product/ 、 /product-category/或/shop/ ,但您仍可以在其官方市场中搜索 WooCommerce 扩展的自定义永久链接。 它为您提供了最安全的方式来更改类别和产品页面的默认永久链接选项。
此处提供了一些类别页面的永久链接变体:
单独的类别 slug 仅意味着从所有 URL 中删除/product-category/部分,留下域 + 类别 slug。
完整路径意味着删除/product-category/并在相应的类别 slug 之前添加父类别 slug(如果该类别有一个)。
产品页面也有几种选择:
仅产品 slug 将删除 URL 的任何多余部分,并仅保留域 + 产品 slug。
带有类别名称的产品 slug 将创建最流行的产品 URL 版本: domain + category slug + product slug 。
完整路径的工作方式与选项 #2 相同,但有一个例外 - 如果原生产品类别有一个,它会使用父类别 slug 扩展 URL。
该插件消除了分页和过滤问题,它独立于您的主题运行,并保护您免受爬虫可能造成的后果。
更改这些永久链接时唯一需要注意的是重复的 URL。 仔细检查您是否没有与类别或产品具有相同标签的页面或帖子类型。 如果您找到一些,请务必将这些 slug 更改为唯一以避免重复。
如何将 .html 等扩展名添加到 URL
老实说,我不知道在 SEO 方面这样做是否有任何好处或缺陷。 但是很多人都在要求这个,所以我们不能忽视这个话题。
您可能正在为此寻找解决方案的主要原因可能是从另一个 CMS 迁移。 如果您决定从另一个平台迁移到 WooCommerce,您可能希望复制旧的 URL(例如,那些以 .html 结尾的 URL)。
当然,您可以使用 301 重定向让每个人都知道您的新 URL,但我们经常注意到在一段时间内使用一堆 301 重定向填充网站后,流量和 SERP 位置会出现微不足道的下降。 可能它与重定向本身无关,因为正如谷歌所说,他们不再因使用重定向而惩罚 PageRank。
但是由于与内容迁移、新 UI 和链接损坏的可能性相关的其他原因,您可能不想冒险并尝试重新创建您拥有的相同 URL。
WooCommerce 的自定义永久链接使您有机会在 URL 结尾添加任何扩展名,无论是 .html、.php.、.htm 还是您需要的任何扩展名:
更改永久链接后如何避免 SEO 问题
更改 URL 的棘手部分是内容重复、404 错误和重定向。
如果您在最近创建的网站上操作 URL,而没有任何域、页面排名和 Google 索引中的 URL 的跟踪记录,那么您无需担心。 您可以随意进行实验并选择您喜欢的任何永久链接组合。
但是,当涉及更改具有历史和高级 SERP 位置的网站上的永久链接时,您应该仔细检查这四个支柱:
- 是否有任何页面、帖子、分类法、自定义帖子类型或其他可能的实体与类别或产品页面具有相同的 slug ? 如果您找到一些,请考虑将 slug 更改为独特的,以避免冲突。
- 转到您的 Google 搜索控制台并检查具有 404 响应的页面。 如果您发现一些损坏的链接,您应该扫描 sitemap.xml 文件以查找它们或任何其他网站页面,您可以在其中手动放置旧链接。
- 如果仍有可能在某处发现旧 URL,请务必包含 'rel=canonical' 标记。 这需要让爬虫知道应该为内容归功于哪个页面,然后谷歌就不会因为创建重复而惩罚你。
- 不要忘记 301 重定向。 这对网站访问者和爬虫都至关重要。 更改永久链接后,旧的将无法再访问,因此包括爬虫在内的每个人在访问它们时都会遇到 404 错误。 如果您使用脚本更改了永久链接,我建议您安装重定向插件来处理重定向。
但是您可以睡个好觉:一旦您更改永久链接结构,WooCommerce 的自定义永久链接将为旧 URL 创建 301 重定向和“rel=canonical”。 此外,结合 Yoast 插件,他们将代表您生成一个新的站点地图,其中包含适当的 URL。
结论
WooCommerce 警告我们更改永久链接的后果——网站速度变慢和 URL 冲突。 但考虑到该声明是很久以前提出的,从那时起,他们验证了这个高级插件正在做这件事,也许 WooCommerce 改变了他们对永久链接问题的看法。
它会帮助你的SEO吗?
嗯,这是一个更复杂的问题。 一些研究人员说是的; 一些 SEO 专家建议减少产品和类别路径中的文件夹数量,并设计更短的 URL。 但我把这个决定留给你。 最终,在 SEO 方面没有绝对的真理。
如果您选择试一试,如何安全地进行?
如果你正在建立一个新网站,你可以选择你喜欢的任何方法——添加代码片段或安装插件,这两种方法似乎都是安全的。 只是不要忘记检查 sitemap.xml 中的所有内容是否到位,以及 Google 搜索控制台端是否有任何评论。
如果您考虑对现有网站上的永久链接进行操作,我强烈建议您使用经过验证的插件。 您可能不希望因链接中断、内容重复或意外创建重定向循环而陷入困境并搞砸。
该插件可以满足您的所有需求,WooCommerce.com 上的可用支持将帮助您处理潜在问题。 由于永久链接对于 SEO 至关重要,因此独自面对这样的问题将是一场噩梦。