Canonical URL là gì? Vì sao Google chọn URL khác?
Canonical URL là gì Tìm hiểu cách Google lựa chọn URL chính nguyên nhân Google chọn canonical khác khai báo và cách kiểm tra xử lý canonical chuẩn SEO
Có một thời gian tôi hiểu canonical khá đơn giản.
Một website có nhiều URL chứa nội dung giống nhau.
Tôi chọn URL chính.
Sau đó thêm:
<link rel="canonical" href="https://example.com/url-chinh/" />
Xong.
Tôi đang nói với Google:
"URL chính của bài này là URL kia nhé."
Và trong suy nghĩ của tôi lúc đó:
Google sẽ làm theo.
Sau này làm SEO nhiều hơn, đặc biệt khi phải xử lý những website có hàng nghìn, hàng chục nghìn URL, parameter, filter, pagination và nhiều nguồn tạo URL khác nhau, tôi mới nhận ra:
Canonical không hoạt động đơn giản như vậy.
Bạn có thể khai báo URL A là canonical.
Nhưng Google vẫn có thể chọn URL B.
Thậm chí trong Google Search Console bạn có thể gặp một tình huống khá khó chịu:
User-declared canonical: URL A
Google-selected canonical: URL B
Lúc đó câu hỏi không còn là:
Canonical khai báo thế nào?
Mà phải hỏi:
Tại sao mình nói A nhưng Google lại nghĩ B mới là URL chính?
Đó mới là phần thú vị của canonical.
Canonical URL là gì?
Canonical URL có thể hiểu đơn giản là:
URL đại diện chính cho một nhóm URL có nội dung giống hoặc rất giống nhau.
Ví dụ website có các URL:
https://example.com/ao-thun
https://example.com/ao-thun?utm_source=facebook
https://example.com/ao-thun?sort=price
https://example.com/ao-thun?ref=abc
Đối với người dùng, đây có thể là những URL khác nhau.
Nhưng nội dung chính của trang gần như vẫn là một sản phẩm hoặc một danh mục.
Nếu công cụ tìm kiếm coi chúng là những phiên bản trùng hoặc gần trùng nhau, chúng ta thường muốn chỉ ra một URL đại diện:
https://example.com/ao-thun
Đó là canonical URL.
Một cách dễ hình dung:
Nhiều URL → Một nội dung chính → Một URL đại diện
Canonical giúp công cụ tìm kiếm hiểu URL nào nên được xem là phiên bản chính trong nhóm đó.
Canonical Tag là gì?
Một trong những cách phổ biến nhất để khai báo canonical là đặt trong phần <head> của HTML:
<link rel="canonical" href="https://example.com/ao-thun" />
Ý nghĩa về cơ bản là:
"Tôi đề xuất URL này là phiên bản đại diện của nội dung."
Tôi cố tình dùng chữ đề xuất.
Bởi đây là điểm mà trước đây tôi từng hiểu chưa đủ chính xác.
Canonical không phải mệnh lệnh dành cho Google
Đây có lẽ là điều quan trọng nhất của cả bài.
Khai báo:
rel="canonical"
không có nghĩa:
Google bắt buộc phải chọn URL đó.
Canonical là một tín hiệu để Google sử dụng trong quá trình xác định URL đại diện.
Google còn xem xét những tín hiệu khác.
Ví dụ:
redirect;
sitemap;
HTTPS;
nội dung của trang;
cấu trúc website;
và nhiều tín hiệu khác mà hệ thống sử dụng để xác định URL nào phù hợp nhất làm canonical.
Vì vậy:
Bạn khai báo canonical không đồng nghĩa Google sẽ chọn canonical đó.
Đây cũng là lý do Search Console có hai khái niệm rất đáng chú ý:
User-declared canonical
và
Google-selected canonical.
User-declared canonical là gì?
Đây là canonical mà chúng ta khai báo.
Ví dụ:
Trang A có:
<link rel="canonical" href="https://example.com/a" />
thì URL A là canonical mà website đang đề xuất.
Có thể hiểu:
Website nói: Tôi muốn A là URL chính.
Nhưng Google vẫn phải tự đánh giá.
Google-selected canonical là gì?
Đây là URL mà Google thực sự lựa chọn làm canonical.
Google có thể đồng ý với chúng ta:
User-declared canonical: A
Google-selected canonical: A
Rất đẹp.
Nhưng cũng có thể:
User-declared canonical: A
Google-selected canonical: B
Lúc này Google về cơ bản đang nói:
"Tôi thấy rồi, nhưng sau khi xem các tín hiệu khác thì tôi nghĩ B mới phù hợp hơn."
Đây là lúc người làm SEO cần điều tra.
Không phải lập tức thêm canonical mạnh tay hơn.
Mà phải tìm:
Website đang gửi cho Google những tín hiệu mâu thuẫn nào?
Ví dụ: miệng nói A nhưng cả website lại nói B
Giả sử tôi muốn:
https://example.com/ao-thun
là canonical.
Trang có khai báo canonical đúng về URL này.
Nhưng sitemap lại chứa:
https://example.com/ao-thun/
Internal link trên hàng nghìn trang cũng trỏ tới:
https://example.com/ao-thun/
Server lại không redirect rõ ràng giữa hai phiên bản.
Một số backlink bên ngoài cũng trỏ về phiên bản có dấu /.
Lúc này website đang làm một chuyện khá buồn cười.
Trong HTML tôi nói:
"Google ơi, A là URL chính."
Nhưng sitemap, internal link và cấu trúc website lại đồng thanh:
"B mới là URL chúng tôi sử dụng."
Google phải tự quyết định.
Và đôi khi nó chọn B.
Không hẳn Google "không nghe lời".
Có thể chính website của chúng ta đang nói hai chuyện khác nhau.
Canonical là bài toán về sự nhất quán
Đây là cách tôi nhìn canonical hiện nay.
Đừng chỉ hỏi:
Canonical tag có đúng không?
Hãy hỏi:
Toàn bộ website có đang thống nhất URL nào là URL chính không?
Nếu muốn URL A là canonical thì lý tưởng nhất:
Canonical → A
Internal Link → A
Sitemap → A
HTTPS → A
Navigation → A
Structured Data URL → A khi phù hợp
Các link quan trọng → A
Server behavior → nhất quán với A
Website càng gửi tín hiệu nhất quán, công cụ tìm kiếm càng dễ hiểu cấu trúc URL mà chúng ta mong muốn.
Self-referencing canonical là gì?
Self-referencing canonical nghĩa là một trang tự khai báo chính URL của mình là canonical.
Ví dụ đang ở:
https://example.com/blockchain-la-gi
và trong <head> có:
<link rel="canonical" href="https://example.com/blockchain-la-gi" />
Đây là cách triển khai tôi thường ưu tiên cho các trang indexable chính.
Nó giúp website nói rõ:
Đây chính là URL đại diện của nội dung này.
Đặc biệt với CMS hoặc website có khả năng tự sinh parameter, tracking URL hoặc nhiều biến thể URL, self-canonical giúp cấu trúc rõ ràng hơn.
Nhưng nhớ:
Self-canonical không phải bùa phép.
Nếu toàn bộ website lại gửi tín hiệu ngược lại thì Google vẫn có thể chọn URL khác.
Canonical và URL có UTM
Ví dụ tôi chia sẻ bài viết lên Facebook:
https://example.com/blockchain-la-gi?utm_source=facebook
Google có thể truy cập URL đó.
Nhưng tôi không muốn tạo ra hai phiên bản:
/blockchain-la-gi
và
/blockchain-la-gi?utm_source=facebook
Canonical của phiên bản có tracking parameter thường nên quay về URL sạch:
https://example.com/blockchain-la-gi
Như vậy tracking vẫn phục vụ analytics, còn canonical giúp củng cố URL đại diện.
Đây là một trong những tình huống canonical rất hữu ích.
Canonical và Filter URL
Website thương mại điện tử thường phức tạp hơn rất nhiều.
Ví dụ:
/giay
/giay?color=black
/giay?size=42
/giay?sort=price
/giay?color=black&amp;size=42&sort=price
Chỉ vài filter thôi đã có thể tạo ra rất nhiều tổ hợp URL.
Nhưng đừng thấy parameter rồi mặc định:
"Canonical tất cả về
/giaylà xong."
Không đơn giản như vậy.
Một trang:
/giay?color=black
có thể là URL filter vô nghĩa với SEO.
Nhưng cũng có thể nhu cầu tìm kiếm:
giày màu đen
thực sự tồn tại và trang đó có nội dung/sản phẩm đủ khác biệt để trở thành landing page riêng.
Vì vậy canonical không chỉ là vấn đề kỹ thuật.
Nó còn liên quan đến:
Câu hỏi đúng phải là:
URL này có phải một trang độc lập có giá trị tìm kiếm hay chỉ là biến thể kỹ thuật của một nội dung khác?
Nếu nó thực sự đáng tồn tại trên Google, canonical tất cả về trang cha có thể khiến chúng ta tự loại bỏ một landing page có giá trị.
Canonical không phải Noindex
Đây là hai khái niệm rất dễ bị trộn.
Canonical
Nói với công cụ tìm kiếm:
Trong nhóm những URL giống hoặc gần giống này, tôi đề xuất URL kia là phiên bản đại diện.
Noindex
Nói:
Tôi không muốn URL này xuất hiện trong kết quả tìm kiếm.
Hai mục tiêu khác nhau.
Vì vậy đừng sử dụng canonical như một phiên bản "noindex nhẹ".
Nếu mục tiêu thực sự là không muốn một trang xuất hiện trên Google, hãy xem xét đúng công cụ cho bài toán đó.
Canonical cũng không phải Redirect
Redirect nói với trình duyệt và bot:
URL này đã chuyển sang URL khác.
Người dùng truy cập A có thể được chuyển tới B.
Canonical thì khác.
A vẫn có thể truy cập bình thường.
Người dùng vẫn nhìn thấy A.
Nhưng A nói:
B mới là URL đại diện mà tôi đề xuất.
Ví dụ:
URL cũ đã được thay thế hoàn toàn bởi URL mới?
Redirect thường hợp lý hơn.
Hai URL cần tồn tại cho người dùng nhưng nội dung gần giống nhau?
Canonical có thể phù hợp hơn.
Đừng dùng canonical để né việc redirect những URL thực sự đã được di chuyển.
Canonical và Sitemap
Một nguyên tắc tôi thích là:
Sitemap nên chứa những URL mà mình thực sự muốn Google index.
Nếu sitemap chứa A nhưng A canonical sang B thì website đang tạo tín hiệu không đẹp.
Một bên nói:
A quan trọng, hãy crawl/index A.
Bên kia nói:
Nhưng B mới là URL đại diện.
Không phải Google không xử lý được.
Nhưng tại sao chúng ta lại bắt Google phải đoán?
Nếu B là canonical thực sự, sitemap nên ưu tiên B.
Canonical và Internal Link
Đây là phần tôi nghĩ nhiều website bỏ qua.
Giả sử toàn bộ website canonical về:
https://example.com/bai-viet
nhưng menu, breadcrumb, bài liên quan và hàng nghìn internal link lại trỏ:
https://example.com/bai-viet/
hoặc:
http://example.com/bai-viet
hoặc một URL parameter.
Canonical tag đúng nhưng internal link lại không nhất quán.
Tôi sẽ ưu tiên sửa internal link.
Bởi internal link không chỉ phục vụ canonicalization.
Nó còn giúp bot khám phá URL, hiểu cấu trúc website và phân phối tín hiệu nội bộ.
Một website sạch nên cố gắng:
Link trực tiếp tới canonical URL thay vì link tới URL phụ rồi mong Google tự hiểu.
Canonical và HTTP/HTTPS
Một lỗi kinh điển:
Website đã chạy HTTPS.
Nhưng canonical vẫn là:
http://example.com/bai-viet
Trong khi URL thực tế:
https://example.com/bai-viet
Nếu HTTPS là phiên bản chính, canonical cũng nên phản ánh điều đó.
Tương tự với:
www / non-www
trailing slash / non-trailing slash
uppercase / lowercase nếu hệ thống phân biệt
parameter / clean URL
Website nên có quy ước URL rõ ràng.
Canonical chỉ là một phần của quy ước đó.
Canonical có thể trỏ sang domain khác không?
Có.
Đây thường được gọi là cross-domain canonical.
Ví dụ nội dung của tôi được đăng lại trên một website đối tác.
Nếu phù hợp, phiên bản đối tác có thể canonical về bài gốc trên website của tôi.
Ý nghĩa:
Nội dung này tồn tại ở đây nhưng phiên bản đại diện được đề xuất nằm ở domain kia.
Tuy nhiên đừng nghĩ cross-domain canonical là một cơ chế bắt buộc Google chuyển toàn bộ "SEO Power" về cho mình.
Một lần nữa:
Canonical là tín hiệu.
Không phải hợp đồng bắt Google phải ký. 😄
Canonical và Pagination
Đây là chỗ từng có rất nhiều hướng dẫn SEO kiểu:
page=2
page=3
page=4
tất cả canonical về page 1.
Tôi không thích áp dụng máy móc cách này.
Nếu page 2 chứa những sản phẩm hoặc bài viết khác page 1 thì về bản chất nội dung không hoàn toàn giống nhau.
Canonical tất cả về page 1 có thể gửi tín hiệu không chính xác.
Pagination nên được thiết kế dựa trên cấu trúc nội dung, khả năng crawl, internal link và mục tiêu index thực tế.
Đừng xem canonical như nút:
"Không biết xử lý page 2 thế nào thì canonical hết về page 1."
Một lỗi khác: Canonical Chain
Ví dụ:
A canonical → B
B canonical → C
C canonical → D
Nếu D mới thực sự là URL chính, tại sao A không trỏ thẳng tới D?
Tôi ưu tiên:
A → D
B → D
C → D
D → D
Cấu trúc càng đơn giản càng dễ kiểm soát.
Canonical không cần một chuyến du lịch vòng quanh website trước khi tới URL chính. 😄
Canonical tới URL lỗi là một vấn đề
Canonical nên trỏ tới một URL hợp lệ mà bạn thực sự muốn làm đại diện.
Hãy kiểm tra nếu canonical đang trỏ tới:
404;
soft 404;
5xx;
redirect;
noindex;
URL bị chặn;
hoặc một URL không còn tồn tại.
Nếu canonical target bản thân còn có vấn đề thì tín hiệu chúng ta gửi cho Google sẽ càng khó hiểu.
Google-selected canonical khác User-declared canonical thì làm gì?
Đây mới là phần tôi thường quan tâm nhất.
Đừng phản ứng bằng cách:
"Canonical sai rồi, sửa lại cái tag."
Có thể tag chẳng sai gì cả.
Tôi sẽ kiểm tra lần lượt.
1. Hai trang có thực sự duplicate không?
So sánh:
title;
H1;
main content;
product;
image;
structured data;
navigation;
language;
và mục đích của trang.
Có thể Google thấy URL B thực sự đại diện tốt hơn.
2. Canonical tag có đúng không?
Kiểm tra HTML thực tế.
Đừng chỉ nhìn source code template.
Đặc biệt với website JavaScript, hãy kiểm tra kết quả Google có thể render.
3. Có redirect mâu thuẫn không?
A canonical về A.
Nhưng A lại redirect sang B.
Đó là một tín hiệu rất rõ rằng B mới có vẻ là URL chính.
4. Sitemap đang chứa URL nào?
Nếu muốn A là canonical nhưng sitemap chỉ chứa B, hãy xem lại.
5. Internal link đang trỏ URL nào?
Đây là một trong những thứ tôi sẽ kiểm tra rất kỹ.
Nếu hàng nghìn internal link đều trỏ B trong khi canonical nói A, tôi sẽ không ngạc nhiên khi Google chọn B.
6. HTTPS, www và slash có thống nhất không?
Kiểm tra:
HTTP → HTTPS
www → non-www hoặc ngược lại
slash → non-slash hoặc ngược lại
Hệ thống nên có một quy tắc nhất quán.
7. URL nào mạnh hơn về tín hiệu bên ngoài?
Nếu một phiên bản URL đã tồn tại nhiều năm và có backlink, internal link, lịch sử crawl rõ ràng trong khi URL bạn vừa khai báo canonical gần như mới hoàn toàn, Google có thể cần thời gian hoặc có thể đánh giá phiên bản cũ phù hợp hơn.
8. Nội dung có đủ giống nhau để canonical hóa không?
Canonical không phải công cụ để gom hai trang hoàn toàn khác nhau chỉ vì bạn muốn "dồn SEO".
Nếu A là bài về Blockchain và B là bài về AI, canonical A → B không biến sức mạnh hai bài thành một.
Bạn chỉ đang gửi một tín hiệu kỳ lạ.
Kiểm tra Canonical trong Google Search Console
Một công cụ rất hữu ích là URL Inspection.
Nhập URL cần kiểm tra.
Trong thông tin indexing, hãy chú ý:
User-declared canonical
và
Google-selected canonical.
Nếu hai URL giống nhau:
Tốt.
Nếu khác nhau:
Đừng chỉ nhìn canonical tag.
Hãy quay lại kiểm tra toàn bộ cụm tín hiệu mà tôi vừa nói ở trên.
Điểm quan trọng là:
Search Console đang cho chúng ta thấy cách Google hiểu website, không chỉ cách chúng ta nghĩ website đang hoạt động.
Đó là một khác biệt rất đáng giá.
"Duplicate, Google chose different canonical than user" có đáng sợ không?
Không phải lúc nào cũng vậy.
Nếu Google chọn đúng URL mà về mặt business và SEO bạn cũng thấy hợp lý thì chưa chắc có vấn đề nghiêm trọng.
Nhưng nếu Google liên tục chọn:
URL parameter;
URL staging;
HTTP;
phiên bản sai ngôn ngữ;
URL cũ;
URL filter;
hoặc một trang mà bạn hoàn toàn không muốn làm đại diện,
thì đó là dấu hiệu cần điều tra cấu trúc website.
Đừng chỉ cố làm cho báo cáo Search Console "xanh".
Mục tiêu thực sự là:
Google và website thống nhất được URL nào đại diện cho nội dung nào.
Một ví dụ thực tế dễ hình dung
Giả sử tôi có bài:
/blockchain-la-gi
Nhưng vì tracking và hệ thống CMS, Google phát hiện thêm:
/blockchain-la-gi?utm_source=facebook
/blockchain-la-gi?ref=homepage
/blockchain-la-gi?source=newsletter
Tôi muốn URL chính là:
/blockchain-la-gi
Tôi sẽ cố gắng để:
Canonical của các phiên bản → /blockchain-la-gi
Sitemap → /blockchain-la-gi
Internal link → /blockchain-la-gi
Structured data URL → /blockchain-la-gi
Social share URL nếu kiểm soát được → /blockchain-la-gi
Không tạo ra các URL parameter indexable vô nghĩa nếu không cần thiết.
Tức là thay vì chỉ đặt một canonical tag rồi cầu nguyện:
Tôi làm cho cả website thống nhất về cùng một URL.
Đó mới là cách tôi thích xử lý canonical.
Checklist Canonical tôi thường dùng
Khi kiểm tra một website, tôi sẽ hỏi:
1. Trang indexable chính có self-canonical không?
2. Canonical có dùng absolute URL không?
3. Canonical có sử dụng HTTPS đúng không?
4. www/non-www có nhất quán không?
5. trailing slash có nhất quán không?
6. Canonical target có trả HTTP 200 không?
7. Canonical target có indexable không?
8. Có canonical chain không?
9. Có canonical loop không?
10. Sitemap có chứa canonical URL không?
11. Internal link có trỏ trực tiếp canonical URL không?
12. Structured data có sử dụng URL nhất quán không?
13. Parameter URL có được xử lý hợp lý không?
14. Filter URL nào cần index và URL nào không?
15. Pagination có đang canonical sai về page 1 không?
16. Google-selected canonical có trùng User-declared canonical không?
17. Có URL staging/test vô tình cạnh tranh canonical không?
18. HTTP/HTTPS hoặc www/non-www có tạo duplicate không?
19. Nội dung giữa các URL có thực sự đủ giống nhau để canonical không?
20. Website có đang gửi tín hiệu mâu thuẫn không?
Nếu phải chọn một câu quan trọng nhất trong checklist này thì tôi chọn câu cuối.
Sai lầm lớn nhất: sửa Canonical nhưng không sửa kiến trúc URL
Đây là điều tôi thấy rất dễ xảy ra.
Website sinh ra hàng triệu URL.
Parameter không kiểm soát.
Filter không có chiến lược.
Internal link lộn xộn.
Sitemap chứa URL không indexable.
Redirect chồng redirect.
HTTP, HTTPS, www, non-www tồn tại lung tung.
Sau đó chúng ta thêm canonical và hy vọng:
"Google tự hiểu."
Canonical không nên trở thành miếng băng keo để dán lên một kiến trúc URL đang hỗn loạn.
Nếu website có vấn đề ở cấp kiến trúc, hãy sửa kiến trúc.
Canonical giúp công cụ tìm kiếm hiểu các phiên bản nội dung.
Nó không thay thế cho một hệ thống URL được thiết kế tử tế.
Canonical có giúp tiết kiệm Crawl Budget không?
Có liên quan, nhưng đừng hiểu rằng thêm canonical là Google lập tức ngừng crawl URL phụ.
Google vẫn cần crawl một URL để nhìn thấy canonical và đánh giá mối quan hệ giữa các trang.
Nếu website tạo ra vô hạn:
parameter;
filter;
calendar;
search result;
session ID;
faceted navigation;
thì chỉ thêm canonical chưa chắc giải quyết tận gốc vấn đề crawl.
Đây là lúc canonical bắt đầu liên quan tới một chủ đề khác:
Google crawl website như thế nào?
Tôi sẽ dành riêng một bài cho câu chuyện đó.
Canonical trong thời đại AI Search có còn quan trọng không?
Theo tôi, càng nhiều hệ thống đọc và hiểu nội dung trên Internet thì việc website có cấu trúc rõ ràng càng quan trọng.
Canonical không phải kỹ thuật để "SEO cho AI".
Nó vẫn giải quyết một bài toán rất cơ bản:
Phiên bản nào là đại diện của nội dung này?
Một website sạch về URL, nội dung, entity, structured data và internal link luôn dễ hiểu hơn một website có hàng chục phiên bản cạnh tranh nhau cho cùng một nội dung.
Đừng chạy theo AEO hay GEO rồi quên những thứ nền tảng của Technical SEO.
Website còn chưa nói rõ:
"Trang nào của tôi là trang chính?"
thì nói chuyện tối ưu cho AI nghe hơi sớm. 😄
Điều tôi thay đổi trong cách nghĩ về Canonical
Trước đây tôi nghĩ:
Canonical = đặt một thẻ trong
<head>.
Bây giờ tôi nhìn nó rộng hơn:
Canonical = làm cho website và công cụ tìm kiếm thống nhất được URL nào đại diện cho một nội dung.
rel="canonical" chỉ là một trong những tín hiệu giúp đạt được điều đó.
Một canonical tag hoàn hảo không cứu được một website liên tục tự mâu thuẫn với chính nó.
Vì vậy nếu một ngày Search Console nói:
Google-selected canonical khác User-declared canonical
đừng vội nghĩ:
"Google không nghe mình."
Hãy thử hỏi:
Có phải chính website của mình đang nói với Google hai câu chuyện khác nhau không?
Đó thường là nơi tôi bắt đầu kiểm tra.
Và cũng giống khá nhiều thứ trong SEO:
Đừng cố bắt Google hiểu điều mình muốn.
Hãy xây website đủ rõ ràng để Google không phải đoán.
Bài tiếp theo: Google thực sự Index một trang như thế nào?
Canonical dẫn tới một câu hỏi còn thú vị hơn.
Chúng ta xuất bản một bài viết.
Nhưng từ lúc Google biết URL tồn tại đến lúc URL xuất hiện trên Google còn cả một quá trình:
Discover → Crawl → Render → Process → Canonicalize → Index → Serve
Một trang được crawl chưa chắc đã được index.
Một trang được render chưa chắc được chọn canonical.
Một URL có trong sitemap cũng không có nghĩa Google bắt buộc index.
Vì vậy ở bài tiếp theo, tôi sẽ đi sâu vào:
Google Crawl, Render và Index một trang web như thế nào?
Hiểu được quá trình đó, rất nhiều thông báo tưởng như khó hiểu trong Google Search Console sẽ trở nên dễ đọc hơn.