Nhằm tối ưu SEO OnPage cho website/blog sử dụng WordPress CMS, thì chúng ta nên xóa /category/ trên đường dẫn URL. Việc này sẽ giúp đường dẫn URL của bạn ngắn hơn, sạch hơn và tối ưu SEO hơn. Sau đây là 1 số phương án giúp các bạn làm xử lý loại bỏ /category/ mà mình tham khảo được.
1. Sử dụng các Plugin
1.1. Sử dụng Yoast SEO plugin
Yoast SEO là một WordPress Plugin nối tiếng được sử dụng phổ biến trong các Website/Blog sử dụng WordPress. Nó có hỗ trợ xóa /category/ một cách dễ dàng với 1 option ở trang quản trị. Nếu chúng ta đang sử dụng plugin này thì nên tận dụng chức năng của nó thay vì cài cắm các plugin khác hay thêm nếm code vào.
Cách xóa /category/ sử dụng Yoast SEO chúng ta thực hiện như sau:
Từ trang quản trị của WordPress => [ SEO ] => [ Search Appearance ] => [ Taxonomies ] => [ Category URLs ] => Chuyển sang Remove và bấm [ Save changes ] để lưu lại thay đổi.
1.2. Sử dụng No Category Base (WPML) Plugin
Nếu không sử dụng Yoast SEO plugin, thì có 1 plugin khác giúp xóa category 1 cách dễ dàng chỉ với việc kích hoạt plugin lên. Đó là plugin No Category Base (WPML).
Các bạn có thể kích hoạt plugin này bằng cách truy cập mục [ Plugins ] => [ Add new ] => Tìm kiếm với từ khóa “No Category Base” => Bấm [ Install Now ]
Ngoài ra có thể download trực tiếp plugin này tại đây: https://wordpress.org/plugins/no-category-base-wpml/ , giải nén và upload tới thư mục wp-content/plugins => Vào trang quản trị để kích hoạt plugin lên.
2. Sử dụng code để xóa /category/
Thêm đoạn code sau vào file functions.php
/* actions */ add_action( 'created_category', 'remove_category_url_refresh_rules' ); add_action( 'delete_category', 'remove_category_url_refresh_rules' ); add_action( 'edited_category', 'remove_category_url_refresh_rules' ); add_action( 'init', 'remove_category_url_permastruct' ); /* filters */ add_filter( 'category_rewrite_rules', 'remove_category_url_rewrite_rules' ); add_filter( 'query_vars', 'remove_category_url_query_vars' ); // Adds 'category_redirect' query variable add_filter( 'request', 'remove_category_url_request' ); // Redirects if 'category_redirect' is set function remove_category_url_refresh_rules() { global $wp_rewrite; $wp_rewrite->flush_rules(); } function remove_category_url_deactivate() { remove_filter( 'category_rewrite_rules', 'remove_category_url_rewrite_rules' ); // We don't want to insert our custom rules again remove_category_url_refresh_rules(); } /** * Removes category base. * * @return void */ function remove_category_url_permastruct() { global $wp_rewrite, $wp_version; if ( 3.4 <= $wp_version ) { $wp_rewrite->extra_permastructs['category']['struct'] = '%category%'; } else { $wp_rewrite->extra_permastructs['category'][0] = '%category%'; } } /** * Adds our custom category rewrite rules. * * @param array $category_rewrite Category rewrite rules. * * @return array */ function remove_category_url_rewrite_rules( $category_rewrite ) { global $wp_rewrite; $category_rewrite = array(); /* WPML is present: temporary disable terms_clauses filter to get all categories for rewrite */ if ( class_exists( 'Sitepress' ) ) { global $sitepress; remove_filter( 'terms_clauses', array( $sitepress, 'terms_clauses' ) ); $categories = get_categories( array( 'hide_empty' => false, '_icl_show_all_langs' => true ) ); add_filter( 'terms_clauses', array( $sitepress, 'terms_clauses' ) ); } else { $categories = get_categories( array( 'hide_empty' => false ) ); } foreach ( $categories as $category ) { $category_nicename = $category->slug; if ( $category->parent == $category->cat_ID ) { $category->parent = 0; } elseif ( 0 != $category->parent ) { $category_nicename = get_category_parents( $category->parent, false, '/', true ) . $category_nicename; } $category_rewrite[ '(' . $category_nicename . ')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$' ] = 'index.php?category_name=$matches[1]&feed=$matches[2]'; $category_rewrite[ '(' . $category_nicename . ')/page/?([0-9]{1,})/?$' ] = 'index.php?category_name=$matches[1]&paged=$matches[2]'; $category_rewrite[ '(' . $category_nicename . ')/?$' ] = 'index.php?category_name=$matches[1]'; } // Redirect support from Old Category Base $old_category_base = get_option( 'category_base' ) ? get_option( 'category_base' ) : 'category'; $old_category_base = trim( $old_category_base, '/' ); $category_rewrite[ $old_category_base . '/(.*)$' ] = 'index.php?category_redirect=$matches[1]'; return $category_rewrite; } function remove_category_url_query_vars( $public_query_vars ) { $public_query_vars[] = 'category_redirect'; return $public_query_vars; } /** * Handles category redirects. * * @param $query_vars Current query vars. * * @return array $query_vars, or void if category_redirect is present. */ function remove_category_url_request( $query_vars ) { if ( isset( $query_vars['category_redirect'] ) ) { $catlink = trailingslashit( get_option( 'home' ) ) . user_trailingslashit( $query_vars['category_redirect'], 'category' ); status_header( 301 ); header( "Location: $catlink" ); exit; } return $query_vars; }
Nếu trường hợp code trên không hoạt động thì có thể do WordPress đang cache đang cache cấu trúc đường dẫn, chúng ta cần vào [ Settings ] => [ Permalinks ] => bấm [ Save changes ] để cập nhật lại cấu trúc đường dẫn.
Nguồn: vinasupport.com
Trước mới học làm WordPress cũng khá loay hoay về cái này. Sau tìm được bài viết này mình đã remove thành công. Rất cảm ơn bạn đã chia sẻ.