How to Fix Canonical and Duplicate Content Issues
Duplicate content rarely means a penalty. The real problem is that Google has to choose between several addresses for one page, and it may not choose the one you want.

Where duplicates come from
All of these can show the same page:
http://example.com/shoes
https://example.com/shoes
https://www.example.com/shoes
https://example.com/shoes/
https://example.com/shoes?utm_source=mail
Tracking parameters, filters, print versions and pages copied between sections add more. Find them with the Website Crawler.
Redirect when only one version should exist
Choose one form of your domain, then use a 301 redirect for the others. Protocol, www and trailing slashes should all be settled this way:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
Confirm it with the Redirect Checker. Each old address should reach the final one in a single hop.
Use a canonical tag when both must stay
If a page has to work at several addresses, such as with tracking or sort parameters, keep them and name the main version:
<link rel="canonical" href="https://example.com/shoes">
- Use the full address, including
https://. - Give every page a canonical that points to itself, unless it’s a duplicate.
- Only list one canonical per page.
- Don’t point it at a page that redirects, is blocked or returns an error.
Check any page with the Meta Tag Checker. A canonical tag is a strong hint, not a command, so Google can still choose differently.
Make every signal agree
Google weighs all the clues together. Your internal links, sitemap, redirects and canonical tags should all use the same address. Conflicts are the usual reason Search Console reports “Duplicate, Google chose different canonical than user”.
Translated pages
Translations aren’t duplicates when each one has its own canonical and they’re connected with hreflang tags. Don’t point a translated page’s canonical at the English version, unless the page really is untranslated.