Which is a better solution for duplicate content? Using a canonical tag, or a 301 redirect? A canonical tag tells Google which page you want to predominately be ranking but it allows users to still visit the page. A 301 redirect however will just redirect the user to an appropriate page, not allowing them to read any of the content or see the page at all.
Both a canonical tag and a 301 redirect solve the issue of duplicate content, but there are a few important differences though that make 301s a better option.
Canonical tags are suggestions, where are redirects are instructions. So search engines reserve the right to ignore canonical tags if they think they know better, but they don’t have much of a choice with redirects.
The second big thing is that duplicate content becomes dangerous when search engines are spending time crawling useless, duplicate content, when it should be crawling useful content. The frequency, depth and time a search engine spends on your site is directly related to your page rank – which is limited. So if search engines spend that resource on duplicate content, they may not ever get to the real content, and a canonical tag won’t help with that. The best solution for that is to fix your information architecture. If that can’t be fixed, use 301 redirects, as the crawler will be redirected before they actually download anything, so less time is spent. Canonical tags are a last resort.
The only reason you should use a canonical tag is for things like products on an ecommerce shop if there is a slight difference in say colour options or size etc, this would make the listing duplicate but the information slightly different. If you still want to display this different information to your customers but not give Google the chance to penalize you then make use of canonical tags.