Вопрос:

Отслеживание просмотров страниц Google Analytics с помощью AngularJS

google-analytics angularjs

107169 просмотра

21 ответа

7634 Репутация автора

Я устанавливаю новое приложение, используя AngularJS в качестве внешнего интерфейса. Все на стороне клиента сделано с push5tete HTML5, и я хотел бы иметь возможность отслеживать просмотры моих страниц в Google Analytics.

Автор: dj2 Источник Размещён: 23.05.2012 05:01

Ответы (21)


238 плюса

7634 Репутация автора

Решение

Если вы используете ng-viewприложение Angular, вы можете прослушать $viewContentLoadedсобытие и отправить событие отслеживания в Google Analytics.

Предполагая, что вы установили свой код отслеживания в главном файле index.html с именем, var _gaqа MyCtrl - это то, что вы определили в ng-controllerдирективе.

function MyCtrl($scope, $location, $window) {
  $scope.$on('$viewContentLoaded', function(event) {
    $window._gaq.push(['_trackPageView', $location.url()]);
  });
}

ОБНОВЛЕНИЕ: для новой версии Google-Analytics используйте эту

function MyCtrl($scope, $location, $window) {
  $scope.$on('$viewContentLoaded', function(event) {
    $window.ga('send', 'pageview', { page: $location.url() });
  });
}
Автор: dj2 Размещён: 23.05.2012 05:01

57 плюса

6236 Репутация автора

При загрузке нового представления AngularJSGoogle Analytics не учитывает его как загрузку новой страницы. К счастью, есть способ вручную указать GA зарегистрировать URL как новый просмотр страницы.

_gaq.push(['_trackPageview', '<url>']); будет делать эту работу, но как связать это с AngularJS?

Вот сервис, который вы могли бы использовать:

(function(angular) { 

  angular.module('analytics', ['ng']).service('analytics', [
    '$rootScope', '$window', '$location', function($rootScope, $window, $location) {
      var track = function() {
        $window._gaq.push(['_trackPageview', $location.path()]);
      };
      $rootScope.$on('$viewContentLoaded', track);
    }
  ]);

}(window.angular));

Когда вы определяете свой угловой модуль, включите модуль аналитики следующим образом:

angular.module('myappname', ['analytics']);

ОБНОВЛЕНИЕ :

Вы должны использовать новый универсальный код отслеживания Google Analytics с:

$window.ga('send', 'pageview', {page: $location.url()});
Автор: Haralan Dobrev Размещён: 04.09.2012 11:44

7 плюса

134 Репутация автора

Я создал простой пример на GitHub, используя вышеуказанный подход.

https://github.com/isamuelson/angularjs-googleanalytics

Автор: IBootstrap Размещён: 27.12.2012 07:23

11 плюса

6447 Репутация автора

Я создал сервис + фильтр, который может помочь вам, ребята, и, возможно, также с некоторыми другими провайдерами, если вы решите добавить их в будущем.

Проверьте https://github.com/mgonto/angularytics и дайте мне знать, как это работает для вас.

Автор: mgonto Размещён: 04.06.2013 05:11

4 плюса

1315 Репутация автора

Если кто-то хочет реализовать с помощью директив, тогда, идентифицируйте (или создайте) div в index.html (только под тегом body или на том же уровне DOM)

<div class="google-analytics"/>

и затем добавьте следующий код в директиву

myApp.directive('googleAnalytics', function ( $location, $window ) {
  return {
    scope: true,
    link: function (scope) {
      scope.$on( '$routeChangeSuccess', function () {
        $window._gaq.push(['_trackPageview', $location.path()]);
      });
    }
  };
});
Автор: coderman Размещён: 26.06.2013 10:27

40 плюса

406 Репутация автора

Просто быстрое дополнение. Если вы используете новый analytics.js, то:

var track = function() {     
 ga('send', 'pageview', {'page': $location.path()});                
};

Кроме того, один совет заключается в том, что Google Analytics не будет срабатывать на localhost. Так что, если вы тестируете на localhost, используйте следующее вместо создания по умолчанию ( полная документация )

ga('create', 'UA-XXXX-Y', {'cookieDomain': 'none'});
Автор: wynnwu Размещён: 12.08.2013 10:28

48 плюса

1851 Репутация автора

app.run(function ($rootScope, $location) {
    $rootScope.$on('$routeChangeSuccess', function(){
        ga('send', 'pageview', $location.path());
    });
});
Автор: dpineda Размещён: 17.10.2013 03:41

-3 плюса

248 Репутация автора

Если вы ищете полный контроль над новым кодом отслеживания Google Analytics, вы можете использовать мой собственный Angular-GA .

Он gaдоступен через инъекцию, поэтому его легко проверить. Это не делает никакой магии, кроме установки пути на каждом routeChange. Вы все еще должны отправить просмотр страницы, как здесь.

app.run(function ($rootScope, $location, ga) {
    $rootScope.$on('$routeChangeSuccess', function(){
        ga('send', 'pageview');
    });
});

