Клуб Яндекс.Метрики

Гид по Метрике: как определить, на каких страницах достигалась цель

Пост в архиве.

ОБРАТИТЕ ВНИМАНИЕ

В настоящее время с новым кодом можно использовать новые методы JS API: https://yandex.ru/support/metrica/objects/method-reference.html  
Новые методы работают только с новым кодом: https://yandex.ru/blog/metrika/novyy-kod-v-nastroykakh-schetchika 

Список старых методов здесь: https://yandex.ru/support/metrica/objects/_method-reference.html 

Конструкция передачи параметров с целью будет выглядет так: ym (XXXXXX, 'reachGoal', 'TARGET', {URL: document.location.href})

Нередко пользователи Метрики нас спрашивают, как определить url-адрес страницы, на которой была достигнута JavaScript-цель. Это бывает нужно, например, в тех случаях, когда форма заявки присутствует на многих страницах сайта, а создавать отдельную цель для отслеживания отправки каждой формы не хочется (или нет технической возможности, долго, на счетчике создано максимальное количество целей и так далее). 

Задача:

В интернет-магазине site.ru форма заказа находится более чем на ста страницах сайта. Владелец сайта хочет начать отслеживать отправки всех этих форм. Создавать для этого 100 целей долго и неудобно. Владелец сайта обратился в Службу поддержки, где с ним поделились решением поставленной задачи. 

Решение:

Браузер посетителя знает и хранит в параметре document.location.href информацию о том, на какой странице в данный момент находится посетитель, поэтому мы можем эту информацию получить и передать в Метрику с помощью параметров визитов. Для этого нужно создать одну общую JavaScript-цель, а url-адреса, на которых была эта цель достигнута, передавать в Метрику как параметры визита в момент достижения JavaScript-цели с помощью метода reachGoal:

yaCounterXXXXXX.reachGoal('ORDER', {URL: document.location.href})  

где:

  • XXXXXX — номер вашего счетчика
  • ORDER — идентификатор вашей JavaScript-цели
  • URL — параметр визита 1 уровня
  • document.location.href — параметр визита 2 уровня

Код вызова метода reachGoal следует добавлять в исходный код сайта. Если у вас возникли трудности, обратитесь за помощью к вебмастеру сайта.

Как это работает?

Посетитель пришел на страницу site.ru/contacts, и браузер посетителя записал в параметр document.location.href  адрес фактического нахождения (то есть site.ru/contacts). В момент достижения JavaScript-цели (например, отправил форму заказа) в Метрику передаются два уровня параметров визитов:

  1. URL — в первом уровне мы передаем информацию о том, что содержат данные параметры визитов. Назовем этот параметр URL, чтобы отобразить,что в этом дереве параметров содержатся URL-адреса.  URL — произвольное название параметра, можно назвать его иначе (url-адрес, юрл-адрес и так далее). 
  2. document.location.href  — url-адрес страницы, на которой находился посетитель в момент достижения цели (будет получена из параметра барузера document.location.href).

Как анализировать полученные данные?

Например, в отчете «Параметры визитов» выполните сегментацию по достижению цели «Order».

После этого в отчете останутся только те визиты, в которых была достигнута цель «Order». Увидеть количество отправленных заявок с конкретной страницы можно в справа в таблице в метрике «Количество параметров визитов», а слева, в группировках — url-адреса страниц, на которых эти заявки были отправлены. 

FYI

Обращаем ваше внимание, что данный кейс не является универсальным. Такой вариант будет работать при работе с одной целью, установленной на разных страницах сайта. В случае, если необходимо применить задачу для двух и более целей, то, соответственно, необходимо модернизировать этот кейс под свою задачу — добавить еще параметры визита (URL1, URL2 и так далее для каждой цели свой параметр URL).

Также стоит помнить, что конверсия в отчете «Параметры визитов» применима непосредственно к визиту. Если в рамках визита будет отправлено несколько параметров (то есть, цель достигнута на нескольких страницах), то каждому параметру будет дана одинаковая конверсия (будет дана сумма всех достижений цели).

24 комментария
Спасибо, очень полезно для сквозных форм. Странно, что ни одного комментария)
Роман Ляшко
31 октября 2018, 21:01
Действительно, очень полезно. Не создавать же миллион целей для решения одной задачи

Александр Е.
21 декабря 2018, 14:10
Супер! Спасибо! 
Демьянов Виталий
26 декабря 2018, 16:19
Это конечно здорово, но больше похоже на костыль. При таком подходе, в отчетах метрики можно увидеть только абсолютные показатели по количеству достижений цели на странице, а ту же конверсию придется рассчитывать вручную.
Вы бы расширили возможности метрики в области постраничной аналитики, вас и в голосовалке уже не раз просили об этом: раз, два, три и т.д.
Лыков Николай
12 сентября 2022, 08:52
Демьянов Виталий,
До сих пор есть такая боль
Дмитрий Громов
12 октября 2022, 15:07
Лыков Николай,
 здравствуйте. Разработка отчёта с достижением целей по страницам в ближайших обновлениях не запланирована, но мы рассматриваем добавление такой возможности в Метрику.
