Nâng Tầm WordPress SEO: Loại Bỏ Slug Category Cha Khỏi URL Bài Viết
Việc tối ưu hóa cấu trúc đường dẫn (URL) là yếu tố then chốt để cải thiện hiệu suất SEO và trải nghiệm người dùng trên WordPress. Bài viết này sẽ đi sâu phân tích cách loại bỏ slug của category cha khỏi URL bài viết, mang lại một cấu trúc đường dẫn tinh gọn và hiệu quả hơn.
Tại sao đường dẫn sạch lại quan trọng cho WordPress?
Một đường dẫn URL gọn gàng, dễ đọc không chỉ thân thiện với người dùng mà còn được các công cụ tìm kiếm đánh giá cao. Khi loại bỏ các thành phần thừa như slug của category cha, chúng ta đạt được nhiều lợi ích đáng kể:
- Tối ưu hóa SEO: Đường dẫn ngắn gọn, tập trung vào từ khóa chính giúp công cụ tìm kiếm dễ dàng hiểu nội dung trang, cải thiện khả năng xếp hạng. Nó cũng tránh việc tạo ra các đường dẫn quá dài, có thể bị cắt bớt trong kết quả tìm kiếm.
- Trải nghiệm người dùng (UX) tốt hơn: Người dùng dễ dàng đọc, ghi nhớ và chia sẻ các URL đơn giản. Một đường dẫn như
domain.com/tin-khuyen-mai/bai-viet-1rõ ràng và hấp dẫn hơn nhiều so vớidomain.com/tin-tuc/tin-khuyen-mai/bai-viet-1. - Cải thiện tính nhất quán: Giúp duy trì một cấu trúc URL đồng nhất trên toàn bộ website, tạo ấn tượng chuyên nghiệp và có tổ chức.
Cấu trúc đường dẫn WordPress cơ bản và vai trò của %category%
WordPress cung cấp khả năng tùy chỉnh cấu trúc đường dẫn thông qua mục Thiết lập > Đường dẫn tĩnh. Để đường dẫn bài viết chứa slug của category, bạn cần cấu hình thành /%category%/%postname% hoặc một biến thể tương tự.

