Установка Яндекс Метрики на Angular 5 с серверным рендерингом

Задача выглядит тривиальной, особенно, учитывая наличие пакета ng-yandex-metrika. До тех пор, пока не используется рендер на сервере, который выполняется нодой, где нет таких браузерных вещей, как window и document.

Поэтому, сначала подключаем счетчик в index.html:

<!-- Yandex.Metrika counter -->
<script type="text/javascript" >
    (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
    m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
    (windowdocument"script""https://mc.yandex.ru/metrika/tag.js""ym");
    ym(XXXXXXXX"init", {...});
</script>
<noscript><div><img src="https://mc.yandex.ru/watch/XXXXXXXX" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->

Затем вручную отсылаем переходы по страницам, но только в браузере:

import { NgModuleInjectPLATFORM_ID } from '@angular/core';
import { CommonModuleisPlatformBrowserLocation } from '@angular/common';
import { RouterModule } from '@angular/router';
import { RouterNavigationEnd } from '@angular/router';
@NgModule({
  imports: [
    CommonModule,
    RouterModule,
  ],
  declarations: [],
  providers: []
})
export class YaMetrikaModule {
  private ym;
  constructor(
    private routerRouter,
    private locationLocation,
    @Inject(PLATFORM_IDprivate _platformIdObject
  ) {
    if ( ! isPlatformBrowser(this._platformId)) return;
    this.ym = window.ym;
    this.router.events.filter(event => (event instanceof NavigationEnd))
        .subscribe(() => {
            let url = this.location.path();
            this.ym(XXXXXXXX'hit'url);
        });
  }
}