Hướng dẫn về Canonical Tag

Cách implement rel=canonical correctly — đó HTML link element, đó HTTP Link header cho PDFs, absolute URLs, một per trang — và nơi mọi người go wrong.

Xuất bản lần đầu: 23 thg 6, 2026 · Cập nhật lần cuối: 8 thg 8, 2026 · Advanced
Ngôn ngữ
1 tín hiệu bằng chứng trên trang này

MỘT canonical tag (rel=canonical) tells các công cụ tìm kiếm mà URL là đó được ưu tiên version of duplicate nội dung. đây là một hint, không một directive — một mạnh tín hiệu Google có thể override. Hợp lệ các phương thức: đó HTML <link rel="canonical"> trong đó <head> (không bao giờ đó <body>), đó HTTP Link header (đó way to canonicalize PDFs và other non-HTML), và sitemap inclusion as một weaker tín hiệu. Declare một unambiguous canonical mối quan hệ per trang; multiple hoặc conflicting declarations có thể produce unexpected kết quả, so không claim đó an engine deterministically chọn đó đầu tiên hoặc cuối cùng. Dùng absolute URLs và self-reference của bạn được ưu tiên các trang. không canonicalize paginated các trang to trang 1, và không combine canonical với noindex hoặc một robots.txt block — những gửi conflicting các tín hiệu. Kiểm thử đó thô phản hồi, được kết xuất DOM, các header phản hồi, và GSC người dùng-declared so với. Google-được chọn canonical.

TL;DR — rel=canonical là một hint, không một rule — một mạnh tín hiệu Google có thể và làm override. Hợp lệ declaration các phương thức: đó HTML <link rel="canonical"> trong đó <head> (trong đó <body> đây là disregarded), đó HTTP Link: rel="canonical" header (đó chỉ way to canonicalize PDFs và other non-HTML), và sitemap inclusion as một weaker tín hiệu. Dùng chính xác một unambiguous canonical per trang — multiple hoặc conflicting declarations có thể produce unexpected kết quả. Dùng absolute URLs, self-reference được ưu tiên các trang, và không canonicalize một paginated series to trang 1. không pair canonical với noindex, một robots.txt block, hoặc một 4XX — mỗi một dừng Google reading hoặc honoring đó tag. Kiểm thử với view-nguồn so với đó được kết xuất DOM, curl -I cho đó header, và GSC URL Inspection (Người dùng-declared so với Google-được chọn).

MỘT canonical là một declaration, không một decision

Giữ hai ideas tách biệt. Canonicalization là đó xử lý Google chạy to pick một representative URL out of một duplicate set — điều này weighs một toàn bộ pile of các tín hiệu to làm điều này. Đó canonical tag là chỉ một of những các tín hiệu: của bạn declared preference. Này trang là về declaring điều này correctly; đó selection xử lý itself lives on đó canonicalization hub.

Đó phân biệt là đó toàn bộ độ chính xác spine ở đây, vì Google là rõ ràng đó “indicating a canonical preference is a hint, not a rule.” (bản dịch) «indicating một canonical preference là một hint, không một rule.» đây là một mạnh hint — as I’ve được diễn đạt điều này trong my deep dive on canonicalization, đó canonical là “considered a strong signal,” (bản dịch) «considered một mạnh tín hiệu,» và “Google ignores it if other signals are stronger.” (bản dịch) «Google bỏ qua điều này nếu other các tín hiệu là stronger.» Nhưng điều này là không bao giờ một directive. Nếu bạn declare URL MỘT as canonical trong khi của bạn liên kết nội bộ, sitemap, và các chuyển hướng all point tại URL B, Google có thể side với B. (đó là đó “Duplicate, Google chose a different canonical than user” (bản dịch) «Duplicate, Google chose một khác nhau canonical hơn người dùng» state bạn’ll see trong Search Console.) Evidence for this claim Canonicalization methods communicate a preferred URL, but Google can choose a different canonical when signals conflict. Scope: Google Search canonical selection; applies to duplicate or very similar pages. Confidence: high · Verified: Google: URL canonicalization

