Мои текущие настройки:
В index.html я загружаю скрипт AdSense глобально для всех страниц:
Код: Выделить всё
[*]
window.onload = () => {
if (navigator.userAgent !== 'ReactSnap') {
const script = document.createElement('script');
script.async = true;
script.src = 'https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-XXXXXXX';
script.crossOrigin = 'anonymous';
document.body.appendChild(script);
}
};
Проблема:
Даже на страницах с нулевым количеством отображаемых рекламных блоков PageSpeed по-прежнему сообщает о сценарии AdSense как о ресурсе с коротким сроком службы кэша. Удалить теги со страницы недостаточно — сценарий все равно загружается, поскольку он внедрен глобально в index.html.
Чего я хочу:
Я хочу, чтобы сценарии AdSense загружались только на страницах, которые фактически отображают рекламный блок, чтобы страницы без рекламы были полностью чистыми и не помечались PageSpeed.
Мое предложение решение:
Переместите внедрение скрипта из index.html в сам рекламный компонент, внедрив его один раз при монтировании первого рекламного компонента:
Код: Выделить всё
useEffect(() => {
if (navigator.userAgent === 'ReactSnap') return;
if (!document.querySelector('script[src*="adsbygoogle.js"]')) {
const script = document.createElement('script');
script.async = true;
script.src = 'https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-XXXXXXX';
script.crossOrigin = 'anonymous';
document.head.appendChild(script);
script.onload = () => {
(window.adsbygoogle = window.adsbygoogle || []).push({});
};
} else {
(window.adsbygoogle = window.adsbygoogle || []).push({});
}
}, [adSlot]);
- Безопасен ли и надежен ли этот подход для AdSense? Известны ли проблемы с динамическим внедрением файлаadsbygoogle.js внутри компонента React, а не index.html?
- Может ли это привести к неправильной загрузке рекламы в некоторых случаях, например, если несколько рекламных компонентов монтируются почти одновременно?
- Есть ли лучший шаблон для условной загрузки AdSense только на страницах, которые действительно используют рекламу в React SPA?
Подробнее здесь: https://stackoverflow.com/questions/798 ... g-ad-units
Мобильная версия