Tự động chèn từ khóa nội bộ (Phần 2): Tự động lấy từ khóa từ Tag trong WordPress

Ở phần 1, chúng ta đã dùng PHP + regex để tự động chèn liên kết nội bộ dựa trên một mảng từ khóa khai báo thủ công. Cách làm này đơn giản, dễ kiểm soát, nhưng sẽ trở nên mệt mỏi nếu website có nhiều chủ đề, nhiều bài viết, nhiều từ khóa.

Tự động chèn từ khóa nội bộ (Phần 2): Tự động lấy từ khóa từ Tag trong WordPress

Trong phần 2 này, chúng ta sẽ nâng cấp hệ thống lên một level mới: tự động lấy từ khóa từ Tag của WordPress, sau đó chèn link nội bộ trỏ về trang lưu trữ tag tương ứng. Bạn chỉ cần tạo tag như bình thường, hệ thống sẽ tự hiểu đâu là từ khóa cần nội link.

Vấn đề của cách làm thủ công (Phần 1)

Ở phiên bản đầu tiên, ta phải tự định nghĩa mảng từ khóa nội bộ như sau:

function get_internal_keywords() {
    return [
        'UIkit' => 'https://inithtml.com/uikit/',
        'WordPress' => 'https://inithtml.com/tag/wordpress/',
        'SEO' => 'https://inithtml.com/tag/seo/',
    ];
}

Cách này có vài hạn chế:

  • Mỗi lần muốn thêm từ khóa nội bộ, bạn phải sửa code.
  • Dễ trùng lặp: một số từ khóa đã tồn tại dưới dạng tag hoặc category.
  • Khó bảo trì khi website ngày càng lớn.

Trong khi đó, Tag trong WordPress vốn đã là một dạng “từ khóa nội dung”. Tại sao không tận dụng luôn chúng để làm nguồn dữ liệu cho hệ thống internal link?

Ý tưởng: Dùng Tag làm nguồn từ khóa nội bộ

Thay vì tự viết mảng từ khóa, chúng ta sẽ:

  1. Lấy danh sách tất cả Tag trong site bằng get_tags().
  2. Mỗi Tag sẽ tạo thành một cặp:
    • Từ khóa: tên Tag (ví dụ: WordPress, SEO onpage).
    • Liên kết: URL trang lưu trữ Tag dùng get_tag_link().
  3. Duyệt nội dung bài viết, dùng regex để tìm các từ khóa đó và chèn thẻ <a> trỏ về trang Tag.

“Tận dụng Tag để làm từ khóa nội bộ giúp nội dung thống nhất, dễ quản lý và không cần đụng vào code mỗi lần thêm chủ đề mới.”

Mã PHP mẫu (v2 – tự động lấy từ Tag)

Dưới đây là phiên bản nâng cấp của hàm chèn từ khóa nội bộ. Bạn có thể coi đây là “v2” – thay thế cho phiên bản dùng mảng thủ công.

// Lấy danh sách Tag để làm từ khóa nội bộ
function init_get_internal_keywords_from_tags() {
    $tags = get_tags([
        'hide_empty' => false, // true nếu chỉ muốn dùng tag có bài viết
    ]);

    $keywords = [];

    if ( ! empty( $tags ) && ! is_wp_error( $tags ) ) {
        foreach ( $tags as $tag ) {
            // Tên tag sẽ là từ khóa, link tag là URL đích
            $keywords[ $tag->name ] = get_tag_link( $tag->term_id );
        }
    }

    return $keywords;
}

