Аналитика должна знать, какие страницы реально просматривает пользователь, и в какой последовательности. Не «попытки перехода», а именно успешно завершённые навигации.
Какую проблему решаем
Если логировать NavigationStart, в аналитике появятся «призраки» — guard отменил, redirect перенаправил, ошибка прервала. Метрики завышены, воронка сломана. Нужно слушать только финал, и формировать пары (откуда → куда).
Операторы и зачем они нужны
filter — оставляем только NavigationEnd. Cancel и Error выбрасываем.
pairwise — отдаёт пару [предыдущий URL, следующий URL]. Идеально для модели «переход».
map — собирает analytics payload (from, to, timestamp и т.д.).
Подводные камни
pairwise ДО filter — отменённая навигация попадёт в пару и испортит данные. Сначала filter, потом pairwise.
Первая страница не создаёт перехода (некуда сравнивать с предыдущей). Если нужен initial referrer — добавьте startWith.
Не блокируйте навигацию ожиданием отправки аналитики. Analytics — fire-and-forget side effect.
Что в итоге получаем
Аналитика получает чистый поток реальных переходов между страницами, без шума от отменённых попыток.