Всем привет! Иногда бывает, что счётчики Google Analytics, Яндекс.Метрика и счётчик mail.ru тормозят загрузку основной страницы. Написал js скрипт для того, чтобы это избежать.
jQuery(document).ready(function($) {
$.ajaxSetup({cache : true});
// Данные для Google Analytics
window.dataLayer = [];
window.gtag = function() {
window.dataLayer.push(arguments);
}
$.getScript(
// !! ОБЯЗАТЕЛЬНО ЗАМЕНИТЕ ИДЕНТИФИКАТОР GOOGLE ANALYTICS "G-41BWRDZLG5" НА СВОЙ !!
'https://www.googletagmanager.com/gtag/js?id=G-41BWRDZLG5',
function() {
gtag('js', new Date());
gtag('config', 'G-41BWRDZLG5');
}
);
// Данные для Яндекс.Метрики
window.ym = function() { (window.ym.a||[]).push(arguments); }
window.ym.l = 1*new Date();
$.getScript(
'https://mc.yandex.ru/metrika/tag.js',
function() {
// !! ОБЯЗАТЕЛЬНО ЗАМЕНИТЕ ИДЕНТИФИКАТОР ЯНДЕКС МЕТРИКИ "91531653" НА СВОЙ !!
ym(91531653, "init", {
webvisor:true,
trackLinks:true,
clickmap:true,
accurateTrackBounce:false
}
);
}
);
// Данные для top.mail.ru
var _tmr = window._tmr || (window._tmr = []);
_tmr.push({
// !! ОБЯЗАТЕЛЬНО ЗАМЕНИТЕ ИДЕНТИФИКАТОР MAIL.RU "2601331" НА СВОЙ !!
id: "2601331",
type: "pageView",
start: (new Date()).getTime()
});
$.getScript('//top-fwz1.mail.ru/js/code.js');
});
Известная бага счётчика Яндекс.Метрика — замедление сайта, поэтому скачал его локально в папку [wordpress_folder]/metrika
и добавил в задачу в crontab для обновления этого файла каждый час, Затем заменил https://mc.yandex.ru/metrika/tag.js
в скрипте выше на /metrika_tag.js
.
@hourly curl -s https://mc.yandex.ru/metrika/tag.js -o [wordpress_folder]/metrika_tag.js
Источник вдохновения статья Yandex Metrika: Сторонний код заблокировал основной поток. Не забудьте поменять идентификаторы счётчиков и проверить, что tag.js
доступен по адресу [ваш сайт]/metrika/tag.js
, если вы решили воспользоваться ускорением загрузки счётчика.
Чтобы добавить загрузку счётчиков в WordPress, необходимо положить его содержимое в файлик wordpress/wp-content/themes/[ваша_тема]/js/counters.js
и добавить следующий код в wordpress/wp-content/themes/[ваша_тема]/functions.php
:
function enqueue_counter() {
// Регистрируем скрипт
wp_register_script('counters', get_template_directory_uri() . '/js/counters.js', array('jquery'), false, true);
// Загружаем скрипт
wp_enqueue_script('counters');
}
add_action('wp_enqueue_scripts', 'enqueue_counters');
Я использую проверку, что пользователь не авторизован, зачем мне отслеживать самого себя:
function enqueue_counter() {
// Регистрируем скрипт
wp_register_script('counters', get_template_directory_uri() . '/js/counters.js', array('jquery'), false, true);
// Загружаем скрипт, если пользователь неавторизован
if (!is_user_logged_in()) {
wp_enqueue_script('counters');
}
}
add_action('wp_enqueue_scripts', 'enqueue_counters');