There is a comprehensive issue in the world of SEO about when a 301 redirection should be used and when a Rel=Canonical tag should be used. This post highlights the difference between the two and makes clear what conditions work most favorably for each.

301 Redirection:
301 redirection means that the content of the webpage has permanently moved to a new location. A 301 redirection is a server-side redirection, designed to facilitate search engines and users to find pieces of content (webpage) that have moved to a new URL or new location permanently. This redirection also passes all the link juice to the redirected page or new URL. In accordance to Google, this is the best way to make sure that search engines and users are directed to the correct page. 301 redirection is useful in the following instances:

Moving or redirecting a site to new location: 301 redirection should be used when moving a website to a new location (new domain) or changing the URLs to a new structure. Even if a user types the old URL or location, with a 301 redirect, they will automatically redirect to your new URL or location.
Home page is opening with multiple URLs: Visitors access your website or URL through numerous different URLs. For example, if the homepage can be accessed via URLs such as: http://example.com/home
http://example.com
http://www.example.com

It’s a fine idea to choose one of these URLs as your preferred location; we should use 301 redirection to send traffic from the other location or URL to your preferred location or URL.
Expired Content: If you have old or expired content on your site such as old products, old blogs, news items, etc. which are no longer significant and of no use to users. Using 301 redirection, your expired content will be redirected to another page. This is generally the best method for SEO and can also be customized to improve the user-experience via dynamically-generated messages.

Rel=Canonnical Tag:
We use Rel=canonical tag, when a site has duplicate content and you want to keep both pages live. A canonical page is the preferred version of pages with similar content. A canonical is also a best practice when you have two domains with the same content, but you want them both to remain live. The rel=canonical tag tells the search engine which page is the main page, if you have a similar page or content. The rel=canonical tag is placed into the section of the web page
The format for a rel=canonical tag is: It is to be placed in the section of the webpage.

Rel=canonical tag is useful in the following instances:

Dynamic URLs are generated
Dynamic URLs are URLS that are generated depending on how a user or visitor goes through your website; like in E-commerce. Another example is adding tracking code to the end of the URL to determine variables like: clicks on ads or links, etc.
www.example.com/page-id=12345?/size10/~dyn987

301 isn’t possible
There are some instances, while rare, where 301 redirection is not possible. domain check Possibly the CMS doesn’t have the aptitude to do this, or maybe the coders of the site don’t know how to do it. A rel=canonical is a lot easier than a 301 redirection to implement on the website, as you only place this tag on the section of the page for it to take effect, rather than making changes on server-side (like 301 redirection).