уменьшите влияние стороннего кода сторонний код заблокировал основной поток yandex metrica
Скрипт Яндекс.Метрики (tag.js) негативно влияет на PageSpeed: что делать
Итак, вы решили улучшить ваш показатель PageSpeed. Но в процессе проверки вы заметили, что скрипты Яндекс.Метрики серьезно ухудшают положение дел (что особенно заметно при проверке сайта на мобильных устройствах). Давайте посмотрим на примере с нашим сайтом oddstyle.ru.
В поддержке Яндекса признавали эту проблему (но дальше тестирования ничего не сдвинулось до сих пор):
upd 28/07/2021: Счетчик был обновлен (спасибо за информацию Mihdan), но результаты все равно далеки от идеала. См. комментарии.
У нас стоит следующий код для подключения Яндекс.Метрики:
При проверке мы получаем следующие показатели.
Естественно, показатели эти так себе. Смотрим ниже и видим следующее:
Как видно отсюда, Метрика сильно блокирует основной поток загрузки.
Естественно, у нас есть вариант вообще от нее отказаться. Если Метрику вообще отключить, то показатель будет следующим:
Но как быть, если Метрика все же нужна, хочется использовать некоторые ее особенности?
Одно из решений – заключить вызов функции в setTimeout, чтобы загрузка скрипта была отложена, пока основной контент не будет загружен.
Вот как будет выглядеть код скрипта (не забудьте подставить вместо xxxxxxxx номер своего счетчика):
Вместо 5000 нужно будет подобрать значение, которое позволит вам поддерживать хороший показатель PageSpeed (можно задавать больше, чем 5000).
Вставляем данный код в header.php и имеем следующее:
Чуть похуже, чем без скрипта Метрики вообще, но все равно отлично.
Собственно, setTimeout помог добиться хороших результатов для мобильных, при этом не отказываясь вообще от Метрики.
Для десктопов мы имеем следующее с данным кодом:
Если вы знаете другие методы улучшения PageSpeed для скриптов Метрики, делитесь ими в комментариях.
Yandex Metrika: Сторонний код заблокировал основной поток
Для веб-мастеров не секрет, что Google’s PageSpeed Insights снимает баллы за код счётчика Яндекс.Метрики. Почему? Банально из за того, что файл tag.js грузится со стороннего ресурса достаточно медленно. У меня показывает 600+ микросекунд.
Убрав счетчик Yandex Metrika, я получаю примерно на 4 балла больше. Это, на минутку, ускорение загрузки на 4%! Но Яндекс.Метрика необходима, как удобный инструмент веб-аналитики, а потому выпиливать её не вариант.
Что остаётся?
Способ №1
Остаётся скачать файл tag.js к себе на сервер, скажем, в папку metrika и использовать его оттуда.
Вот так выгладили баллы в Google’s PageSpeed Insights до этой правки.
Очевидно, эффект есть. Но есть и минус. Файл tag.js может меняться, а значит время от времени его нужно скачивать. Руками… Фи!…
Руками качать не будем. Пусть этим занимается Крон. Не тот, который титан из греческой миффологии, а который CronTab на хостинге. Скажем, раз в час.
А теперь пошаговая инструкция на примере хостинга Бегет.
Итак, если Google’s PageSpeed Insights ругается, что сторонний код заблокировал основной поток и винит в этом счетчик Yandex Metrika, мы делаем следующее:
Шаг 1: Создаём в корне сайта папку metrika.
Для этого заходим в корень сайта с помощью FTP-клиента и… Если вы не знаете что такое корень сайта или FTP-клиент, то у вас есть три выхода:
К слову, вместо FTP, можно использовать SSH-клиент или даже Файловый менеджер, который есть в панели управления хостингом (у Бегета он точно есть).
Шаг 2: Скачиваем tag.js и копируем его в папку metrika, созданную в предыдущем шаге.
Тут тоже всё просто. Ссылка на файл есть в коде счётчика Яндекс Метрики. Вот она https://mc.yandex.ru/metrika/tag.js
Просто переходим по ней, а когда файл откроется в браузере, сохраним его комбинацией клавиш Ctrl-S, а затем просто скопируем в папку.
Шаг 3: Вносим правку в код счётчика Яндекс Метрики.
Находим ссылку на tag.js и делаем так, чтобы она ссылалась на папку в корне вашего сайта.
Было (window, document, «script», «https://mc.yandex.ru/metrika/tag.js», «ym»);
Стало (window, document, «script», «/metrika/tag.js», «ym»);
Сохраняем и идём дальше.
Шаг 4: Узнаём полный путь к корню сайта на сервере.
В вебе корень сайта начинается с /. В файловой системе сервера путь до корня может выглядеть примерно так /r/username/sitename/public_html/.
Т.е. корень сайта там лежит в папке, а та в папке, и она, в свою очередь тоже в какой-нибудь папке. Но нам надо знать полный путь, чтобы указать его в кроне.
Убираю index.php, остаётся /home/w/redalert/sitename.ru/public_html/. Это и есть нужный мне путь.
Теперь, когда путь известен, не забываем убрать из подвала сайта!
Шаг 5. Настраиваю задание для крона.
Не знаю как у вас, а на Бегете достаточно зайти в панель управления хостингом и нажать кнопку CronTab.
На открывшейся странице я выбираю произвольную команду, делаю для неё понятное описание, и выбираю её выполнение каждый час.
Сама команда выглядит вот так. Если у вас другой хостинг (не бегет) то найдите способ внедрить её в задачу для крона тем способом, который поддерживается хостингом.
/home/w/redalert/sitename.ru/public_html/ — это тот путь к корню сайта, который я получил в шаге 4.
/metrika/ — это папка где мы будем хранить tag.js и откуда он будет грузиться на сайте.
Теперь раз в час крон будет обновлять tag.js без нашего участия.
Собственно, сохраняю и иду измерять скорость в Google’s PageSpeed Insights.
Ура! Она на 4% выше, как и ожидалось.
Способ №2
Ну а теперь, для самых стойких, способ номер 2. Подойдёт тем кому лень заморачиваться с кроном.
1. Заходим на сервер в корневую папку сайта.
2. Создаём там папку metrika.
3. Кладём в папку metrika файл tag.php
4. В коде счётчика меняем https://mc.yandex.ru/metrika/tag.js на /metrika/tag.php
5. В файл tag.php прописываем вот этот код.
или скачиваем архив с готовым файлом по ссылке /up/metrika.zip и распаковываем в корень сайта (там уже есть нужная папка и даже tag.js в ней имеется).
6. Тестируем результат.
Как это работает?
При обращении к tag.php, если tag.js отсутствует в папке metrika или с момента его последнего обновления прошло больше часа, tag.js будет скачан с серверов яндекса и его содержимое подставится в tag.php.
Если tag.js свежий, то его содержимое будет подставлено в tag.php сразу.
Просто, очень просто, примитивно даже. Создали папку, кинули туда файл, заменили строчку в счётчике и всё.
А теперь полевые испытания. Есть у меня сайт wowm.ru. Он не оптимизирован, а значит идеально подходит для эксперимента.
Замеряю скорость до изменений.
Ставлю новый код счётчика (оказывается там был старый), меняю в нём путь к tag.js на свой. Ну и далее по инструкции.
И вот вам результат.
Миленько так. Т.е. стало медленнее.
Может дело в старом коде счётчика?
Ок. Тестируем скорость на новом счётчике, где tag.js берется с серверов яндекса. А затем тестируем скорость с tag.php
Вывод
1. Сообщение «Сторонний код заблокировал основной поток» исчезло.
2. Прироста в скорости, при использовании способа №2, не наблюдается, а даже наоборот.
3. Старый счётчик яндекс.метрики был быстрее.
А с вами был Доктор Лексиум.
Спасибо за внимание.
После проделанных манипуляций общая оценка Page Speed Insight одной страницы
Было 84
Стало 58
Нет, некоторые показатели улучшились, уменьшение влияния стороннего кода удалось,
но в общем целом незачет получился — вернул как было
У каждого сервера и сайта своя структура. Кому-то этот вариант помогает, как мне например. Кому-то нет.
Я использовал этот способ на нескольких сайтах и там был прирост скорости. Небольшой, конечно, но всё-же.
Все так запутано, нет ли какого-нибудь способа попроще?
Как не быть? Есть. Я добавлю его к этому посту.
а где в коде счетчика найти эту конструкцию?
4. В коде счётчика меняем https://mc.yandex.ru/metrika/tag.js на /metrika/tag.php
В коде счётчика)) Она либо там есть, либо нет. Если нет, значит у вас старый счётчик.
День добрый.
За инфу спасибо.
Но есть вопрос.
Почему плагин? Он позволяет настройками исключить посещение сайта пользователями-админами.
Ваш способ это не позволяет. Или есть возможность организовать аналогичный функционал?
Насколько мне известно, в настройках самой метрики можно указать IP адреса которые следует игнорировать. Обычно SEO-специалисты именно так и делают.
Что касается плагина. Я не лазил в его код, но уверен, что он всего-лишь определяет админ ли пользователь. Если админ, код счётчика на страницах сайта не выводится вовсе. Без плагина это можно сделать двумя строчками кода. При том, вторая строка это фигурная скобка.
Однако, такой способ хуже поскольку до авторизации администратора, код метрики будет присутствовать на страницах, а значит все шатания неавторизованного админина зафиксируются счётчиком метрики.
Когда же Гугл перестанет учитывать метрику при оценке скорости загрузки? Свои коды наверняка не считает.
Пока такая ситуация сохраняется, Гуглу нет никакого смысла не учитывать скрипты Яндекса.
Спасибо за статью. Очень полезная информация.
На здоровье. Надеюсь пригодится.
Тут как раз очень редкий случай, когда лучше поставить плагин. Мой сайт https://tv-ch.ru/ показывал в PageSpeed Insights
99 балов, с установкой кода «Яндекс метрика» упал на 10. Но, спасибо автору, установил плагин «Яндекс.Метрика by Alexander Semikashev». Сейчас там можно и поставить устаревший код яндекс, который очень сильно понижает скорость сайта, и просто вставить код счетчика. Что на много проще и не снижает скорость сайта!
Еще раз спасибо автору, за то что указал на данный плагин. Раньше его не ставил по причинам «мало балов и установок». Но плагин оказался отличным!
Код Метрики стал быстрее
Долгожданное обновление: мы ускорили код Метрики, чтобы он как можно меньше влиял на работу сайта. Мы внимательно следили за вашими пожеланиями — поэтому доработали код таким образом, чтобы он стал работать быстрее даже на самых «тяжёлых» и сложных сайтах. И даже если на счётчике подключены дополнительные возможности — Вебвизор, электронная коммерция или контентная аналитика. При этом переустанавливать счётчик на сайт не понадобится.
Коротко — самое главное:
Как именно мы ускорили код
Для этого потребовались два больших проекта:
Счётчик не просто загружается быстрее: теперь он способен фиксировать больше коротких визитов на сайт, которые раньше просто не успевали записаться в отчёты — так как к концу супер-короткого визита счётчик ещё не был загружен. В результате статистика станет ещё более полной — вы сможете лучше понимать, сколько визитов оказываются совсем непродолжительными, и исследовать, почему это происходит. Например, дело может быть в неудачной ссылке в рекламном объявлении — и это важно вовремя исправить.
Такие масштабные изменения всегда требуют длительной и тщательной отладки. Недостаточно просто переписать код с нуля — важно проверить, что он совместим со всеми браузерами и со всеми способами вёрстки, и со всеми их комбинациями. Например, если посетитель заходит с какой-нибудь устаревшей модели мобильного, на Linux, из браузера Puffin — ведь счётчик должен корректно отрабатывать в самых разных ситуациях. Поэтому на тестирование более быстрого кода потребовалось значительное время.
Мы благодарим всех участников закрытого бета-тестирования, которые помогали нам проверять работу более быстрого кода «в боевых условиях». Ваши отзывы и подробные комментарии помогли нам сделать быстрый код доступным для всех пользователей Метрики 🙌
Быстрый код подключается автоматически только при условии, что на сайте у вас установлена актуальная версия счётчика.
Как проверить версию счётчика: если в коде Метрики у вас на сайте есть строчка tag.js, это актуальный код. А если в нём встречается watch.js — значит, у вас устаревшая версия. Как посмотреть код счётчика на сайте, описано в Справке.
Если у вас — устаревшая версия кода, рекомендуем заменить её на актуальную. В устаревшей версии watch.js не поддерживаются новые возможности Метрики, в том числе и более быстрая загрузка серверной части кода. Актуальная версия кода Метрики есть в настройках счётчика — просто скопируйте этот код и установите его на все страницы сайта вместо старого кода.
Чтобы ещё больше ускорить код Метрики, мы готовим и другие обновления. Оставайтесь на связи — подписывайтесь на наши новости, чтобы ничего не пропустить!
Скрипт метрики (tag.js) съедает процессорное время при загрузке
Обнаружил что при загрузке страницы скрипт Яндекс.Метрики что-то очень активно обрабатывает. Длится это
400 мс. Проверял на 2х сайтах.
Небольшое копание вглубь показывает (насколько я понял) что для работы вебвизора либо аналитики форм метрика индексирует весь DOM и именно на это уходит очень много ресурсов.
Кто-то сталкивался с подобной проблемой? Совсем отказываться не хочется, но и людей с мобильными браузерами жалко.
В большинстве случаев при правильной установке код Метрики не должен существенно влиять на скорость загрузки сайта. Рекомендуем проверить, что код счётчика Метрики установлен так, что он загружается полностью асинхронно от контента сайта.
Помимо этого, советуем обращать внимание именно на те показатели отчёта Google PageSpeed Insights, которые напрямую связаны с качеством взаимодействия конкретно с вашим сайтом. Например, для контентных сайтов важно время до отрисовки, а для сайтов с интерактивными элементами — время загрузки для взаимодействия.
Также напомним, что по утверждению самих разработчиков сервиса рекомендации по оптимизации (в том числе и рекомендации по работе со сторонним кодом) не являются факторами, которые напрямую влияют на общий показатель производительности сайта.
Сейчас мы работаем над созданием новой версии легкого кода счетчика, который будет работать быстрее. В настоящее время проводится закрытое тестирование: https://yandex.ru/blog/metrika/otkryvaem-zapis-na-testirovanie-novogo-koda-schetchika
Следите за новостями;)
Сейчас мы готовим большое обновление Вебвизора 2.0, в котором будет исправлено множество проблем. Мы постараемся учесть и Вашу проблему.
320кб минифицированного файла.
страница со счетчиком становится доступной пользователю почти на секунду позже, чем страница без счетчика http://joxi.ru/823RRZZcJNl9Rm
Для моб версий сайтов это достаточно негативно сказывается на пользовательском опыте.
У нас файлы скриптов spa-приложения, написанного на реакте, с редаксом, роутингом, со всеми зависимостями меньше размером чем один скрипт счетчика метрики.
Команда метрики не думала по этому поводу огромного размера скрипта? Может для мобильных устройств нужно сделать скрипт поскромнее в размерах?
320кб минифицированного файла.
страница со счетчиком становится доступной пользователю почти на секунду позже, чем страница без счетчика http://joxi.ru/823RRZZcJNl9Rm
Для моб версий сайтов это достаточно негативно сказывается на пользовательском опыте.
У нас файлы скриптов spa-приложения, написанного на реакте, с редаксом, роутингом, со всеми зависимостями меньше размером чем один скрипт счетчика метрики.
Команда метрики не думала по этому поводу огромного размера скрипта? Может для мобильных устройств нужно сделать скрипт поскромнее в размерах?
Мы понимаем важность корректной работы Вебвизора и прилагаем максимум усилий для скорейшего решения вопроса, однако на поиск окончательного решения может потребоваться длительное время.
На смартфоне в Mozilla в адаптивной версии сайта наблюдаю замедление загрузки сайта, появляется окно ошибки сценария \»Внимание: Сценарий не отвечает\» и ссылка на сценарий https://mc.yandex.ru/metrika/tag.js:66
В Chrome ошибки сценария нет. Тормоза с загрузкой скрипта есть.
Добрый день, присоединяюсь к просьбе что-нибудь сделать с кодом Метрики:
На смартфоне в Mozilla в адаптивной версии сайта наблюдаю замедление загрузки сайта, появляется окно ошибки сценария «Внимание: Сценарий не отвечает» и ссылка на сценарий https://mc.yandex.ru/metrika/tag.js:66
В Chrome ошибки сценария нет. Тормоза с загрузкой скрипта есть.
По возможности опишите подробно шаги, при которых наблюдается ситуация, а также приложите скриншоты и скринкасты, подтверждающие тормоза.
И после этого вылетает программа SOCPUBLIC AGENT
По возможности опишите подробно шаги, при которых наблюдается ситуация, а также приложите скриншоты и скринкасты, подтверждающие тормоза.
По возможности опишите подробно шаги, при которых наблюдается ситуация, а также приложите скриншоты и скринкасты, подтверждающие тормоза.
пожалуйста, пришлите примеры ситуаций в поддержку: https://yandex.ru/support/metrika/troubleshooting.html
По возможности опишите подробно шаги, при которых наблюдается ситуация, а также приложите скриншоты и скринкасты, подтверждающие тормоза.
постоянно стал выдавать это сообщение и подвисать, что делать?
По возможности опишите подробно шаги, при которых наблюдается ситуация, а также приложите скриншоты и скринкасты, подтверждающие тормоза.
«,»replyTo»:»5d38b45e1c76670031159a7d»,»replyToName»:»Вова из Коврова»>>»>
tag.js поддерживает Вебвизор 2.0 и новые (и старые тоже) методы JS API.
Метрика сжирает 2 054 ms при загрузки сайта.
Метрика сжирает 2 054 ms при загрузки сайта.
У нас основной пожиратель времени по загрузке и выполению js, это YM:
если верить этому измерению, то код YM замедляет нам страницу на 1+ с, что конечно очень много в современных реалиях!
Сайт на Битриксе note-store.ru. И что делать? Никакого решения в интернете не нашел.
Аналогичная ситуация с кодом Я.Метрики, которая замедляет скорость загрузки страницы.
У нас основной пожиратель времени по загрузке и выполению js, это YM:
https://yadi.sk/i/sdgyzx1WkARKVg
https://yadi.sk/i/tm1jof6CjvC9vg
если верить этому измерению, то код YM замедляет нам страницу на 1+ с, что конечно очень много в современных реалиях!
Сайт на Битриксе note-store.ru. И что делать? Никакого решения в интернете не нашел.
здравствуйте. Посмотрел ваш сайт. Вы так и не нашли решение этой проблемы?
сек задержка только из-за метрики. Пока проблему решил временно: Отключить визор и вставить устаревший код счетчика асинхронно. Результат конечно радует, но без визора. Подпишусь на эту страницу, может когда нибудь эта проблема решиться.
сек задержка только из-за метрики. Пока проблему решил временно: Отключить визор и вставить устаревший код счетчика асинхронно. Результат конечно радует, но без визора. Подпишусь на эту страницу, может когда нибудь эта проблема решиться.
Вебвизор 2.0 включен.
Я так понимаю, что решить проблему можно только пожертвовав Вебвизором?
Тоже временно перешел на старый код метрики со старым вебвизором.
Долшо до абсурдного, что Явебмастере появляются критические предупреждения о медленной работе сайта. Т.е. Яндекс жалуется, на свои же скрипты.
Да! Новый вебвизор сканирует весь DOM.
Тоже временно перешел на старый код метрики со старым вебвизором.
Долшо до абсурдного, что Явебмастере появляются критические предупреждения о медленной работе сайта. Т.е. Яндекс жалуется, на свои же скрипты.
Попробуем старый код, спасибо за идею:)
Кто-то ка-то решил проблему? 🙂
Кто-то ка-то решил проблему? 🙂
В большинстве случаев при правильной установке код Метрики не должен существенно влиять на скорость загрузки сайта. Проверьте, что код счётчика Метрики установлен так, что он загружается полностью асинхронно от контента сайта.
Напомним, что по утверждению самих разработчиков сервиса рекомендации по оптимизации (в том числе и рекомендации по работе со сторонним кодом) не являются факторами, которые напрямую влияют на общий показатель производительности сайта.
В некоторых случаях может наблюдаться увеличение времени загрузки для счетчиков, у которых включен Вебвизор 2.0. Специфика его работы требует полной обработки контента сайта. Если ваш сайт обладает множеством контентных элементов, вы можете переключиться на Вебвизор 1.0, выбрав галочку \»Устаревший код счетчика\» в Настройках
https://yandex.ru/support/metrica/general/counter-general.html#other. Не забудьте переустановить код счетчика Метрики на всех страницах сайта.
Мы постоянно работаем над ускорением загрузки кода, и в следующих обновлениях кода счётчика представим более лёгкую версию.
02.02.2020 UPD: М ы работаем над новой версией кода счетчика, который будет работать быстрее. Записывайтесь на закрытое тестирование: https://yandex.ru/blog/metrika/otkryvaem-zapis-na-testirovanie-novogo-koda-schetchika
На данный момент в тестирование, в первую очередь, мы сможем взять счетчики с большим объемом трафика (
10 000 посетителей в неделю), т.к. на таких счетчиках можно быстрее протестировать работу нового кода.
В большинстве случаев при правильной установке код Метрики не должен существенно влиять на скорость загрузки сайта. Проверьте, что код счётчика Метрики установлен так, что он загружается полностью асинхронно от контента сайта.
Напомним, что по утверждению самих разработчиков сервиса рекомендации по оптимизации (в том числе и рекомендации по работе со сторонним кодом) не являются факторами, которые напрямую влияют на общий показатель производительности сайта.
В некоторых случаях может наблюдаться увеличение времени загрузки для счетчиков, у которых включен Вебвизор 2.0. Специфика его работы требует полной обработки контента сайта. Если ваш сайт обладает множеством контентных элементов, вы можете переключиться на Вебвизор 1.0, выбрав галочку «Устаревший код счетчика» в Настройках
https://yandex.ru/support/metrica/general/counter-general.html#other. Не забудьте переустановить код счетчика Метрики на всех страницах сайта.
Мы постоянно работаем над ускорением загрузки кода, и в следующих обновлениях кода счётчика представим более лёгкую версию.
02.02.2020 UPD: Мы работаем над новой версией кода счетчика, который будет работать быстрее. Записывайтесь на закрытое тестирование: https://yandex.ru/blog/metrika/otkryvaem-zapis-na-testirovanie-novogo-koda-schetchika
На данный момент в тестирование, в первую очередь, мы сможем взять счетчики с большим объемом трафика (
10 000 посетителей в неделю), т.к. на таких счетчиках можно быстрее протестировать работу нового кода.
Как устранить влияние Яндекс.Метрики на показатели Google PageSpeed Insights
Сервис Google PageSpeed Insights является одной из «пузомерок» с помощью которых вебмастера проверяют скорость работы сайта. Этот сервис анализирует контент веб-страницы и советует, как ускорить ее загрузку. В идеале все хотят видеть зеленый индикатор со значением 100.
Но как бы тщательно вы не оптимизировали свой сайт сразу после внедрения счетчиков посещений будь то Яндекс.Метрика, LiveInternet или Google Analytics индекс PageSpeed проседает на пару десятков пунктов.
Примеры показателей PageSpeed для моего тестового сайта:
До внедрения Яндекс.Метрики
После установки счетчика Яндекс.Метрики
Конечно, счетчик я устанавливал «правильно», то есть использовал современный код, который считается более быстрым и асинхронным, а так же размещал его в конце сайта.
По-совести говоря, счетчик Яндекс.Метрики никак не влияет на скорость загрузки сайта. Но несмотря на то, что код Яндекс.Метрики стал намного быстрее, Google PageSpeed всё равно ругается на него благим матом.
Как снизить влияние Яндекс.Метрики на скорость загрузки сайта
Чтобы нивелировать влияние стороннего JavaScripts кода, будет разумно отложить загрузку счетчика на несколько секунд. То есть будем загружать его только после полной загрузки сайта браузером пользователя. В таком случае он точно не будет влиять на скорость отображения контента страницы.
Например, можно использовать следующий код:
Предложенное авторами решение подойдет для всех сайтов. Но если вы используете WordPress, то проще всего воспользоваться бесплатным плагином True Lazy Analytics. Который кроме упомянутой мной Яндекс.Метрики умеет добавлять на WordPress сайт счетчики LiveInternet и Google Analytics.
Основная цель плагина — подключить системы аналитики без снижения баллов в тесте Google PageSpeed Insight.
Внешний вид плагина True Lazy Analytics
Вам достаточно указать только номер вашего счетчика Яндекс.Метрики и перед закрывающим тегом