Я включил необходимый тег сценария в глобальный шаблон. Файл html, который содержит все динамические c страницы для моего SPA (написано в Sapper / Svelte).
www.ensueco.com
<script data-ad-client="ca-pub-XXXXXXXXXXXXXXXX" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
Если я загружаю страницу индекса, автоматически загружается автоматическая реклама, но когда я нажимаю на ссылку, переходящую на другую страницу / статью, маршрутизация на стороне клиента изменит контент в окне контента, но не будет воссоздан новые сгенерированные объявления.
Если я открываю данную статью / подстраницу в качестве начальной загрузки страницы, она также отлично загружает объявления из авторекламы, но при нажатии кнопки «домой» в главной навигации, возвращающейся на главную страницу, новые объявления не загружаются в окно контента.
В: Как попросить сценарий adsbygoogle снова выполнить при маршрутизации на стороне клиента, чтобы заполнить автоматическую рекламу на всех страницах?
В настоящее время у меня есть скрипт, который подписывается на события изменения маршрута и пересылает эту информацию в Google Analytics:
page.subscribe(({ path, params, query }) => {
gtag("config", "GOOGLE_ANALYTICS", { page_path: path });
});
Но не уверен, смогу ли я сделать что-то подобное в этом, чтобы попросить adsbygoogle выполнить снова? (приведенный ниже код был протестирован и не работает)
page.subscribe(({ path, params, query }) => {
// (window.adsbygoogle = []).push({
// google_ad_client: "ca-pub-XXXXXXXXXXXXX",
// enable_page_level_ads: true,
// tag_partner: "site_kit"
// });
gtag("config", "GOOGLE_ANALYTICS", { page_path: path });
});
Приведенный выше код при тестировании дает мне следующее:
Я получаю эту ошибку при изменении маршрута:
Uncaught
O {message: "adsbygoogle.push() error: Only one 'enable_page_level_ads' allowed per page.", name: "TagError", pbr: true, stack: "TagError: adsbygoogle.push() error: Only one 'enab…esyndication.com/pagead/js/adsbygoogle.js:58:409)"}
И если я удаляю enable_page_level_ads, я получаю это:
Uncaught
O {message: "adsbygoogle.push() error: All ins elements in the … with class=adsbygoogle already have ads in them.", name: "TagError", pbr: true, stack: "TagError: adsbygoogle.push() error: All ins elemen…js/adsbygoogle.js:185:25)↵ at <anonymous>:1:38"}
Итак, в основном мне нужно выполнить какой-то метод, который создает новые теги (на основе автоматической рекламы), чтобы я мог выполнить этот метод и заполнить все новые элементы ins. Я думаю.
Спасибо
ДОПОЛНИТЕЛЬНЫЕ МЫСЛИ
Из того, что я понимаю, скрипт загружается после SSR (рендеринг на стороне сервера) почему содержимое HTML, CSS и JS с моего сайта уже загружено после выполнения сценария adsbygoogle.
Из POW для разработчиков я бы ожидал, что можно будет очистить массив adsbygoogle и повторно инициализировать объявления с помощью скрипта Google, чтобы JS сканировал теперь динамически загружаемый контент и на основе новый window.pushed
URI (window.history.pushState()
) и разместить новые объявления, как если бы они были загружены после SSR этой страницы.