Wir benutzen diesen Code
[{if $oView->isLanguageLoaded()}]
[{foreach from=$oxcmp_lang item=_lng}]
<link rel='alternate' hreflang='[{$_lng->abbr }]' href='[{$_lng->link|regex_replace:"/(\?|&)?force_sid=.*/":""}]' />
[{/foreach}]
[{/if}]
Ist nicht 100% perfekt (z.B. auf der Startseite, wo ein canonical das dann wieder gerade zieht), tut aber im großen und ganzen was er soll.