Canonical tag là thẻ <link rel="canonical"> trong <head>, báo Google URL nào là bản chính khi nhiều URL phục vụ cùng nội dung. Cài đúng canonical giúp bạn gom link equity về 1 URL, tránh Google phân tán xếp hạng.
Canonical tag là gì?
Định nghĩa và cú pháp cơ bản
Canonical tag được Google, Microsoft và Yahoo cùng công nhận từ năm 2009 như một chuẩn chung. Cú pháp đặt trong thẻ <head> của trang:
<link rel="canonical" href="https://web22.dev/dich-vu/seo/" />Giá trị href phải là URL tuyệt đối — đầy đủ giao thức, tên miền và đường dẫn. URL rút gọn hoặc đường dẫn tương đối không được khuyến nghị vì dễ gây hiểu nhầm.
Canonical hoạt động như tín hiệu, không phải lệnh bắt buộc
Google xử lý canonical tag như một hint — gợi ý ưu tiên, không phải lệnh bắt buộc phải tuân theo. Googlebot vẫn cân nhắc nhiều tín hiệu khác: cấu trúc liên kết nội bộ, sitemap (sơ đồ trang XML), redirect, hreflang.
Khi các tín hiệu mâu thuẫn nhau, Google tự chọn URL canonical theo thuật toán riêng. Kết quả có thể khác URL bạn khai báo trong thẻ.
Phân biệt canonical với noindex và redirect 301
Ba kỹ thuật này thường bị nhầm lẫn vì đều liên quan đến kiểm soát URL, nhưng mục đích khác nhau hoàn toàn.
- Canonical: URL vẫn truy cập được, chỉ gom signal SEO về URL chuẩn. Phù hợp khi bạn cần giữ URL biến thể vẫn hoạt động.
- Noindex: Báo Google không đưa trang vào kết quả tìm kiếm. Người dùng vẫn truy cập trực tiếp được.
- Redirect 301: URL cũ chuyển hẳn sang URL mới, URL cũ không còn truy cập được. Mạnh hơn canonical, dùng khi URL cũ thực sự không cần tồn tại.
Khi nào cần dùng canonical?
Duplicate content từ tracking parameter
Mỗi lần bạn chia sẻ link kèm tham số UTM hoặc ref, Google thấy một URL khác nhau dù nội dung hoàn toàn giống nhau. Ví dụ: ?utm_source=facebook, ?ref=newsletter, ?fbclid=abc123.
Bạn có thể tham khảo cách Web22 triển khai SEO tổng thể để hiểu mạch tổng quan.
Canonical về URL gốc không có tham số giúp gom toàn bộ link equity từ các biến thể này về một điểm. Đây là case phổ biến nhất cần canonical.
HTTP và HTTPS song song
Trong quá trình chuyển site từ HTTP sang HTTPS, cả hai phiên bản có thể cùng tồn tại và truy cập được. Google có thể index cả hai, chia đôi link equity.
Đặt canonical trên phiên bản HTTP trỏ về HTTPS, đồng thời thiết lập redirect 301 để bắt buộc Google và người dùng luôn dùng HTTPS.
WWW và non-WWW
Tương tự case HTTP/HTTPS — www.web22.local và web22.local là hai URL khác nhau đối với Google. Chọn một phiên bản làm chuẩn, đặt canonical và 301 từ phiên bản còn lại.
Không cần cả hai kỹ thuật cùng lúc cho một URL, nhưng nên dùng 301 để phòng trường hợp canonical bị bỏ qua.
URL phân trang trong danh sách bài viết
Trang 2, 3 của một danh mục có nội dung khác trang 1. Không nên canonical các trang phân trang về trang 1 — đây là lỗi phổ biến.
Từ năm 2019 Google đã ngừng dùng rel=prev/next. Best practice hiện tại: mỗi trang phân trang có self-canonical trỏ về chính nó.
URL filter và sort trên trang thương mại điện tử
Trang danh mục sản phẩm kết hợp filter và sort tạo ra hàng chục URL khác nhau: ?sort=price-asc, ?color=red&size=L. Nội dung gần giống nhau nhưng URL khác nhau.
Canonical các URL filter về URL danh mục gốc không có tham số. Kiểm tra kỹ với plugin filter như FacetWP hoặc YITH vì chúng đôi khi tự xử lý canonical theo cách riêng.
Cách viết canonical đúng chuẩn
Luôn dùng URL tuyệt đối
URL tuyệt đối là URL đầy đủ giao thức và tên miền: https://web22.dev/dich-vu/seo/. URL tương đối như /dich-vu/seo/ không được khuyến nghị vì trình thu thập dữ liệu có thể diễn giải khác nhau.
Một lựa chọn cùng nhóm đáng cân nhắc là Technical SEO — xem bài chi tiết để đối chiếu.
Luôn nhất quán giao thức — nếu site dùng HTTPS thì canonical phải là HTTPS, không được để http://.
Self-canonical cho mọi trang
Mọi trang nên có canonical trỏ về chính URL đó, kể cả khi không có biến thể nào. Đây gọi là self-referencing canonical — biện pháp phòng thủ khi URL bị scrape hoặc nhúng trên domain khác.
Rank Math và Yoast tự động inject self-canonical cho toàn bộ trang WordPress, bạn không cần cài tay.
Cross-canonical cho nội dung đăng chéo
Khi guest post trên blog khác trùng nội dung với bài gốc, domain nhận bài có thể đặt canonical trỏ về URL gốc của bạn. Googlebot nhờ đó biết bài gốc nằm ở đâu.
Cross-canonical chỉ nên dùng khi hai domain cùng chủ sở hữu, hoặc có thỏa thuận rõ với blog nhận bài.
Mỗi trang chỉ một thẻ canonical
Khi có nhiều thẻ canonical trong <head>, Google không xác định được thẻ nào hợp lệ và thường bỏ qua tất cả. Xung đột hay xảy ra khi WordPress dùng nhiều plugin SEO cùng lúc.
Kiểm tra bằng cách xem nguồn trang (Ctrl+U) và tìm kiếm rel="canonical" — chỉ được xuất hiện một lần.
Cài canonical trên WordPress
Rank Math — cài và ghi đè per-post
Rank Math tự động inject canonical cho mọi trang và bài viết ngay sau khi cài. URL mặc định là permalink của bài đó.
Để ghi đè canonical cho một bài, vào trình chỉnh sửa → tab Rank Math → mục Advanced → trường Canonical URL. Nhập URL tuyệt đối cần trỏ tới.
Yoast SEO — quy trình tương tự
Yoast SEO hoạt động tương tự Rank Math. Vào phần chỉnh sửa bài → tab Yoast SEO bên dưới → mục Advanced → trường Canonical URL.
Dùng cả Rank Math và Yoast cùng lúc là nguyên nhân phổ biến nhất gây nhiều canonical trong một trang. Chỉ giữ một plugin SEO duy nhất.
Thêm canonical thủ công qua hook WordPress
Với CPT (custom post type) có URL không khớp permalink mặc định, bạn có thể inject canonical thủ công qua hook wp_head:
add_action( 'wp_head', function() {
if ( is_singular( 'custom_post_type' ) ) {
$canonical = 'https://web22.dev/url-can-tro-toi/';
echo '<link rel="canonical" href="' . esc_url( $canonical ) . '" />' . "n";
}
} );Đặt đoạn này trong functions.php hoặc file plugin riêng. Nhớ tắt canonical tự động của Rank Math/Yoast cho loại bài viết đó để tránh xung đột.
So sánh canonical với redirect 301 và noindex
Canonical hay redirect 301 — chọn cái nào?
Quy tắc đơn giản: nếu URL cũ không còn cần tồn tại và người dùng không cần truy cập trực tiếp, dùng redirect 301. Nếu URL vẫn cần hoạt động — như URL tracking, URL filter danh mục — dùng canonical.
- Redirect 301: truyền gần như 100% link equity, URL nguồn không truy cập được. Dùng khi di chuyển nội dung, đổi slug, xoá trang cũ.
- Canonical: URL nguồn vẫn truy cập được, gom signal SEO về URL đích. Dùng khi cần giữ URL biến thể hoạt động.
- Dùng cả hai cùng lúc: không cần thiết và dễ gây nhầm. Nếu đã 301, canonical trên URL nguồn không có tác dụng vì Googlebot không crawl đến trang đó nữa.
Canonical và noindex — không kết hợp cùng nhau
Đặt canonical về URL A nhưng đồng thời đặt noindex trên URL A là mâu thuẫn trực tiếp. Google không biết nên index hay bỏ qua, thường sẽ bỏ qua cả canonical lẫn noindex.
Nếu muốn nội dung được index ở URL đích, đừng đặt noindex trên URL đó. Nếu muốn URL không được index, dùng noindex thay vì canonical.
- Canonical một mình đủ: URL tracking parameter, biến thể filter danh mục, phiên bản in trang, cross-domain content.
- Canonical kết hợp 301: HTTP/chuyển sang HTTPS, WWW/non-WWW, URL cũ sau khi đổi slug.
Lỗi canonical thường gặp
Canonical chain — A trỏ B, B trỏ C
Khi canonical tạo thành chuỗi — trang A canonical về B, trang B canonical về C — Google thường chỉ theo 1 bước. Trang A có thể không được gom signal về C như bạn muốn.
Sửa bằng cách đặt canonical thẳng từ A về C, bỏ qua bước trung gian B.
Canonical trỏ về URL trả về lỗi 404
URL canonical phải truy cập được và trả về HTTP 200. Nếu URL đích trả về 404 hoặc bị chuyển hướng sang URL khác, Google thường bỏ qua canonical.
Kiểm tra định kỳ bằng Screaming Frog hoặc Search Console để phát hiện canonical trỏ về URL đã xoá.
Canonical trỏ về URL đang noindex
Khai báo canonical về URL A trong khi URL A có thẻ noindex là mâu thuẫn. Google không thể index URL A nhưng bạn lại muốn gom signal về đó.
Kiểm tra toàn bộ URL canonical đích bằng URL Inspection trong Search Console để chắc chắn chúng không bị noindex.
Nhiều canonical trong cùng một trang
WordPress kết hợp theme, plugin SEO và plugin thứ ba đôi khi inject nhiều thẻ canonical. Google nhận nhiều giá trị mâu thuẫn và thường bỏ qua tất cả.
Xem nguồn trang, tìm rel="canonical" — chỉ được xuất hiện đúng một lần.
Tắt canonical trên plugin phụ nếu đã dùng Rank Math hoặc Yoast làm plugin chính.
Pagination canonical sai về trang 1
Đặt canonical trang 2, 3 về trang 1 là lỗi cổ điển từ thời Google dùng rel=prev/next. Google từng hiểu đây là chuỗi phân trang, giờ không còn xử lý vậy nữa.
Mỗi trang phân trang nên có self-canonical về chính nó. Rank Math và Yoast đã tự xử lý đúng từ các phiên bản hiện tại.
Kiểm tra canonical hoạt động đúng
Xem nguồn trang trực tiếp
Cách nhanh nhất: mở trang trên trình duyệt, nhấn Ctrl+U để xem nguồn HTML, tìm kiếm rel="canonical". Xác nhận URL trong href đúng và chỉ xuất hiện một lần.
Cách này chỉ kiểm tra được thẻ canonical trong HTML source, không phản ánh canonical Google đã chọn.
URL Inspection trong Search Console
Vào Search Console → nhập URL cần kiểm tra → mục Page indexing → xem hai giá trị:
- User-declared canonical: URL bạn khai báo trong thẻ canonical.
- Google-selected canonical: URL Google thực sự chọn làm bản chuẩn.
Hai giá trị phải khớp nhau. Nếu Google chọn URL khác, xem xét lại các tín hiệu mâu thuẫn: sitemap, liên kết nội bộ, redirect, hreflang.
Screaming Frog và Coverage Report
Screaming Frog crawl toàn site và xuất danh sách canonical của mọi URL trong tab Canonical. Lọc theo Canonical Mismatch để tìm URL có canonical trỏ đến URL khác với URL chính nó.
Search Console → mục Coverage → nhóm Duplicate without user-selected canonical liệt kê trang Google thấy duplicate nhưng chưa có canonical. Ưu tiên xử lý nhóm này trước.
Canonical là một trong bốn yếu tố kỹ thuật cần kiểm tra trong mọi lần SEO audit, cùng với redirect 301, sitemap và meta robots. Web22 hỗ trợ kiểm tra và cài đặt canonical đúng chuẩn trong gói dịch vụ SEO — xem chi tiết tại bảng giá.
Nguồn tham khảo
Web22 đồng hành cùng dự án của bạn
Bài này nằm trong loạt Technical SEO — tổng quan & danh sách kiểm; đọc thêm Redirect 301 và Meta robots để ghép trọn bức tranh kỹ thuật.
Nếu site của bạn bị Google gộp nhầm trang hoặc index sai bản URL, hãy đặt buổi tư vấn 30 phút miễn phí với Web22 — chúng tôi soi cấu hình thật trên server và Search Console, bàn giao mã nguồn để bạn toàn quyền, không bán gói chung chung.