Кроме того, есть директива, gaкоторая позволяет привязывать несколько аналитических функций к событиям, например:

<a href="#" ga="[['set', 'metric1', 10], ['send', 'event', 'player', 'play', video.id]]"></a>
Автор: Rafał Lindemann Размещён: 21.12.2013 05:09

2 плюса

110 Репутация автора

Я использую ui-router и мой код выглядит так:

$rootScope.$on('$stateChangeSuccess', function(event, toState, toParams){
  /* Google analytics */
  var path = toState.url;
  for(var i in toParams){
    path = path.replace(':' + i, toParams[i]);
  }
  /* global ga */
  ga('send', 'pageview', path);
});

Таким образом, я могу отслеживать разные состояния. Может быть, кто-то найдет это полезным.

Автор: Miha Eržen Размещён: 16.07.2014 01:34

10 плюса

1716 Репутация автора

Объединение ответов от wynnwu и dpineda было тем, что мне помогло.

angular.module('app', [])
  .run(['$rootScope', '$location', '$window',
    function($rootScope, $location, $window) {
      $rootScope.$on('$routeChangeSuccess',
        function(event) {
          if (!$window.ga) {
            return;
          }
          $window.ga('send', 'pageview', {
            page: $location.path()
          });
        });
    }
  ]);

Установка третьего параметра в качестве объекта (вместо просто $ location.path ()) и использование $ routeChangeSuccess вместо $ stateChangeSuccess сделали свое дело.

Надеюсь это поможет.

Автор: Pedro Lopez Размещён: 13.08.2014 03:58

3 плюса

1769 Репутация автора

В вашем index.html, скопируйте и вставьте фрагмент ga, но удалите строкуga('send', 'pageview');

<!-- Google Analytics: change UA-XXXXX-X to be your site's ID -->
<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
  ga('create', 'UA-XXXXXXXX-X');
</script>

Я хотел бы дать ему собственный заводской файл my-google-analytics.jsс самоинъекцией:

angular.module('myApp')
  .factory('myGoogleAnalytics', [
    '$rootScope', '$window', '$location', 
    function ($rootScope, $window, $location) {

      var myGoogleAnalytics = {};

      /**
       * Set the page to the current location path
       * and then send a pageview to log path change.
       */
      myGoogleAnalytics.sendPageview = function() {
        if ($window.ga) {
          $window.ga('set', 'page', $location.path());
          $window.ga('send', 'pageview');
        }
      }

      // subscribe to events
      $rootScope.$on('$viewContentLoaded', myGoogleAnalytics.sendPageview);

      return myGoogleAnalytics;
    }
  ])
  .run([
    'myGoogleAnalytics', 
    function(myGoogleAnalytics) {
        // inject self
    }
  ]);
Автор: ilovett Размещён: 20.10.2014 06:39

0 плюса

1 Репутация автора

Слияние еще больше с ответом Педро Лопеса,

Я добавил это в свой модуль ngGoogleAnalytis (который я использую во многих приложениях):

var base = $('base').attr('href').replace(/\/$/, "");

в этом случае у меня есть тег в моей индексной ссылке:

  <base href="/store/">

это полезно при использовании режима html5 на angular.js v1.3

(удалите вызов функции replace (), если ваш базовый тег не заканчивается косой чертой /)

angular.module("ngGoogleAnalytics", []).run(['$rootScope', '$location', '$window',
    function($rootScope, $location, $window) {
      $rootScope.$on('$routeChangeSuccess',
        function(event) {
          if (!$window.ga) { return; }
          var base = $('base').attr('href').replace(/\/$/, "");

          $window.ga('send', 'pageview', {
            page: base + $location.path()
          });
        }
      );
    }
  ]);
Автор: Felipe Sousa Iketani Размещён: 21.11.2014 12:29

4 плюса

39 Репутация автора

Лучший способ сделать это - использовать Менеджер тегов Google для запуска ваших тегов Google Analytics на основе прослушивателей истории. Они встроены в интерфейс GTM и легко позволяют отслеживать взаимодействия HTML5 на стороне клиента.

Включите встроенные переменные History и создайте триггер для запуска события на основе изменений истории.

Автор: user2236721 Размещён: 30.03.2015 04:42

3 плюса

3061 Репутация автора

Если вы используете ui-router, вы можете подписаться на событие $ stateChangeSuccess следующим образом:

$rootScope.$on('$stateChangeSuccess', function (event) {
    $window.ga('send', 'pageview', $location.path());
});

Полный рабочий пример см. В этой записи блога.

Автор: Jason Размещён: 24.01.2016 05:52

1 плюс

12393 Репутация автора

Мне лично нравится настраивать свою аналитику с URL шаблона вместо текущего пути. Это происходит главным образом потому, что в моем приложении много пользовательских путей, таких как message/:idили profile/:id. Если бы я отправил эти пути, я бы просмотрел так много страниц в аналитике, что было бы слишком сложно определить, какие пользователи посещают больше всего.

