What a canonical URL is
The same content can usually be reached at more than one address. A tracking parameter is added to a link, a filter is applied to a category, the site answers on both the www and bare hostname, or the same product sits under two navigation paths. To a person these are one page. To a search engine each address is a separate candidate for indexing.
The canonical URL is the one you declare as the version that counts. It is stated in the page head with a link tag carrying rel=”canonical”, and it should be an absolute address including the protocol and hostname. Every duplicate points at it, and the preferred page points at itself — a self-referencing canonical, which is normal and worth having by default.
Why canonical URLs matter
Left unmanaged, duplicates split a page’s signals. Links and attention arrive at several addresses, none of which is strong enough on its own, and the version a search engine chooses to show may not be the one you would have picked. It might be the parameterised address from an old campaign rather than the clean one you print on a business card.
Duplicates also waste crawling. Every parameter combination a crawler follows is a request spent on something that adds nothing, which matters most on larger catalogue sites where the number of filter combinations grows faster than anyone expects. Consolidating them is a routine part of technical SEO and often the quickest way to make a messy site legible.
Common mistakes with canonical URLs
The most important thing to understand is that a canonical is a hint, not an order. Search engines can and do ignore one that contradicts other evidence — internal links, sitemaps, redirects — so a canonical that disagrees with the rest of the site will simply be overruled. Consistency is what makes it work.
Common faults follow from that. Every page pointing at the home page, usually a template mistake, tells search engines the rest of the site is a duplicate of the front door. A canonical pointing at a page that redirects, or at a page marked noindex, sends contradictory instructions. Paginated listings all pointing at the first page hide everything beyond it. And a canonical is not a redirect: visitors still reach the duplicate address, so if you actually want one address to stop working, redirect it.
How to act on it
Decide the clean form of your URLs first — one protocol, one hostname, one convention for trailing slashes — and enforce it with redirects rather than relying on canonicals to tidy up afterwards. Then let every page declare itself canonical by default, and override that only where a genuine duplicate exists.
Check the result rather than the setting. Crawl the site and list any page whose canonical points somewhere other than itself, then confirm each of those is deliberate. Use Search Console’s page inspection to see which address was actually selected, since that is the decision that counts. Where duplicates come from filters and tracking parameters, handle them at the source too, so the crawler meets fewer of them in the first place and duplicate content stops being generated faster than it can be consolidated.