// Hàm tự động chèn link nội bộ từ Tag
function init_auto_internal_link_from_tags( $content ) {
    if ( is_singular() && in_the_loop() && is_main_query() ) {

        $keywords = init_get_internal_keywords_from_tags();

        if ( empty( $keywords ) ) {
            return $content;
        }

        // Các thẻ HTML cần tránh chèn link vào bên trong
        $blocked_tags = 'a|script|style|pre|code';

        foreach ( $keywords as $keyword => $url ) {

            // Bỏ qua nếu keyword rỗng
            if ( ! $keyword || ! $url ) {
                continue;
            }

            // Regex:
            // - \b để match cả từ
            // - tránh match trong thẻ cấm bằng negative lookahead
            $regex = '/
                (?<!["\/])                                  # không match trong attribute
                \b(' . preg_quote( $keyword, '/' ) . ')\b   # từ khóa chính xác
                (?![^<>]*<\/(?:' . $blocked_tags . ')>)   # không nằm trong thẻ cấm
            /ix';

            $replacement = '<a href="' . esc_url( $url ) . '" class="auto-internal-link" rel="internal">$1</a>';

            // Giới hạn mỗi từ khóa chỉ chèn 1 lần trong 1 bài
            $content = preg_replace( $regex, $replacement, $content, 1 );
        }
    }

    return $content;
}
add_filter( 'the_content', 'init_auto_internal_link_from_tags', 12 );

Giải thích nhanh từng phần

  • init_get_internal_keywords_from_tags():
    • Dùng get_tags() để lấy toàn bộ tag trên site.
    • Trả về mảng dạng 'Tên Tag' => 'URL Tag'.
  • init_auto_internal_link_from_tags():
    • Chỉ chạy trong nội dung bài đơn: is_singular() && in_the_loop() && is_main_query().
    • Duyệt từng từ khóa (tức là từng tag).
    • Regex đảm bảo:
      • Match đúng từ cần tìm (có \b).
      • Không match bên trong các thẻ <a>, <script>, <style>, <pre>, <code>.
    • preg_replace(..., 1) giúp giới hạn mỗi từ khóa chỉ chèn 1 lần.

Tùy biến thêm cho phù hợp dự án

Bạn có thể mở rộng hoặc tinh chỉnh cho phù hợp với website thực tế:

  • Giới hạn chỉ dùng một số Tag nhất định
    Ví dụ, chỉ nội link với tag thuộc một nhóm nhất định, hoặc có prefix đặc biệt trong tên.
  • Không nội link theo tag chính của bài viết hiện tại
    Trong một số trường hợp, bạn có thể muốn:

    • Chỉ nội link sang các chủ đề liên quan nhưng không trùng với tag chính của bài.
    • Hoặc ưu tiên nội link theo nhóm tag quan trọng.
  • Thêm class hoặc data attribute để tracking
    Ví dụ:

    $replacement = '<a href="' . esc_url( $url ) . '" class="auto-internal-link" data-source="tag">$1</a>';

    Điều này giúp bạn tracking click bằng Google Analytics, Plausible hoặc các công cụ phân tích khác.

  • Tăng/giảm số lần chèn mỗi từ khóa
    Nếu muốn mỗi keyword xuất hiện tối đa 2–3 lần, chỉ cần sửa tham số cuối trong preg_replace():

    $content = preg_replace( $regex, $replacement, $content, 3 );

Một số lưu ý khi dùng Tag làm từ khóa nội bộ

  • Tên Tag nên rõ ràng, không quá chung chung (ví dụ: “bài viết”, “xem thêm”…) để tránh chèn link vào những đoạn không cần thiết.
  • Không dùng quá nhiều Tag chỉ để nội link, hãy giữ Tag đúng bản chất phân loại nội dung.
  • Nếu website có rất nhiều Tag, bạn có thể:
    • Giới hạn số tag xử lý (ví dụ: top 50 tag quan trọng).
    • Hoặc thêm điều kiện chỉ lấy những tag có nhiều bài viết.
  • Luôn kiểm tra lại một số bài mẫu để đảm bảo regex không chèn sai vị trí hoặc phá vỡ HTML.

Kết luận

Bằng cách tận dụng Tag trong WordPress làm nguồn dữ liệu từ khóa nội bộ, bạn đã:

  • Giảm bớt việc phải quản lý mảng từ khóa thủ công.
  • Đồng bộ được hệ thống phân loại nội dung với chiến lược internal link.
  • Đặt nền tảng để mở rộng lên các phiên bản nâng cao hơn (kết hợp Category, Custom Taxonomy, ưu tiên từ khóa quan trọng…).

Đây là bước thứ hai trong series “Tự động chèn từ khóa nội bộ”. Ở các phần tiếp theo, bạn có thể tiếp tục nâng cấp:

  • Thêm giao diện cấu hình trong Admin để bật/tắt nhóm từ khóa.
  • Ưu tiên một số Tag “chiến lược” với anchor text tùy biến.
  • Kết hợp thêm logic theo độ dài bài viết, vị trí đoạn văn, hoặc loại post.

Hãy thử kích hoạt phiên bản v2 này trên staging hoặc một vài bài viết mẫu, theo dõi hiệu quả nội link và tối ưu dần cho phù hợp với cấu trúc nội dung của riêng bạn.

Bình luận


  • Không có bình luận.

Init Toolbox

Nhấn Ctrl + \ trên máy tính, hoặc vuốt sang trái ở bất kỳ đâu trên mobile.

Đăng nhập





Đang tải...