$rootScope.$on('$viewContentLoaded', function(event) {
    $window.ga('send', 'pageview', {
        page: $route.current.templateUrl.replace("views", "")
    });
});

Теперь у меня есть чистые просмотры страниц в моей аналитике, такие как user-profile.htmlи message.htmlвместо многих страниц profile/1, profile/2и profile/3. Теперь я могу обрабатывать отчеты, чтобы увидеть, сколько людей просматривают профили пользователей.

Если у кого-то есть возражения по поводу того, почему это плохая практика в аналитике, я был бы более чем рад услышать об этом. Совершенно новый для использования Google Analytics, поэтому не слишком уверен, что это лучший подход или нет.

Автор: Fizzix Размещён: 29.02.2016 06:49

3 плюса

458 Репутация автора

Используйте GA 'set', чтобы убедиться, что маршруты выбраны для аналитики Google в реальном времени. В противном случае последующие вызовы GA не будут отображаться на панели реального времени.

$scope.$on('$routeChangeSuccess', function() {
    $window.ga('set', 'page', $location.url());
    $window.ga('send', 'pageview');
});

Google настоятельно рекомендует этот подход, как правило, вместо передачи третьего параметра в «отправить». https://developers.google.com/analytics/devguides/collection/analyticsjs/single-page-applications

Автор: fuzzysearch Размещён: 01.04.2016 03:06

1 плюс

1031 Репутация автора

Для тех из вас, кто использует AngularUI Router вместо ngRoute, можно использовать следующий код для отслеживания просмотров страниц.

app.run(function ($rootScope) {
    $rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) {
        ga('set', 'page', toState.url);
        ga('send', 'pageview');
    });
});
Автор: Kevin M Размещён: 25.05.2016 02:35

1 плюс

1144 Репутация автора

Разработчики , создающие приложения Свободна страницу можно использовать AutoTrack , которая включает в себя urlChangeTracker плагин , который обрабатывает все важные соображения , перечисленные в данном руководстве для вас. См. Документацию по автодорожке для инструкций по использованию и установке.

Автор: Abou-Emish Размещён: 07.08.2016 05:24

3 плюса

303 Репутация автора

Я использую AngluarJS в режиме HTML5. Я нашел следующее решение как наиболее надежное:

Используйте библиотеку angular-google-analytics . Инициализируйте это чем-то вроде:

//Do this in module that is always initialized on your webapp    
angular.module('core').config(["AnalyticsProvider",
  function (AnalyticsProvider) {
    AnalyticsProvider.setAccount(YOUR_GOOGLE_ANALYTICS_TRACKING_CODE);

    //Ignoring first page load because of HTML5 route mode to ensure that page view is called only when you explicitly call for pageview event
    AnalyticsProvider.ignoreFirstPageLoad(true);
  }
]);

После этого добавьте прослушиватель в $ stateChangeSuccess 'и отправьте событие trackPage.

angular.module('core').run(['$rootScope', '$location', 'Analytics', 
    function($rootScope, $location, Analytics) {
        $rootScope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams, options) {
            try {
                Analytics.trackPage($location.url());
            }
            catch(err) {
              //user browser is disabling tracking
            }
        });
    }
]);

В любой момент, когда вы инициализируете своего пользователя, вы можете ввести Google Analytics и сделать звонок:

Analytics.set('&uid', user.id);
Автор: Maleta Размещён: 15.12.2016 01:57

3 плюса

9194 Репутация автора

Я обнаружил, что gtag()функция работает, а не ga()функция.

В файле index.html, в <head>разделе:

<script async src="https://www.googletagmanager.com/gtag/js?id=TrackingId"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'TrackingId');
</script>

В коде AngularJS:

app.run(function ($rootScope, $location) {
  $rootScope.$on('$routeChangeSuccess', function() {
    gtag('config', 'TrackingId', {'page_path': $location.path()});
  });
});

Замените TrackingIdсвоим собственным идентификатором отслеживания.

Автор: Brent Washburne Размещён: 27.05.2018 02:51

0 плюса

11 Репутация автора

Я предлагаю использовать библиотеку аналитики сегмента и следовать нашему краткому руководству по Angular . Вы сможете отслеживать посещения страниц и отслеживать действия пользователей с помощью одного API. Если у вас есть SPA, вы можете разрешить RouterOutletкомпоненту обрабатывать время отрисовки страницы и использовать его ngOnInitдля вызова pageвызовов. Пример ниже показывает один способ сделать это:

@Component({
  selector: 'app-home',
  templateUrl: './home.component.html',
  styleUrls: ['./home.component.css']
})
export class HomeComponent implements OnInit {
  ngOnInit() {
    window.analytics.page('Home');
  }
}

Я поддерживаю https://github.com/segmentio/analytics-angular . С помощью сегмента вы сможете включать и выключать разные пункты назначения одним щелчком переключателя, если вы заинтересованы в испытании нескольких аналитических инструментов (мы поддерживаем более 250 направлений) без необходимости писать какой-либо дополнительный код. 🙂

Автор: William Размещён: 21.02.2019 10:49
Вопросы из категории :
32x32