Three non-chuyển hướng ways to declare một canonical

Alongside các chuyển hướng, Google documents three non-chuyển hướng ways to indicate một canonical, và they có khác nhau strengths: Evidence for this claim Alongside redirects, Google documents three non-redirect ways to indicate a canonical: an HTML link element, an HTTP Link header, and sitemap inclusion. Scope: The three non-redirect canonical declaration approaches covered in this article; Google also documents redirects as a canonicalization method. Confidence: high · Verified: Google: Specify a canonical URL

  • HTML <link rel="canonical"> trong đó <head> — “A strong signal that the specified URL should become canonical.” (bản dịch) «MỘT mạnh tín hiệu đó đó specified URL nên become canonical.» Này là đó everyday phương thức cho HTML các trang.
  • HTTP Link: rel="canonical" header phản hồi — cho documents nơi bạn không thể put một <link> element. Google: bạn có thể “use a link HTTP response header with a rel=” (bản dịch) «dùng một link HTTP header phản hồi với một rel=\»canonical” target attribute as defined by RFC5988 rather than an HTML element to indicate the canonical URL for a document supported by Search, including non-HTML documents such as PDF files.” (bản dịch) « đích thuộc tính as được định nghĩa by RFC5988 thay vì an HTML element to indicate đó canonical URL cho một document supported by Tìm kiếm, including non-HTML documents such as PDF files.» Đó HTML phương thức “Only works for HTML pages, not for files such as PDF. In such cases, you can use the rel=” (bản dịch) «Chỉ hoạt động cho HTML các trang, không cho files such as PDF. Trong such cases, bạn có thể dùng đó rel=\»canonical” HTTP header.” (bản dịch) « HTTP header.» Này là đó câu trả lời to “how do I canonicalize a PDF.” (bản dịch) «cách làm I canonicalize một PDF.»
  • Sitemap inclusion — “A weak signal that helps the URLs that are included in a sitemap become canonical.” (bản dịch) «MỘT yếu tín hiệu đó helps đó URLs đó là được bao gồm trong một sitemap become canonical.» Real, nhưng đó weakest of đó three.

Hai điều worth knowing về cách những interact:

  • They stack. Google: “these methods can stack and thus become more effective when combined.” (bản dịch) «những các phương thức có thể stack và thus become hơn effective khi combined.» MỘT self-referencing <link> plus một sạch sitemap plus consistent liên kết nội bộ all pointing cùng cách là far stronger hơn any một alone.
  • None of them là mandatory. “While we encourage you to use these methods, none of them are required; your site will likely do just fine without specifying a canonical preference.” (bản dịch) «Trong khi we encourage bạn to dùng những các phương thức, none of them là bắt buộc; trang web của bạn sẽ có khả năng làm chỉ fine không có specifying một canonical preference.» Declaring một xóa ambiguity; không declaring một không an lỗi.

Riêng, một 301 chuyển hướng là an even stronger consolidation tín hiệu hơn rel=canonical — nhưng đây là một khác nhau tool (hơn on canonical so với 301 so với noindex dưới).

MỘT PDF có không <head>, so có nowhere to put một <link> element. Đó cách sửa là to gửi đó canonical trong đó HTTP header phản hồi tại đó máy chủ level. Đó shape:

Link: <https://www.example.com/downloads/whitepaper.pdf>; rel="canonical"

Bạn configure đó trong máy chủ của bạn (Apache .htaccess, Nginx) hoặc của bạn CDN/edge — see đó Scripts tab cho hoạt động Apache và Nginx snippets và đó curl -I command to xác nhận đó header là thực ra đang đã gửi. Đó header phương thức cũng hoạt động cho HTML, nhưng cho HTML đó <link> element là simpler; reach cho đó header khi có không markup to edit (PDFs, images, other non-HTML).

Điều này phải được trong đó <head> — đó thân phản hồi-placement trap

Này là đó chế độ lỗi đó burns đó hầu hết mọi người, và đây là gần như luôn accidental. Google: “Đó rel=“canonical” link element is only accepted if it appears in the <head> section of the HTML, so make sure at least the <head> section is valid HTML.” (bản dịch) « link element là chỉ accepted nếu điều này xuất hiện trong đó <head> section of đó HTML, so hãy bảo đảm ít nhất đó <head> section là hợp lệ HTML.» Và từ đó 2013 “5 common mistakes” (bản dịch) «5 các lỗi thường gặp» post, vẫn đó clearest statement of điều này: “When we encounter a rel=canonical designation in the <body>, it’s disregarded.” (bản dịch) «Khi we encounter một rel=canonical designation trong đó <body>, đây là disregarded.» Của họ closing line là đó rule trong một sentence: “rel=canonical designations in the <head> are processed, not the <body>.” (bản dịch) «rel=canonical designations trong đó <head> là processed, không đó <body> Evidence for this claim Google accepts an HTML rel=canonical link element only in a valid head section and disregards a canonical placed in the body. Scope: HTML link-element canonicals in Google Search; HTTP-header canonicals are a separate method. Confidence: high · Verified: Google: Common rel=canonical mistakes

Ở đây đó trap. Bạn wrote đó canonical vào đó <head> trong của bạn nguồn. Nhưng khi đó trang là constructed trong một trình duyệt hoặc được kết xuất by đó công cụ tìm kiếm, đó <head> có thể end sớm — unclosed tags, JavaScript injected vào đó head, hoặc an <iframe> trong đó head có thể all prematurely close điều này. Đó canonical thì lands trong đó được kết xuất <body>, nơi đây là đã bỏ qua. I’ve described chính xác này trong my JavaScript SEO hướng dẫn: điều like “unclosed tags, JavaScript injected” (bản dịch) «unclosed tags, JavaScript injected» có thể nguyên nhân đó <head> to end prematurely và throw một canonical vào đó <body> of một được kết xuất trang “where it will not be respected.” (bản dịch) «nơi điều này sẽ không là respected.»

Đó catch: này là invisible trong view-nguồn — đó thô HTML looks fine. Bạn có to so sánh đó thô HTML to đó được kết xuất DOM (DevTools Elements panel, hoặc GSC URL Inspection được kết xuất HTML) to see nơi đó canonical thực ra ended up.

On đó JavaScript note: Google hướng dẫn là to pick một phương thức và không fight yourself. “If you can’t set the canonical URL in the HTML source code, leave it out and only set it with JavaScript.” (bản dịch) «Nếu bạn không thể set đó canonical URL trong đó HTML mã nguồn, leave điều này out và chỉ set điều này với JavaScript.» Nếu JS injects đó canonical, hãy bảo đảm điều này injects điều này vào đó <head> properly — không cũng máy chủ-render một khác nhau một.

Declare một canonical mối quan hệ per trang

Ở đó nên là một unambiguous canonical mối quan hệ per trang. Google hiện tại canonical-phương thức hướng dẫn warns đó combining canonical các phương thức có thể produce các lỗi và unexpected kết quả; điều này không define một đầu tiên-tag hoặc cuối cùng-tag winner. MỘT 2013 Google Search Central post đã nói multiple declarations sẽ có khả năng là đã bỏ qua. Giữ đó as lịch sử khắc phục sự cố context, không một timeless deterministic parser contract: đó safe hiện tại conclusion là to flag đó conflict, expose mỗi HTML và HTTP declaration, và cách sửa đó template.

Đó thông thường nguyên nhân không phải một typo; đây là stacking các hệ thống. Đó CMS injects một, đó theme injects một, và an SEO plugin injects một — three conflicting declarations. I’ve flagged này pattern trực tiếp trong my canonicalization deep dive: multiple rel=canonical tags sẽ có khả năng là đã bỏ qua, và “in many cases this happens because tags are inserted into a system at different points such as by the CMS, the theme, and plugin(s).” (bản dịch) «trong nhiều cases này happens vì tags là inserted vào một hệ thống tại khác nhau points such as by đó CMS, đó theme, và plugin(s).» Nếu bạn là gỡ lỗi một canonical đó “isn’t working,” (bản dịch) «không hoạt động,» count đó tags trong đó được kết xuất DOM đầu tiên.

Dùng absolute URLs, không relative

Google: “Use absolute paths rather than relative paths with the rel=” (bản dịch) «Dùng absolute paths thay vì relative paths với đó rel=\»canonical” link element. Even though relative paths are supported by Google, they can cause problems in the long run.” (bản dịch) « link element. Mặc dù relative paths là supported by Google, they có thể nguyên nhân các vấn đề về lâu dài.» Đó reason là mechanical — một <link> “accepts both relative and absolute URLs,” (bản dịch) «accepts cả hai relative và absolute URLs,» và một relative href like /page/ resolves so với đó hiện tại URL. On một malformed base hoặc an unexpected path, đó resolves to nơi nào đó bạn đã không intend. Luôn ghi đó fully-qualified URL:

<!-- Good -->
<link rel="canonical" href="https://www.example.com/dresses/green/green-dress.html">

<!-- Bad: relative path -->
<link rel="canonical" href="/dresses/green/green-dress.html">

Giống nhau logic extends to host và giao thức: point tại đó real, cuối version (https:// over http://, của bạn canonical host). Và không dùng một URL fragment as đó canonical — “Google generally doesn’t support URL fragments.” (bản dịch) «Google generally không hỗ trợ URL fragments.»

Self-referencing canonicals và pagination

MỘT trang naming itself as canonical là fine và được khuyến nghị cho của bạn được ưu tiên version — điều này làm của bạn intent unambiguous khi other các tín hiệu không all line up. Khi một kiểm tra says một trang có “no different canonical,” (bản dịch) «không khác nhau canonical,» một self-referencing canonical satisfies đó condition: điều này là an được phép giống nhau-URL declaration, không một competing đích.

Pagination là nơi self-referencing matters hầu hết, và nơi mọi người nhận điều này wrong. Không canonicalize trang 2, 3, 4… of một series back to trang 1. “Specifying a rel=canonical from page 2 (or any later page) to page 1 is not correct use of rel=canonical.” (bản dịch) «Specifying một rel=canonical từ trang 2 (hoặc any sau đó trang) to trang 1 không phải correct dùng of rel=canonical.» Trang 2 không một duplicate of trang 1 — điều này có khác nhau nội dung. Thay vì, “self-referencing canonicals should be used on all paginated pages” (bản dịch) «self-referencing canonicals nên là dùng on all paginated các trang»: mỗi trang là của nó own canonical.

MỘT related over-canonicalization mistake: một category hoặc landing trang đó canonicalizes to một single featured bài viết. Đó category trang và đó bài viết không đó giống nhau nội dung, so đó là một misuse cũng.

không break đó canonical visibility — và không point điều này tại một hỏng đích

MỘT canonical chỉ hoạt động nếu Google có thể crawl trang, đọc đó tag, và không getting một contradicting instruction. đó là một nguồn-side health vấn đề — đây là về liệu Google có thể even see đó tag on đó duplicate URL. Three ways mọi người defeat của họ own canonical này way:

  • Blocking đó canonicalized URL trong robots.txt. Nếu bạn Disallow đó duplicate, Google không thể crawl điều này, so điều này không bao giờ sees đó canonical on điều này — và không thể truyền consolidation. (Google adds đó kicker đó một robots-blocked URL “may still index URLs that are disallowed in robots.txt without their content.” (bản dịch) «có thể vẫn chỉ mục URLs đó là disallowed trong robots.txt không có của họ nội dung.» không dùng robots.txt cho canonicalization.)
  • Setting đó canonicalized URL to noindex. Contradictory instructions: noindex says “remove this page,” (bản dịch) «xóa này trang,» canonical says “consolidate this page.” (bản dịch) «consolidate này trang.» không mix them — pick một dựa trên intent.
  • Returning một 4XX on đó canonicalized URL. Giống nhau effect as noindex: Google không thể đọc đó tag, so điều này không thể transfer consolidation.

Và không declare conflicting canonicals across các phương thức: “Don’t specify different URLs as canonical for the same page using different canonicalization techniques” (bản dịch) «không specify khác nhau URLs as canonical cho đó cùng trang dùng khác nhau canonicalization techniques» — e.g. một URL trong đó sitemap và một khác nhau một trong rel=canonical.

có một tách biệt, đích-side health vấn đề mọi người miss vì đây là đó opposite direction: đó URL bạn là pointing to có to là một sạch landing spot. RFC 6596 says to tránh designating một đích đó là itself đó nguồn of một chuyển hướng, đó chains to một khác nhau canonical, hoặc đó trả về an lỗi code — và Google own verification checklist adds confirming đó đích không carry một noindex tag. MỘT canonical pointed tại một chuyển hướng, chained, noindexed, hoặc erroring đích là asking Google to consolidate onto một URL đó không thể thực ra serve as đó representative trang — treat “does the target return a clean 200 with no redirect, no noindex, and no different canonical target of its own” (bản dịch) «làm đó đích trả về một sạch 200 với không chuyển hướng, không noindex, và không khác nhau canonical đích of của nó own» as của nó own kiểm tra, tách biệt từ liệu đó nguồn trang là crawlable.

Nếu bạn là dùng hreflang, đó canonical phải trỏ đến một giống nhau-language trang: “specify a canonical page in the same language, or the best possible substitute language if a canonical page doesn’t exist for the same language.” (bản dịch) «specify một canonical trang trong đó giống nhau language, hoặc đó best có thể substitute language nếu một canonical trang không exist cho đó giống nhau language.»

Canonical so với 301 chuyển hướng so với noindex

Những nhận treated as interchangeable. They không — see đó decision bảng trong đó Các bảng tra nhanh tab. Phiên bản ngắn gọn:

  • rel=canonical — cả hai URLs stay trực tiếp và crawlable; bạn express một preference; Google consolidates các tín hiệu onto đó chosen một. MỘT hint. Dùng điều này khi cả hai URLs phải vẫn accessible và là genuinely duplicate hoặc near-duplicate nội dung (parameters, print versions) — không as một chung cách sửa cho syndicated nội dung; see dưới.
  • 301 chuyển hướng — người dùng và bots là moved to đó đích; đây là đó strongest consolidation tín hiệu. Dùng điều này khi đó duplicate không nên là reachable tại all.
  • noindex — một directive đó xóa một trang từ tìm kiếm hoàn toàn (đó trang phải stay crawlable cho Google to see điều này). Dùng điều này to xóa, không consolidate.

Google own preference cho trong-site duplicates là đó canonical: “We don’t recommend using noindex to prevent selection of a canonical page within a single site, because it will completely block the page from Search. rel=” (bản dịch) «We không khuyến nghị dùng noindex to ngăn selection of một canonical trang trong một single site, vì điều này sẽ completely block đó trang từ Tìm kiếm. rel=\»canonical” link annotations are the preferred solution.” (bản dịch) « link annotations là đó được ưu tiên giải pháp.» Evidence for this claim Google recommends rel=canonical rather than noindex when the goal is selecting a canonical within one site, because noindex removes the page from Search. Scope: Google Search guidance for duplicate pages within a single site. Confidence: high · Verified: Google: Specify a canonical URL

Vì sao một canonical nhận đã bỏ qua

Khi Google picks một khác nhau canonical hơn bạn declared, đây là gần như luôn một of những: đó hai URLs không thực ra đó giống nhau nội dung; bạn có multiple hoặc conflicting canonicals; đây là trong đó thân phản hồi; đây là relative/hỏng; đó URL là robots-blocked hoặc trả về 4XX; hoặc stronger các tín hiệu (liên kết nội bộ, sitemap, các chuyển hướng) point elsewhere.

Đó “not actually the same content” (bản dịch) «không thực ra đó giống nhau nội dung» case bites JS-được kết xuất các trang hardest. John Mueller: “With JavaScript based sites, the content side is a common reason for this: for example, if you’re using a SPA-type setup where the static HTML is mostly the same, and JavaScript has to be run in order to see any of the unique content, then if that JS can’t be executed properly, then the content ends up looking the same.” (bản dịch) «Với JavaScript based các trang, đó nội dung side là một phổ biến reason cho này: ví dụ, nếu bạn là dùng một SPA-loại setup nơi đó static HTML là mostly đó giống nhau, và JavaScript có to là chạy trong order to see any of đó unique nội dung, thì nếu đó JS không thể là executed properly, thì đó nội dung ends up looking đó giống nhau.» Nếu Google không thể see đó unique nội dung, điều này không thể tell của bạn “duplicates” apart — và có thể consolidate hoặc split them trong ways bạn đã không intend.

Bing xử lý rel=canonical cùng cách — một clarity tín hiệu, không một cure-all — và explicitly khuyến nghị điều này cho syndicated nội dung (ask đó partner to point một canonical tại của bạn original). đó là một real divergence từ Google: Google hiện tại khắc phục sự cố hướng dẫn says “the canonical link element is not recommended for those who want to avoid duplication by syndication partners, because the pages are often very different.” (bản dịch) «đó canonical link element không phải được khuyến nghị cho những ai muốn to tránh duplication by syndication partners, vì đó các trang là thường very khác nhau.» Evidence for this claim Google's current troubleshooting guidance does not recommend rel=canonical as the general fix for duplication by syndication partners, because syndicated pages are often materially different from the original. Scope: Google Search guidance for syndicated-content duplication; canonical remains valid where the syndicated copy is a genuine duplicate or superset of the original. Confidence: high · Verified: Google: Fix canonicalization issues Google cách sửa cho đó cụ thể vấn đề là asking đó syndication partner to block của họ copy từ đang được lập chỉ mục on của họ end — không một canonical — vì canonical chỉ hoạt động khi đó đích là genuinely đó giống nhau nội dung, và syndicated copies thường không close đủ. On đó toolkit, Bing framing là đó “Canonical tags, redirects, hreflang, noindex, and IndexNow all support this clarity, but the foundation is a streamlined site that avoids unnecessary duplication.” (bản dịch) «Canonical tags, các chuyển hướng, hreflang, noindex, và IndexNow all hỗ trợ này clarity, nhưng đó foundation là một streamlined site đó tránh unnecessary duplication.» Một divergence worth knowing: cho parameter duplication, Bing cũng offers URL Normalization trong Bing Quản trị viên web Tools as của nó được ưu tiên cách sửa.

Cách kiểm thử điều này

Đó numbered workflow lives trong đó Checklists tab; đó commands là trong Scripts. Đó core moves:

  1. View-nguồn đó trang — là ở đó chính xác một <link rel="canonical">, trong đó <head>, với an absolute URL?
  2. So sánh to đó được kết xuất DOM (DevTools / GSC được kết xuất HTML) — đã làm điều này stay trong đó <head>, và là điều này vẫn đó chỉ một sau rendering?
  3. curl -I đó URL cho đó HTTP Link: rel="canonical" header (này là cách bạn kiểm tra PDFs và non-HTML).
  4. GSC URL Inspection — so sánh Người dùng-declared canonical to Google-được chọn canonical. MỘT mismatch là của bạn tín hiệu to investigate vì sao. Hai caveats: đó được lập chỉ mục kết quả có thể lag điều gì là thực ra happening by hours, và đó trực tiếp kiểm thử chỉ xác nhận đó URL là fetchable hiện tại — điều này không thể predict mà URL Google sẽ select as canonical.
  5. Crawl đó site (Ahrefs Site Audit, free qua Ahrefs Quản trị viên web Tools cho các trang bạn verify; hoặc Screaming Frog) to catch canonical các vấn đề tại scale.

Cho đó rộng hơn topic — cách Google thực ra chọn một canonical từ ~40 các tín hiệu — see đó canonicalization hub. Sibling các vấn đề like duplicate nội dung và URL parameters là đó thông thường reasons bạn là reaching cho một canonical trong đó đầu tiên place.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.