Rewrite URL động theo dữ liệu động để tối ưu URL chuẩn SEO

Rewrite URL động theo dữ liệu động để tối ưu URL chuẩn SEO

wp102

Administrator
Thành viên BQT
15/7/24
43
3
2
8
Ai cũng hiểu và biết là để tối ưu SEO thì việc rewrite url friendly cho thân thiện với công cụ tìm kiếm. Có thể hiểu đây là một kiến thức Onpage cơ bản, nhưng nếu muốn cấu hình tuỳ chỉnh cấu trúc URL theo bất kỳ định dạng nào (dùng các biến placeholder - đối số), thì sao? Trong bài viết này mình sẽ chia sẻ giải pháp.
Toi uu url cho wordpress.webp


Đặc biệt, các tham số có thể nằm bất kỳ vị trí nào trên slug, như:
Cấu trúc:
URL Rewrite Prefix
: xem-ngay-dep-chuyen-nha
URL Rewrite Pattern: tuoi-{checked_year_can_chi}-{checked_year}-thang-{target_month}-nam-{target_year}

Ví dụ 1 dạng dữ liệu mình đang số hóa cho Phong Thủy có cấu trúc như sau:
{checked_year_can_chi}: Đinh Mão
{checked_year}: 1987
{target_month}: 3
{target_year}: 2025
Kết quả cấu trúc url tối ưu SEO mong muốn sẽ là: /xem-ngay-dep-chuyen-nha-tuoi-dinh-mao-1987-thang-3-nam-2025

Tình huống đặt ra là nếu rewrite theo cách thông thường thì việc người dùng thay đổi các placeholder (macro - đối số) trên slug thường có thể bạn sẽ điều chỉnh lại code rewrite phải không? Trước đây mình cũng vậy, đặc biệt khi mình làm việc với dữ liệu động rất nhiều và cũng rất nhiều cấu trúc rewrite chồng chéo trên site. Điều này thật sự là vấn đề lớn khi dữ liệu dạng này lên đến hàng triệu link.

Giải pháp​

Đặc thù dữ liệu như mô tả trên có thể thấy người dùng tùy vào mục đích sẽ có nhu cầu sắp xếp cấu trúc để tối ưu SEO trên hệ thống của họ. Do đó, một phương thức tính toán để cấu trúc lại thứ tự các đối số rewrite là giải pháp cho vấn đề trên. Dưới đây là cách mình đã giải quyết bài toán này cho hầu hết các plugin WordPress có dữ liệu động. Mọi người có thể tham khảo và điều chỉnh tùy theo nhu cầu.
PHP:
public function fengshui_moving_date_rewrite_rule()
{
$date_rule = get_option('fengshui_date_rule', '{checked_year}-{target_month}-{target_year}');
$patternsMap = [
'{checked_year}' => '([0-9]+)',
'{target_month}' => '([0-9]+)',
'{target_year}' => '([0-9]+)',
'{checked_year_chi}' => '([^/]+)',
'{checked_year_can_chi}' => '([^/]+)',
];
preg_match_all('/\{[a-zA-Z0-9_]+\}/', $date_rule, $matchesPlaceholder, PREG_OFFSET_CAPTURE);
$regex = preg_quote($date_rule, '/');
$rewriteTags = [];
foreach ($matchesPlaceholder[0] as $found) {
$foundPlaceholder = $found[0];
if (isset($patternsMap[$foundPlaceholder])) {
$rewriteTags[] = $foundPlaceholder;
$regex = str_replace(
preg_quote($foundPlaceholder, '/'),
$patternsMap[$foundPlaceholder],
$regex
);
}
}
$slug = get_option('fengshui_base_slug', 'xem-ngay-dep-chuyen-nha');
$regex = '^' . $slug . '-' . $regex . '/?$';
$query = 'index.php?polyxgo_fengshui=1';
foreach ($rewriteTags as $i => $tag) {
$matchIndex = $i + 1;
switch ($tag) {
case '{checked_year}':
$query .= '&checked_year=$matches[' . $matchIndex . ']';
break;
case '{target_month}':
$query .= '&target_month=$matches[' . $matchIndex . ']';
break;
case '{target_year}':
$query .= '&target_year=$matches[' . $matchIndex . ']';
break;
case '{checked_year_chi}':
$query .= '&checked_year_chi=$matches[' . $matchIndex . ']';
break;
case '{checked_year_can_chi}':
$query .= '&checked_year_can_chi=$matches[' . $matchIndex . ']';
break;
}
}
add_rewrite_rule($regex, $query, 'top');
}
1742786230020.webp

Ưu điểm​

  • Không bị cố định cấu trúc URL - mọi phần có thể được config từ admin. Điều này hỗ trợ khách hàng triển khải nhiều hệ thống web/ blog với cấu trúc hoàn toàn khác nhau, hỗ trợ hiệu quả hơn trong các chiến dịch SEO.
  • Tự động map {placeholder} → $matches[n] chính xác theo thứ tự xuất hiện. Hàm trên đã matches cấu trúc với rewrite rule ngay từ khi người dùng lưu cấu hình.
  • Dễ bảo trì, dễ mở rộng thêm các đối số và cấu trúc khác.

Lưu ý cẩn trọng​

  • Trường hợp ví dụ trên là dữ liệu động về Phong Thủy nên việc thiết lập này tốt nhất chỉ ở giai đoạn đầu xây dựng nội dung liên quan hoặc audit tổng thể. Trường hợp, site đã định hình và index tốt việc thay đổi cấu trúc này sẽ cần điều chỉnh chuyển hướng. Việc chuyển hướng động sẽ rất phức tạp nên cần cần nhắc thật chắc chắn cấu trúc ban đầu.
  • Nếu có nhiều plugin cũng xử lý dữ liệu động trên site, cần chắc chắc các cấu trúc không bị xung đột.
Nếu bạn cũng đang giải quyết các vấn đề dữ liệu động trong WordPress và cần tối ưu URL chuẩn SEO thì đây là một cách tiếp cận cực kỳ linh hoạt và mạnh mẽ. Quan trọng là đã được mình thực hiện và kiểm chứng.

Theo Cù Kim Ngọc
 
Sửa lần cuối: