Whenever I want to use the site root, I usually end up using INavigationRoot from plone.app.layout.navigation.interfaces.INavigationRoot.
InavigationRoot is provided by the Plone site object, but it will also be provided by the navigation root of any child site or top-level folders on a multilingual site. In particular, in multilingual sites, users will never navigate or see the actual root of the site, so any functions related to it will not be available to them.
ISiteRoot only makes sense for things like export import handlers or other internal logic, but not for any visible enduser functions.
source share