Khi thiết lập như trên và lưu thay đổi, WordPress sẽ tự động chèn slug của category đầu tiên mà bài viết thuộc vào đường dẫn. Tuy nhiên, nếu một category có category cha, WordPress mặc định sẽ chèn cả slug của category cha vào, tạo ra đường dẫn dài như ví dụ domain.com/tin-tuc/tin-khuyen-mai/bai-viet-1. Đây chính là vấn đề mà chúng ta cần giải quyết.
Cách thức loại bỏ slug category cha: Phân tích sâu code
Để loại bỏ slug của category cha, chúng ta sẽ can thiệp vào cách WordPress xây dựng đường dẫn thông qua một filter hook. Đoạn mã sau đây được thêm vào file functions.php của theme đang hoạt động:
/*
* Xóa slug category cha ra khỏi đường dẫn của bài viết
*/
function devvn_post_link_category( $cat, $cats, $post ) {
unset($cat->parent);
return $cat;
}
add_filter( 'post_link_category', 'devvn_post_link_category', 20, 3 );
Điều gì khiến đoạn mã này hoạt động hiệu quả?
-
add_filter( 'post_link_category', 'devvn_post_link_category', 20, 3 );post_link_category: Đây là một filter hook mạnh mẽ trong WordPress, cho phép chúng ta thay đổi đối tượng category được sử dụng để tạo phần%category%trong đường dẫn tĩnh của bài viết.devvn_post_link_category: Tên hàm callback sẽ được thực thi khi filter này được gọi.20: Đây là mức độ ưu tiên (priority) của filter. Mức ưu tiên cao hơn (số lớn hơn) nghĩa là filter này sẽ được chạy sau các filter có mức ưu tiên thấp hơn. Việc đặt mức 20 đảm bảo rằng nó có thể ghi đè hoặc điều chỉnh các thay đổi của các filter khác liên quan đến category link nếu có.3: Số lượng đối số mà hàm callbackdevvn_post_link_categorychấp nhận.
-
function devvn_post_link_category( $cat, $cats, $post ) { ... }$cat: Đây là đối tượng WP_Term của category chính (category đầu tiên) được sử dụng để xây dựng đường dẫn. Đây là đối tượng mà chúng ta cần thao tác.$cats: Mảng chứa tất cả các đối tượng WP_Term của các category mà bài viết thuộc về.$post: Đối tượng WP_Post của bài viết hiện tại.unset($cat->parent);: Đây là dòng code trọng tâm. Mỗi đối tượng category ($cat) có một thuộc tínhparentchứa ID của category cha nếu nó là một sub-category. Khi thuộc tínhparentnày được thiết lập, WordPress sẽ tự động thêm slug của category cha vào đường dẫn. Bằng cách sử dụngunset($cat->parent), chúng ta xóa bỏ thông tin về category cha khỏi đối tượng category$cattrước khi WordPress sử dụng nó để xây dựng đường dẫn. Điều này khiến WordPress coi$catnhư một category cấp cao nhất (top-level category) và chỉ sử dụng slug của nó.return $cat;: Trả về đối tượng category đã được sửa đổi cho WordPress để tiếp tục quá trình tạo đường dẫn.
Tại sao cần Lưu thay đổi đường dẫn tĩnh sau khi thêm code?
Sau khi thêm đoạn code vào functions.php, việc quay lại Thiết lập > Đường dẫn tĩnh và nhấp vào Lưu thay đổi là cực kỳ quan trọng. Hành động này sẽ kích hoạt hàm flush_rewrite_rules() của WordPress. Hàm này có nhiệm vụ tái tạo lại các quy tắc ghi lại (rewrite rules) của website, đảm bảo rằng các đường dẫn mới (đã được sửa đổi bởi filter của chúng ta) được áp dụng và lưu vào cơ sở dữ liệu. Nếu bỏ qua bước này, website có thể gặp lỗi 404 khi truy cập các bài viết, vì WordPress vẫn đang sử dụng các quy tắc đường dẫn cũ.
Những lưu ý quan trọng khi triển khai
- Sao lưu: Luôn sao lưu file
functions.phphoặc toàn bộ website trước khi thực hiện bất kỳ thay đổi nào về code. - Kiểm tra: Sau khi áp dụng code và lưu lại đường dẫn tĩnh, hãy kiểm tra kỹ các đường dẫn bài viết để đảm bảo chúng hoạt động đúng như mong đợi và không gây ra lỗi 404.
- Chuyển hướng 301 (nếu cần): Nếu website của bạn đã hoạt động một thời gian dài với cấu trúc đường dẫn cũ (có slug category cha) và đã có các backlink trỏ về, việc thay đổi cấu trúc URL sẽ khiến các backlink đó bị hỏng và ảnh hưởng xấu đến SEO. Trong trường hợp này, bạn cần thiết lập chuyển hướng 301 (301 redirects) từ các URL cũ sang các URL mới. Điều này giúp chuyển tiếp “sức mạnh” SEO và đảm bảo người dùng không gặp lỗi 404.
Kết luận
Việc loại bỏ slug category cha khỏi đường dẫn bài viết là một kỹ thuật đơn giản nhưng mang lại giá trị lớn cho WordPress, góp phần cải thiện cả SEO lẫn trải nghiệm người dùng. Bằng cách hiểu rõ cơ chế hoạt động của filter post_link_category và cách unset($cat->parent) tác động đến đối tượng category, bạn có thể tự tin triển khai giải pháp này. Hãy luôn nhớ sao lưu dữ liệu và kiểm tra kỹ lưỡng sau khi thực hiện để đảm bảo website hoạt động ổn định.
Các câu hỏi thường gặp (FAQ)
Mục đích chính của việc tối ưu hóa cấu trúc đường dẫn (URL) trên WordPress là gì?
Tại sao một đường dẫn URL gọn gàng, dễ đọc lại quan trọng đối với WordPress?
Các lợi ích cụ thể khi loại bỏ slug của category cha khỏi URL là gì?
Để đường dẫn bài viết chứa slug của category, WordPress cần cấu hình đường dẫn tĩnh như thế nào?
Khi nào WordPress mặc định sẽ chèn slug của category cha vào đường dẫn bài viết?
Đoạn mã nào được sử dụng để loại bỏ slug category cha khỏi đường dẫn của bài viết?
php /* Xóa slug category cha ra khỏi đường dẫn của bài viết / function devvn_post_link_category( $cat, $cats, $post ) { unset($cat->parent); return $cat; } add_filter( 'post_link_category', 'devvn_post_link_category', 20, 3 ); Đoạn mã này cần được thêm vào đâu trong WordPress?
Filter hook `post_link_category` có vai trò gì trong việc sửa đổi đường dẫn?
post_link_category là một filter hook cho phép thay đổi đối tượng category được sử dụng để tạo phần %category% trong đường dẫn tĩnh của bài viết.Chức năng của dòng `unset($cat->parent);` trong đoạn mã là gì?
$cat, khiến WordPress coi $cat như một category cấp cao nhất và chỉ sử dụng slug của nó để tạo đường dẫn.



