(SEO on-page) Rewrite URL cho website xây dựng bằng wordpress

Rewrite URL là một trong những công việc quan trọng của các webmaster khi SEO on-page, nó giúp cho các URL trong website của bạn thân thiện hơn với công cụ tìm kiếm. WordPress hỗ trợ rất tốt việc rewrite URL, vừa đơn giản vừa hiệu quả. Từ URL của các category, tag, post (bài viết) hay của trang tìm kiếm /search. Bài viết sau sẽ liệt kê các loại URL cần rewrite trong website viết bằng wordpress và hướng dẫn chi tiết cách thực hiện.

Rewrite URL cho website xây dựng bằng wordpress
Rewrite URL

Trước hết, có thể phân loại các trang (URL) của một website xây dựng bằng wordpress thành 5 loại sau:
1) Bài viết (post, page)
2) Category, tag
3) Homepage
4) Search (trang kết quả tìm kiếm)
5) Các trang khác, như lưu trữ, tác giả,…

Trong các loại URL trên thì có 3 loại rất cần rewrite URL là trang bài viết, trang category và trang search. Tôi sẽ lần lượt hướng dẫn chi tiết ở bên dưới

1. Hướng dẫn rewrite URL trang bài viết (post, page) trong wordpress

Mặc định thì URL của bạn sẽ có dạng: http://www.yoursite.com/?p=123. Trong đó, p=123 là ID bài viết, đó là một con số vô hồn và rất vô dụng đối với SEO. URL của bài viết tốt nhất đối với SEO phải có dạng  http://www.yoursite.com/ma-category/title-cua-bai-viet . Bạn hãy chèn các từ khóa chính vào phần “title-cua-bai-viet” vì Google bot đánh giá rất cao điều đó.

Để rewrite URL của bài viết, bạn làm như sau:
– Đăng nhập vào trình quản lý website của bạn
– Vào Setting => Permalinks
– Trong phần Custom Setting, chọn Custom Struture, rồi nhập vào đoạn mã sau: “/%category%/%postname%”
– Click Lưu là xong!

Rewrite URL cho website xây dựng bằng wordpress
Rewrite URL cho website xây dựng bằng wordpress

2. Hướng dẫn rewrite URL category trong wordpress.

Mặc định thì URL của một category trong wordpress có dạng: http://www.yourblog.com/category/category_name hoặc category hai cấp có dạng:  http://www.yourblog.com/category/category_name/sub_category_name. Ở đây, đoạn /category/ khá vô nghĩa, cần bỏ đi, tức là URL chỉ còn:  http://www.yourblog.com/category_name hoặc category hai cấp có dạng: http://www.yourblog.com/category_name/sub_category_name.

Có hai cách để xóa /category/ như sau:
Cách 1: Sử dụng plugin – có rất nhiều plugin hỗ trợ làm việc này, tôi đang dùng plugin WordPress SEO
Cách 2: Nếu bạn ko muốn cài plugin thì có thể thêm trực tiếp đoạn mã sau vào trong file Function.php của theme hiện tại website bạn đang sử dụng là OK.

register_activation_hook(__FILE__, ‘no_category_base_refresh_rules’);
add_action(‘created_category’, ‘no_category_base_refresh_rules’);
add_action(‘edited_category’, ‘no_category_base_refresh_rules’);
add_action(‘delete_category’, ‘no_category_base_refresh_rules’);
function no_category_base_refresh_rules() {
global $wp_rewrite;
$wp_rewrite -> flush_rules();
}
register_deactivation_hook(__FILE__, ‘no_category_base_deactivate’);
function no_category_base_deactivate() {
remove_filter(‘category_rewrite_rules’, ‘no_category_base_rewrite_rules’);
// We don’t want to insert our custom rules again
no_category_base_refresh_rules();
}
// Remove category base
add_action(‘init’, ‘no_category_base_permastruct’);
function no_category_base_permastruct() {
global $wp_rewrite, $wp_version;
if (version_compare($wp_version, ‘3.4’, ‘<‘)) {
// For pre-3.4 support
$wp_rewrite -> extra_permastructs[‘category’][0] = ‘%category%’;
} else {
$wp_rewrite -> extra_permastructs[‘category’][‘struct’] = ‘%category%’;
}
}
// Add our custom category rewrite rules
add_filter(‘category_rewrite_rules’, ‘no_category_base_rewrite_rules’);
function no_category_base_rewrite_rules($category_rewrite) {
//var_dump($category_rewrite); // For Debugging
$category_rewrite = array();
$categories = get_categories(array(‘hide_empty’ => false));
foreach ($categories as $category) {
$category_nicename = $category -> slug;
if ($category -> parent == $category -> cat_ID)// recursive recursion
$category -> parent = 0;
elseif ($category -> parent != 0)
$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
global $wp_rewrite;
$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]’;
//var_dump($category_rewrite); // For Debugging
return $category_rewrite;
}
add_filter(‘query_vars’, ‘no_category_base_query_vars’);
function no_category_base_query_vars($public_query_vars) {
$public_query_vars[] = ‘category_redirect’;
return $public_query_vars;
}
// Redirect if ‘category_redirect’ is set
add_filter(‘request’, ‘no_category_base_request’);
function no_category_base_request($query_vars) {
//print_r($query_vars); // For Debugging
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;
}

Bạn có thể download đoạn mã trên ở đây.

3. Hướng dẫn rewrite URL trang search trong wordpress.

Mặc định thì URL của trang kết quả tìm kiếm trong WordPress có dạng: http://www.yousite.com/?s=keyword, chúng ta cần rewrite để URL đó có dạng sau: http://www.yousite.com/search/keyword. Thực ra WordPress đã hỗ trợ rewrite (về mặt chức năng) rồi, nhưng hiển thị thì vẫn chưa đẹp thôi – nếu bạn để ý, bạn gõ vào trang http://www.yousite.com/search/keyword thì nó cũng hiển thị tương tự trang http://www.yousite.com/?s=keyword.

Công việc của chúng ta là rewrite để chỉ còn URL này http://www.yousite.com/search/keyword thôi. Có hai cách:
Cách 1: Tác động vào file .HTACCESS với redirect 301. Cách này đơn giản nhưng chỉ hoạt động tốt ở site bằng tiếng Anh, với những từ khóa tìm kiếm bằng tiếng Việt thì nó hiển thị hơi buồn cười 😀

RewriteCond %{QUERY_STRING} \?s=([^&]+) [NC]
RewriteRule ^$ /search/%1/? [NC,R,L]

Cách 2: Sửa trực tiếp file Function.php trong theme bạn đang sử dụng, bằng cách thêm chính xác đoạn mã sau:

function search_url_rewrite_rule() {
if ( is_search() && !empty($_GET[‘s’])) {
wp_redirect(home_url(“/search/”) . urlencode(get_query_var(‘s’)));
exit();
}
}
add_action(‘template_redirect’, ‘search_url_rewrite_rule’);

Bạn có thể download hai đoạn mã trên ở đây

Bình luận

Loading Facebook Comments ...

Add Comment