Можно ec.js быть проксированным с помощью серверного gtm?

#google-tag-manager

Вопрос:

Было интересно, если только gtm.js и analytics.js можно ли проксировать через gtm-сервер? Не могу найти никакой информации об этом в документах Google. Кроме того, при попытке получить его с помощью gtm на стороне сервера выдается ошибка 404.

Ответ №1:

Есть ошибка, из-за которой plugins/ua/ec.js будет извлечен через https://your.domain/plugins/ua/ec.js

Когда это произойдет, вы должны выбрать этот клиентский запрос и вернуть скрипт вручную (написав шаблон клиента в контейнере на стороне сервера).

найдено репозиторий с примером кода, который сократил время, которое я бы использовал в противном случае. кредит: https://gist.github.com/mbaersch/e94e2499ea5bb761bf81878d815fd890#file-fix-ecjs-client-tpl Здесь начинается важная часть:

 const setResponseBody = require('setResponseBody');
const setResponseHeader = require('setResponseHeader');
const setResponseStatus = require('setResponseStatus');
const sendHttpGet = require('sendHttpGet');
const templateDataStorage = require('templateDataStorage');
const returnResponse = require('returnResponse');
const key = "ec.js";

if (require('getRequestPath')() === '/plugins/ua/ec.js') {
  require('claimRequest')();
  setResponseHeader('content-type', 'application/javascript');
  const cachedBody = templateDataStorage.getItemCopy(key);
  if (cachedBody) {
    setResponseBody(cachedBody);
    setResponseStatus(200);
    returnResponse();
  } else {
    sendHttpGet('https://www.google-analytics.com/plugins/ua/ec.js', (statusCode, headers, body) => {
      templateDataStorage.setItemCopy(key, body);
      setResponseBody(body);
      setResponseStatus(statusCode);
      returnResponse();
    });    
  }  
}
 

Ответ №2:

Серверный GTM не проксирует js, как обычный GTM. В основном это для проксирования сетевых запросов.

Если вам интересно, может ли он отправлять расширенные события электронной коммерции, то да, может.

Если вам интересно, может ли он развернуть что-либо на сайте (включая любые файлы js), то нет, он не может. Это никак не проявляется во внешнем интерфейсе. Он может проксировать файлы, но все, что он делает, это переписывает конечную точку, которую вам все равно нужно включить в свой DOM.

Используйте интерфейс GTM для развертывания чего-либо на интерфейсе.

Комментарии:

1. Это неправильно. GTM на стороне сервера может обслуживать как сам файл GTM на стороне клиента (для этого есть специальный клиент), так и скрипт аналитики (если вы установите флажок «отправить на сервер» в теге конфигурации для GA4). Однако он не может переписать скрипты, поэтому я ожидаю, что он не сможет изменить URL-адреса с помощью загружаемых плагинов GA.

2. Да, он может «обслуживать» FE GTM, но это далеко от того, как это делает FE GTM. Вам все равно придется включить его в DOM вручную, просто используя свой серверный URL-адрес в качестве конечной точки. Итак, если мы называем это «обслуживанием js», то мы можем сказать, что любой сторонний веб-сервер может «обслуживать» js. Хотя, поступая таким образом, вы не только в конечном итоге покажете тот факт, что используете BE GTM, но и местоположение, в котором размещен ваш ит, что лишает его преимуществ.

3. Теперь я вижу, что я не очень четко сформулировал свой вопрос. Но разобрался с проблемой, поэтому дам ответ.

Ответ №3:

Stape.у io есть файловый прокси-клиент https://github.com/stape-io/file-proxy-client таким образом, вы можете легко проксировать любой файл через свой серверный контейнер GTM.

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