Какие варианты решения есть сейчас:
1. Для небольшого сайта можно настроить уникальные цели для каждой страницы
2. Если страниц много, то можно использовать параметры визитов document.location.href с методом reachGoal
Для анализа среднего времени на странице вы можете подключить отчёты контентной аналитики. Подробнее о них рассказываем здесь: https://yandex.ru/support/metrica/publishers/about.html
Обновлено 12 октября 2022, 15:07
Бестужев А.
25 марта 2019, 11:10
Не очень понятно. Написано общая JavaScript-цель. Общая она с чем должна быть? Например у меня есть цель клик на телефон в шапке сайта. Идентификатор цели  "Click"  уже есть, которая фиксирует достижение цели в метрике.  Надо лишь добавить метод reachGoal: yaCounterXXXXXX.reachGoal('Click', {URL: document.location.href}). Все правильно?  А если у меня два телефона в шапке. У каждого свой идентификатор цели. Значит надо два вызова метода? Зачем в таком случае разные URL?
Василий
Сотрудник Яндекса25 марта 2019, 11:39
Бестужев А.,
общая цель - это, в вашем случае, цель которая достигается на разных страницах, но при совершении одинакового действия (как в вашем случае - клик по номеру телефона). 
В случае с одним номером - да, нужно добавить указанный вами метод. 


Если номера два, то используйте для второго номера другой идентификатор цели и параметр визита, например, соответственно: Click2 и URL2. 


Код будет выглядеть так: reachGoal: yaCounterXXXXXX.reachGoal('Click2', {URL2: document.location.href})


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

Василий,
подскажите пожалуйста, а  как будет выглядеть конструкция для нового счетчика:  onclick="ym(XXXXXXX, 'reachGoal', 'CLIC'); return true; вместе с document.location.href
Василий
Сотрудник Яндекса10 августа 2019, 20:27
cmteam-audit,
вот так:

onclick="ym(XXXXXX, 'reachGoal', 'TARGET', {URL: document.location.href}); return true;
URL — параметр визита 1 уровня
document.location.href — параметр визита 2 уровня
===

Подскажите, как добавить 3-й уровень?
Василий
Сотрудник Яндекса21 февраля 2020, 11:49
interh,
например, так {level1: {level2:level3}}
Василий,
GTM ругается https://i.imgur.com/ePTwngD.png и не даёт такой код компилировать https://i.imgur.com/BHeifrK.png 


ym(8016676,'reachGoal','banner-click', {URL:{document.location.href:{{Click URL}}}})


{{Click URL}} — это переменная из GTM
Обновлено 13 сентября 2021, 08:25
Дмитрий Громов
13 сентября 2021, 13:17
chucky23mc,
здравствуйте! По вопросам ошибок в интерфейсе GTM рекомендую вам обратиться в техническую поддержку GTM.
Здравствуйте.
Почему то при настройке через GTM вот с такой конструкцией цель вообще не считается.

<script>
ym(53140879, 'reachGoal', 'Click_Like_Yes', {URL:document.location.href});
</script>
Василий
Сотрудник Яндекса29 апреля 2020, 19:10
Антон,
напишите в Службу поддержки. Нужно бы посмотреть более детально. 
Добрый вечер.
Подскажите пожалуйста


1)Чтобы внедрить Ваше решение-метод, нужен Новый Код Я-Метрики?
2)Как узнать Новый Код Я-Метрики установлен в данный момент?


3)Сейчас цель на достижение Java-Script события (Отслеживание нажатия на кнопку на странице А) выглядит так (если редактировать)^
Тип условия: Java-Script событие
Идентификатор цели: CLICK_BUTTON_CALLBACK
Код цели для сайта: ym(ХХХХХХХХ,'reachGoal','CLICK_BUTTON_CALLBACK')


4) А каким образом создаётся ОБЩАЯ цель которая определяет, на каких страницах достиглась цель??
Как написано выше - Создаём Общую JavaScript-цель
Жмём Добавить цель - JavaScript Событие.


Указываем называние цели и идентификатор цели
А где делается вот это: "..а url-адреса, на которых была эта цель достигнута, передавать в Метрику как параметры визита в момент достижения JavaScript-цели с помощью метода reachGoal:.."?


5) Или просто делать обычную цель и далее в Отчет «Параметры визитов» выполнить сегментацию по достижению цели «Order».
и отчет покажет страницы на которых была достигнута цель?


6)Я правильно понял? Сейчас УЖЕ ЕСТЬ цель с JavaScript событием на "сквозную кнопку".
Значит сейчас уже можно сделать такой отчет Отчет «Параметры визитов» выполнить сегментацию по достижению цели «Order». и покажет страницы на которых была достигнута цель и новую цель создавать не нужно (которая покажет на каких страницах была достигнута цель?)
Или новую нужно создавать цель? (и указывать то, что написано в вопросе №4 выше)


7)Можно ли рассчитывать на помощь техподдержки в случае обнаружение каких-то проблем при установке?


