SEO WordPress

Custom Post Type SEO

Tối ưu hóa cấu trúc, permalink, archive và single template cho post type tùy chỉnh để đảm bảo lập chỉ mục đúng cách.

3 lượt xem Cập nhật: 26/05/2026

Custom Post Type SEO là gì?

Custom Post Type SEO là việc tối ưu hóa các loại bài viết tùy chỉnh (custom post type – CPT) trong WordPress để công cụ tìm kiếm như Google dễ dàng lập chỉ mục, hiểu đúng cấu trúc nội dung và xếp hạng chính xác. Khác với bài viết (post) và trang (page) mặc định, CPT như sản phẩm, dự án, đội ngũ hay tin tức sự kiện cần được cấu hình riêng về permalink, thẻ HTML, schema markup, điều hướng và khả năng truy cập — nếu không sẽ bị bỏ qua hoặc lập chỉ mục sai.

Tại sao quan trọng trong SEO?

Khi bạn tạo CPT mà không tối ưu, WordPress thường đặt mặc định: permalink trùng lặp, archive page không có tiêu đề/mô tả, single template thiếu thẻ heading hợp lý, hoặc thậm chí bị chặn bởi robots.txt hoặc noindex. Hệ quả: nội dung chất lượng cao không xuất hiện trên kết quả tìm kiếm, tổn thất lưu lượng tự nhiên, và khó kiểm soát thứ hạng cho phân khúc nội dung chuyên biệt.

Ngược lại, CPT được SEO đúng cách giúp:

  • Tăng khả năng hiển thị cho nội dung chuyên sâu (ví dụ: danh sách sản phẩm theo danh mục)
  • Phân tách rõ ràng giữa nội dung tin tức và nội dung thương mại — tránh nhiễu tín hiệu xếp hạng
  • Hỗ trợ triển khai schema markup dạng Product, Event, Person — nâng tỷ lệ hiển thị rich result
  • Giảm trùng lặp nội dung nhờ permalink chuẩn và canonical hợp lý

Cách hoạt động

Custom Post Type SEO hoạt động dựa trên 4 lớp tương tác:

  1. Cấu trúc URL: Permalink của CPT phải ngắn gọn, chứa từ khóa chính, không có tham số thừa (như ?post_type=product)
  2. Template rendering: Archive và single template cần có thẻ <title>, <meta name="description">, heading hierarchy (h1h2) và internal link logic rõ ràng
  3. Indexability: Đảm bảo CPT không bị noindex (qua plugin, code hoặc cài đặt theme), và được phép thu thập trong robots.txt
  4. Schema & dữ liệu có cấu trúc: Mỗi CPT nên gắn schema phù hợp (ví dụ: Product cho product, Organization cho team_member) để hỗ trợ rich snippet

Hướng dẫn thực hiện

Dưới đây là quy trình tối ưu từng bước — áp dụng cho cả CPT do theme/plugin tạo hoặc tự đăng ký bằng register_post_type():

  1. Đặt permalink chuẩn khi đăng ký CPT: Dùng tham số 'rewrite' => ['slug' => 'san-pham'], tránh dùng 'with_front' => false trừ khi cần URL gốc (ví dụ: /san-pham/ thay vì /blog/san-pham/). Kiểm tra lại sau khi lưu bằng Settings > Permalinks > Save Changes.
  2. Tối ưu archive page: Tạo file archive-{post_type}.php (ví dụ: archive-product.php). Đảm bảo có:
    • Thẻ <title> động: get_the_archive_title() + tên trang web
    • Mô tả meta động: wpseo_get_value('metadesc') (nếu dùng Yoast) hoặc custom field
    • Breadcrumb rõ ràng: yoast_breadcrumb() hoặc rank_math_breadcrumb()
  3. Tối ưu single template: Dùng single-{post_type}.php. Kiểm tra:
    • Chỉ có một thẻ <h1> duy nhất — là tiêu đề bài viết
    • Không dùng the_content() mà không lọc — luôn dùng apply_filters('the_content', $content) để giữ shortcode và định dạng SEO
    • Thêm schema JSON-LD phù hợp (có thể dùng Rank Math hoặc code thủ công)
  4. Kiểm soát lập chỉ mục: Trong register_post_type(), thiết lập 'public' => true, 'publicly_queryable' => true, 'exclude_from_search' => false. Nếu dùng plugin SEO, bật tùy chọn “Cho phép lập chỉ mục” cho CPT đó.
  5. Internal linking: Liên kết từ bài viết/blog tới CPT (ví dụ: “Xem toàn bộ sản phẩm nổi bật”), và ngược lại — đảm bảo vòng lặp liên kết chặt chẽ.

Lỗi thường gặp

Lỗi Dấu hiệu Cách khắc phục
Permalink trùng với post/page URL hiển thị /blog/san-pham/ hoặc 404 khi truy cập /san-pham/ Đặt 'rewrite' => ['slug' => 'san-pham', 'with_front' => false] và lưu lại cấu trúc permalink
Archive page bị noindex Kiểm tra source code thấy <meta name="robots" content="noindex,follow"> Trong plugin SEO: vào Search Appearance > Content Types, bật “Show in search results” cho CPT. Hoặc kiểm tra code theme có gọi wp_no_robots() không
Single page thiếu schema Google Rich Results Test báo “No structured data detected” Dùng Rank Math/Yoast để bật schema cho CPT, hoặc thêm đoạn JSON-LD vào single-{post_type}.php với dữ liệu động từ get_post_meta()

Ví dụ thực tế

Một website bất động sản sử dụng CPT du-an (dự án). Trước khi tối ưu:

  • URL: https://site.com/?post_type=du_an&p=123 — không thân thiện, không lập chỉ mục
  • Archive: /du-an/ hiển thị 404 vì chưa tạo archive-du-an.php
  • Single: tiêu đề <h1> bị lặp 2 lần, không có mô tả meta
Sau tối ưu:
  • Permalink đổi thành /du-an/{ten-du-an}/
  • File archive-du-an.php có tiêu đề động: <title>Dự án bất động sản mới nhất | Công ty ABC</title>
  • Single page tích hợp schema RealEstateListing, có breadcrumb và internal link tới danh mục “Căn hộ cao cấp”
  • Kết quả: 7 dự án mới được lập chỉ mục trong 5 ngày, tăng 22% lưu lượng từ tìm kiếm “mua căn hộ quận 7”

Câu hỏi thường gặp

Có nên dùng plugin để tạo Custom Post Type không?

Có thể dùng plugin như Custom Post Type UI hoặc Toolset, nhưng cần kiểm tra kỹ mã nguồn: một số plugin tự động đặt 'public' => false hoặc không hỗ trợ schema. Với website sản xuất lớn, nên đăng ký CPT trong functions.php hoặc plugin con để kiểm soát toàn bộ.

Custom Post Type có ảnh hưởng đến tốc độ tải trang không?

Không trực tiếp — nhưng nếu CPT có hàng nghìn bản ghi và query không được tối ưu (ví dụ: dùng WP_Query không có posts_per_page hoặc không cache), sẽ làm chậm archive page. Giải pháp: dùng transients, object cache hoặc plugin như WP Rocket để cache CPT riêng.

Có thể tối ưu CPT cho nhiều ngôn ngữ không?

Có thể — nhưng phụ thuộc vào plugin đa ngôn ngữ. Polylang yêu cầu bật hỗ trợ CPT trong cài đặt ngôn ngữ. WPML cần đăng ký CPT qua wpml_register_post_type(). Việc dịch permalink và meta cũng phải đồng bộ — nếu không, Google có thể coi là nội dung trùng lặp. Tùy trường hợp.