Ссылка для тега каноникал подтягивается из функции getUrl, поэтому она всегда разная, поскольку зависит от того, каким путем пользователь попал на данную страницу.
Могу посоветовать следующее:
1) привести все ссылки к одному виду, вне зависимости от пути захода на страницу. Для этого использовать другую функцию: getCurrentUrl.
2) Отключить в настройках генерацию канонической ссылки для каталога в SYSTEM > CONFIG > Каталог > Оптимизация в поисковых системах (SEO) --- Use Canonical Link Meta Tag For Categories (выставить НЕТ).
3) делать генерацию канонической ссылки через файл макета app\design\frontend\ПАКЕТ\ТЕМА\layout\local.xml
Например, по умолчанию, для всех страниц используя функцию getCurrentUrl:
<default>
<reference name="head">
<action method="addLinkRel">
<rel>canonical</rel>
<href helper="core/url/getCurrentUrl"/>
</action>
</reference>
</default>
3.1.) при желании и достаточных знаниях "подправить" эту функцию.
3.2.) при желании генерировать каноникал в файле local.xml для специфических страниц, а не по дефолту, например для страниц каталога с пагинацией использовать
<catalog_category_layered></catalog_category_layered>
и так далее.
4) проверить модули на предмет подгрузки своих канонических ссылок.
Надеюсь, что помог.