Поясни, плиз
301 редирект это ряд действий для того что бы сделать грамотный переезд страницы сайта но новый адрес. 301ый редирект (который кстати можно сделать не только через PHP) остается на месте старого обитания страницы как заглушка и говорит что то что тут было раньше свалило вон туды, прошу вас туды проследовать.
У каноничной ссылки цель совсем другая. Предположим ситуацию, что у вас есть страница про огурцы, за автортсвом Попова. И эта статья размещена в каталоге про агурцы, в каталоге творчества Попова и еще в каталоге по тегу огурцы. Тут получается что 3 страницы с одинаковым контентом но разными адресами. ogyrci/page popov/page и tag/ogyrec/page и может даже еще и так pages/page аж 4 варианта видущих на одну и ту же страницу. Вот что бы поисковик не сказал мол, вы там совсем страх потеряли плодить сущности на сайте, то требуется указать какая из страниц важнее, что бы ПС выдавал именно её адрес а не гадал сам. При этом сами адреса все сохраняются, и меню сайта продолжает работать так же. Хоть это и тот еще костыль и по хорошему такого быть не должно.