Перейти к содержанию

Как не учитывать свои визиты в Яндекс Метрике: фильтр, WordPress и флаг в браузере

Когда сайт маленький, свои же заходы заметно портят статистику. Проверил, как выглядит новый пост, поправил опечатку, открыл ещё раз — и в Метрике плюс три визита, «глубокий просмотр» и «время на сайте» как у самого преданного читателя. Хочется видеть только настоящих посетителей.

В 2020 году я описал два способа: фильтр по IP в настройках Метрики и отключение счётчика для админа в теме WordPress. Оба живы, но у обоих есть дыры, которые я с тех пор нашёл. Ниже — три способа, от самого простого, и чем каждый плох.

Коротко: включите в Метрике фильтр «Не учитывать мои визиты» — он работает по браузеру. Для сайта на WordPress добавьте условие current_user_can( 'edit_posts' ) вокруг кода счётчика. Заходите на сайт с разных устройств без входа в админку — помогут две строчки на JavaScript с флагом в браузере.

Способ 1: фильтр в настройках Метрики

В счётчике откройте «Настройки» → вкладку «Фильтры». Там есть галочка «Не учитывать мои визиты» и фильтры по IP-адресу.

Фильтры в настройках Яндекс Метрики, 2020 год

Важно понимать, как работает галочка. Я заглянул в настройки своих счётчиков через API Метрики: этот фильтр называется uniq_id с типом me. То есть Метрика узнаёт не вас, а ваш браузер — по идентификатору в его cookie. Отсюда минусы:

  • в другом браузере, на телефоне, в режиме инкогнито вы снова обычный посетитель;
  • почистили cookie — Метрика вас забыла.

Фильтр по IP годится, если у вас постоянный адрес. У домашнего интернета он часто меняется, у мобильного — постоянно, и фильтр тихо перестаёт работать. На lexium.ru фильтра по IP сейчас нет.

И общее для всех фильтров Метрики: они действуют только с момента включения. Старую статистику они не почистят, а отфильтрованные визиты не сохраняются вовсе — включив фильтр, вы их потом не увидите, даже если захотите.

Способ 2: не выводить счётчик для админа WordPress

Если вы не видите код счётчика, то и Метрика вас не видит. В теме сайта, обычно в footer.php, оберните код счётчика условием:

<?php if ( ! current_user_can( 'edit_posts' ) ) : ?>
	<!-- Yandex.Metrika counter -->
	…код счётчика…
	<!-- /Yandex.Metrika counter -->
<?php endif; ?>

edit_posts — право редактировать записи. Оно есть у администратора, редактора, автора и участника, а у обычного подписчика и гостя — нет. Так и сделано у меня на lexium.ru.

В первой версии поста было current_user_can('administrator') || current_user_can('editor'). Работает, но проверять роли через current_user_can WordPress не советует: функция задумана для прав, а не ролей, и у сайтов с нестандартными ролями такая проверка ведёт себя неожиданно. Право надёжнее.

Грабли: кэш страниц. Если на сайте плагин кэширования, проверьте, что он не кэширует страницы для вошедших пользователей. Обычно не кэширует, но если такая опция включена, в кэш однажды попадёт страница без счётчика — и её получат все посетители. Метрика тогда «проседает» без видимой причины.
Грабли: тема обновилась — правка пропала. Правки в footer.php чужой темы затираются при её обновлении. Для чужой темы делайте дочернюю или выводите счётчик своим маленьким плагином через хук wp_footer — с тем же условием.

Минус способа остаётся: пока вы не вошли в админку, вы обычный посетитель.

Способ 3: флаг в браузере

Этот способ закрывает дыру второго: счётчик не грузится в браузере, где вы один раз открыли «волшебную» ссылку, — даже без входа в админку. Подходит для любого сайта, не только WordPress, и для любых счётчиков.

В код счётчика добавляются две строчки: первая ставит флаг, вторая проверяет его перед запуском Метрики. Номер счётчика 12345678 замените на свой:

<script>
	if (location.search.indexOf('no-metrika') !== -1) localStorage.setItem('no-metrika', '1');
	if (!localStorage.getItem('no-metrika')) {
		(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();
		for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
		k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
		(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
		ym(12345678, "init", { clickmap:true, trackLinks:true, accurateTrackBounce:true });
	}
</script>

Теперь откройте в каждом своём браузере, на компьютере и телефоне, адрес вида https://ваш-сайт.ру/?no-metrika. Браузер запомнит флаг в localStorage, и счётчик в нём больше не запустится. Вернуть учёт — очистить данные сайта в браузере или выполнить в консоли localStorage.removeItem('no-metrika').

Минусы тоже есть: флаг живёт в браузере, как и cookie, и пропадает вместе с данными сайта. А если ссылку узнает кто-то ещё, он тоже выключит себе счётчик — но вреда от этого нет, просто на одного посетителя меньше в статистике.

Что выбрать

На lexium.ru работают первый и второй способы вместе: галочка «Не учитывать мои визиты» в Метрике и условие в теме. Третий стоит добавить, если часто смотрите сайт с телефона или чужого компьютера без входа. Фильтр по IP — только для офиса с постоянным адресом.

Ещё про Метрику и скорость сайта: «Yandex Metrika: Сторонний код заблокировал основной поток».

2 комментария

Написать комментарий

Адрес почты не публикуется. Обязательные поля отмечены звёздочкой.

Возможно, вы не читали

Важное преимущество сайта

Важное преимущество сайта

9 сентября 2013
Оптом - дешевле и выгоднее. Слышали такое мнение? Думаю многие с ним согласятся. Для продавца это прежде всего отсутствие лишних заморочек…

Новые доменные зоны

4 декабря 2013
Домены в каких зонах лучше всего приобретать? Дело не в красоте доменных зон. Дело в привычке. Люди ох как не любят менять то, что для них…