Клуб пользователей блока «Поделиться»

Вопрос по Yandex Share и вызовов им Метрики

Имеется страница блога со списком статей (как на хабре :).

Под каждой статьей кнопка "поделиться", при клике на которую отображается блок с кнопками (dysplay:none -> display:block).

В предыдущей версии Yandex Share для блока кнопок задавался класс "yashare-auto-init".

В новой же версии (2-ой) все блоки уже проинициализированы (там даже класс добавляется ya-share2_inited) и для каждого из них вызывается скрипт Метрики. В результате при загрузке страницы длинная "простыня" из вызовов метрики (в браузере: Dev Tools -> Network -> Images)

Можно ли во 2-й версии сделать так, чтобы содержимое блока "Поделиться" инициализировалось только во время его отображения? Или отключить подгрузку Метрики (если она и так есть на сайте)?

P.S.:

В скрипте yastatic.net/share2/share.js нашел участок

if(window.Ya&&"Metrika2"in window.Ya)
    a(this._id);
else
    {var r=(0,o.injectJs)(" https://mc.yandex.ru/metrika/tag.js ");

Т.е. по сути если Метрика есть, то скрипт не должен инжектиться. Но почему-то инжектится, причем в каждый блок "Поделиться".

7 комментариев
Сергей Тощилин
Сотрудник Яндекса21 декабря 2020, 16:53
Добрый день!


Прошу прощения за длительное ожидание, разбирались, в чем проблема и как можно помочь


> В скрипте yastatic.net/share2/share.js нашел участок
Да, действительно, мы пытаемся проверять, есть ли уже на странице Метрика. Вероятно, во время инициализации каждого из блоков, Метрика еще не успевает загрузиться и грузится дополнительно.


Варианты решения следующие:
- Можно добавить в тег <script> атрибут defer. В этом случае скрипт дождется, пока вся страница будет отрендерена, после чего выполнится. Есть вероятность, что к этому времени метрика, которая есть у вас на сайте, успеет загрузиться.
- Также, как вариант, можно посмотреть, где в DOM-дереве находится код, который вызывает вашу Метрику и код, который грузит скрипт share.js. Если второй находится раньше, можно перенести ниже, тогда тоже есть вероятность, что Метрика будет успевать инициализироваться.


Со своей стороны добавим проверку "Metrika" in window.Ya наряду с "Metrika2" in window.Ya, чтобы использовать версию метрики v1, если вдруг она уже есть на сайте. 
Также попробую добавить таймер, который будет выполнять проверку не сразу, а спустя какое-то время, чтобы дать еще больше возможности загрузиться существующей Метрике.
Сергей Тощилин
Сотрудник Яндекса15 января 2021, 14:30
Добрый день!
Добавили логику по детекту первой метрики на странице, а также таймер на случай, если метрика, которая подключается на страницу, еще не успела загрузиться
Та же история, сейчас в 2023. Все что можно перепробовал, но так и получаю несколько десятков вызовов к https://mc.yandex.ru/watch/.../1... - по одному на каждую кнопку "Поделиться" (на странице много объектов со своими уникальными линками).
Как это лечить?
Сергей Тощилин
Сотрудник Яндекса27 февраля 2023, 12:02
Brmly,
добрый день!


Мы добавляли некоторую логику, которая позволяет не делать лишние запросы за самим скриптом Метрики. То есть в большинстве случаев скрипт сможет определить, есть ли (или "будет ли") на странице Метрика (первая или вторая), и не будет лишний раз ее грузить. Это относится только к самому коду Метрики (https://mc.yandex.ru/metrika/watch.js).


То, что вижу из вашего сообщения, это, вероятно, непосредственно запись визита в Метрику. Она записывается для каждого рендера, происходит асинхронно и на производительность сайта не влияет. Поскольку блоки не знают про существование друг друга на странице и доступа к "чужим" запросам не имеют, реагировать на запись визита другим таким же блоком, они не могут. Так происходит для всех сайтов, где есть несколько "приложений", которые используют Метрику, это нормально, тут ничего дополнительно делать не нужно.


Если же есть переживание по поводу того, как Метрика склеит визиты для нескольких запросов — с этим лучше либо обратиться к Метрике, либо собственноручно убедиться в правильности/неправильности проклеивания непосредственно на сайте Метрики в разделе "Блок Поделиться" для вашего счетчика. Впрочем, лично я думаю, что Метрика давно научилась клеить такие визиты в один.
Сергей Тощилин,
Да, я понимаю, что запросы асинхронные и не сильно сказываются на загрузке страницы, но как-то все же хотелось бы более красивую картину иметь, чем десятки запросов к tag.js.
Никакие ухищрения с Метрикой не помогли. Куда только код не двигаю - кнопки шаринга все равно заставляют грузиться этот tag.js.
Может быть какой-то ключик сделать, чтобы вообще любое взаимодействие с Метрикой вырубить для шаринга?
И так-то с скорее всего придется от шаринга яндекса отказаться из-за отсутствия ФБ и инсты, да тут еще и это странное поведение с Метрикой;(
https://pasteboard.co/h4Jn3hmrzIUf.png
Обновлено 14 марта 2023, 10:38
Сергей Тощилин
Сотрудник Яндекса16 марта 2023, 11:09
Brmly,
Боюсь, тут ничего нельзя сделать. Так устроена Метрика — на каждый визит свой запрос.
Сергей Тощилин,
, ок, спасибо большое за консультацию!