спасибо большое за ответы
Дмитрий Громов
19 февраля 2021, 11:16
tsvit199,
Добрый день! Общая цель, это когда создаётся всего одна цель , которая фиксирует достижение, без создания отдельных для каждой формы. Если вас она уже есть такая, то нет необходимости создавать какие-то еще другие цели.
Надо только предавать с этой целью данные по параметрам визитах, как рассказано в статье.
Помимо внедрения данного решения, лучше всегда использовать новый код.
Чтобы узнать какой код установлен в данный момент, можно зайти в код сайта и посмотреть какой код счетчика установлен. Если видите «YaCounter» – старый код, если «ym» – новый.
Пишите команде поддержки, в любой из доступных каналов связи, если возникнут трудности при настройке. Подскажут и помогут. 
Можете пояснить почему так происходит:

Есть ссылка такого типа

<a href="#modalxxx" onclick="ym(xxxxxxxx,'reachGoal','blabla', {URL: document.location.href}); return true;">bla bla bla</a>


Количество срабатываний зафиксированных в "Конверсиях" отличается от количества в "Параметрах визита" и "Нет данных, соответствующих условиям отчёта." - не показывает на каких url сработала цель.
Обновлено 26 января 2023, 16:40
Дмитрий Громов
26 января 2023, 18:10
djbu1,
здравствуйте. Для того, чтобы всё проверить, понадобится номер вашего счётчика и ссылки на отчёты, которые вы анализируете. Пожалуйста, напишите команде Метрики напрямую через форму на этой странице: https://yandex.ru/support/metrica/troubleshooting.html 
У меня проблема из-за того, что в URL часто находятся разные хэши.
1 посетитель под двумя разными хэшами выполнил целевое действие - я получаю 2 целевых посетителя.


В относительном сравнении, ситуация редкая.
В абсолютном на многих многостраничных сайтах используются хэши в строке URL и целевое действие может быть достигнуто на разных страницах.


Как решить вопрос? ТП говорит писать программисту. А если его нет? 
Приложите хотя бы один пример как передавать в метрику лишь путь, а не всю строку.
Мб возможно реализовать в GTM?


Я обращался к GPT3,5, гуглил инфу, но нигде не нашел ответа на свой вопрос.
Дмитрий Громов
27 июня 2023, 16:09
Дмитрий,
здравствуйте. Отвечу на ваши вопросы по пунктам:
1. «1 посетитель под двумя разными хэшами выполнил целевое действие - я получаю 2 целевых посетителя.»
Это нормально. Если выбрать две метрики «Целевые посетители<название цели>» для пользователя, который достиг обе цели, то в обоих столбцах таблицы отчета будет значение «1». Однако, важно, что это все ещё один целевой посетитель, а не два. То есть не сумма, а количество.
2. «В абсолютном на многих многостраничных сайтах используются хэши в строке URL и целевое действие может быть достигнуто на разных страницах. Как решить вопрос? ТП говорит писать программисту. А если его нет? Приложите хотя бы один пример как передавать в метрику лишь путь, а не всю строку.»
Вы можете передавать в Метрику часть url. Настроить можно через искусственный хит. Подробнее рассказываем здесь: https://yandex.ru/support/metrica/code/counter-spa-setup.html Либо можно отправлять часть url при целевом действии. Пример можно посмотреть тут: https://yandex.ru/support/metrica/data/visit-params_example.html
Рекомендуем обратиться к программисту, вебмастеру или разработчику сайта, так как для реализации понадобятся специальные знания и навыки работы с HTML и JavaScript.
3. Технически вы верно прописали строки кода для примера. Но без реализации на сайте с передачей параметров это проверить не получится.
Напишите, пожалуйста, нам через форму обратной связи: https://yandex.ru/support/metrica/troubleshooting.html , уточните задачу (какую цель и на каких страницах нужно достигать) и укажите номер счётчика. Поможем разобраться.
<script>yaCounterXXXXX.reachGoal('lead', {URL: document.location.href})</script> — получаем полную строку

<script>yaCounterXXXXX.reachGoal('lead', {URL2: document.location})</script> — получаем параметры, которые можем передавать
<script>yaCounterXXXXX.reachGoal('lead', {URL3: document.location.pathname})</script> — получаем путь.
Подробное описание как передавать конкретную часть адресной строки


Пример URL:
https://www.samanthaming.com/tidbits/?filter=JS#2


Код ЯМ: 
yaCounterXXXXXX.reachGoal('ORDER', {URL: document.location.href})


Фрагмент кода "document.location.href" передаст весь URL


Если требуется получить конкретный фрагмент URL, то замените "href" на необходимую вам переменную:


window.location.origin → 'https://www.samanthaming.com'
.protocol → 'https:'
.host → 'www.samanthaming.com'
.hostname → 'www.samanthaming.com'
.port → ''
.pathname → '/tidbits/'
.search → '?filter=JS'
.hash → '#2'
.href → 'https://www.samanthaming.com/tidbits/?filter=JS#2'


Разница между "host" и "hostname". Если в строке присутствует порт (https://www.samanthaming.com:8080), то вернутся следующие значения:
window.location.host; // 'www.samanthaming.com:8080'

window.location.hostname; // 'www.samanthaming.com'
window.location.port; // '8080'