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 至關重要,因此獨自面對這樣的問題將是一場噩夢。