This is a lot closer. The switcher now will not display the link if the entry is not enable for other site. The index part isn't perfect. If you go to /blog and change the language to for example german it will work: /blog/de. But then if you switch the language again to for example french it will go to /fr/de/blog <!-- entry --> {% if entry is defined %} {% for siteForEntry in entry.getSupportedSites %} {% set site = craft.app.getSites.getSiteById(siteForEntry.siteId) %} {% if site.id != entry.siteId %} {% set entryForOtherSite = craft.entries.id(entry.id).site(site).one() %} {% if entryForOtherSite is not null %} <a href="{{ entryForOtherSite.getUrl() }}">{{ site.language }}</a> {% endif %} {% endif %} {% endfor %} <!-- index --> {% else %} {% set localizedUrlsArray = seomatic.helper.getLocalizedUrls() %} {% for localizedUrls in localizedUrlsArray %} <a href="{{ localizedUrls['url'] }}"> {{ localizedUrls['language'] }}</a> {% endfor %} {% endif %}