Вставка пользовательского скрипта после заголовка

Привет, друзья,

У меня уже работает официальный плагин Discourse для рекламы, и объявления отображаются на моём сайте. Вопрос в следующем: что делать, если кто-то захочет разместить произвольный скрипт или объявление, которое не входит в стандартный набор Discourse?

Я попробовал перейти в Настройки → Тема → Редактировать HTML/CSS → После заголовка. Я вставил туда этот блок скрипта, перезагрузил сайт, но ничего не увидел. На самом деле, скрипт отображается только тогда, когда я помещаю его между тегами и , из-за чего объявление появляется в самом низу страницы. Однако позиция «После заголовка» — самая подходящая, но скрипт там не загружается. Обратите внимание, что в этом скрипте используется атрибут async.

Я не понимаю, зачем нужен такой сложный плагин, если достаточно просто скопировать и вставить HTML-блок? Даже Google предоставляет свой скрипт, который можно просто вставить после заголовка. Именно так обычно поступают на обычных веб-сайтах, но в Discourse это не работает, поскольку что-то блокирует выполнение скрипта. Это не CSP, так как я уже добавил фильтры https: и inline-code, которые должны разрешать выполнение любого JS-кода, начинающегося с «https». Вот пример кода для рекламы Google:

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- Ad 1 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-3368174556925488"
     data-ad-slot="4362547659"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>

Попробуйте вручную заставить этот код работать без использования плагина AdSense и разместить его в теме после заголовка.

#plugin:advertising

Обновление: Похоже, ответ — это «Домашняя реклама» (House Ads). Однако даже при размещении некоторых скриптов в разделе «Домашняя реклама» объявления не отображаются. Похоже, Discourse что-то блокирует, ведь если я размещу тот же скрипт на любой HTML-странице, он будет работать.

Теперь вы можете попробовать это с помощью компонента темы. Вы уже пробовали?

Спойлер: реклама не будет обновляться, потому что Discourse — это одностраничное приложение. Если AdSense изменился и теперь может автоматически обновлять рекламу без использования adsbygoogle.push({}), то это новость для меня.

На самом деле я просто использовал iframe. Я вставил iframe в House Ads, и это сработало. Рекламные объявления от Google Adsense обновляются при перезагрузке страницы.

Единственный недостаток в том, что если я хочу разместить партнерскую рекламу от House Ads внизу страницы, такой возможности нет. Я могу разместить её только вверху списка тем или между ними. Было бы здорово, если бы добавили возможность размещения внизу, что дало бы нам больше свободы.

Однако Google не распознает тематику вашего форума и будет показывать вашим посетителям рекламу, которая гораздо менее релевантна, что полностью снизит вашу выручку.

Они не обновятся, если вы просто перейдёте на другую страницу.

Пожалуйста, предоставьте ссылку на это утверждение.

Для Google AdSense и других рекламных ботов, сканирующих сайт для определения контекста, не должно быть никакой разницы, показывается ли реклама в теге IFRAME или в теге SCRIPT.

С нетерпением жду, конечно, ссылок на документацию разработчиков Google по этому вопросу!

Спасибо.

Когда реклама AdSense показывается внутри вложенного iframe, функции безопасности браузера не позволяют рекламе определять URL или домен страницы для таргетинга. В результате показывается менее релевантная реклама, а доход от рекламы оказывается ниже возможного.

Да, но это лишь нюанс, а не полная картина того, как формируется контекст рекламы.

Все сайты, на которых работает AdSense, сканируются краулером Google Adsense, поэтому серверы Google показывают рекламу в контексте сайта на основе данных, полученных от краулера.

Это означает, что на техническом сайте, обсуждающем Ruby on Rails, будут показываться релевантные этой тематике объявления (если они доступны) на уровне всего сайта.

Однако на уровне отдельной страницы, конечно, возникает проблема с контекстом во вложенных тегах IFRAME.

Не все рекламные теги, размещённые в тегах IFRAME, являются вложенными.

Вот пример вложенных тегов IFRAME:

<iframe src="http://www.w3schools.com" width="1000" height="1000" id="frame1" name="frame1">
   <iframe width="200" height="200" src="http://www.bing.com" id="frame2" name="frame2">
   </iframe>
</iframe>

Честно говоря, я редко сталкивался с этим на практике; и когда мы проверяли это (что мы делали много раз за последние 15 лет или около того), такая проблема возникала только с тегами passback.

Надеюсь, это поможет.

Вы хотели ссылку. Это не то, что они имели в виду под «вложенностью». Это ясно из заголовка раздела «Как разместить рекламу AdSense внутри iFrame?». Ещё в старые времена использование iframe уже было нарушением правил.

Я пробовал все возможные уловки с AdSense с 2007 года и написал первый плагин Discourse для AdSense вместе с @michaeld.

Похоже, у нас разный опыт. Хорошо, что вам удалось это сделать. Тем, кто захочет попробовать: я не буду тут утешать вас, когда всё пойдёт не так.

Чтобы быть откровенным, за последнее десятилетие мы показали более 1 000 000 000 объявлений и уже много лет не используем AdSense напрямую (у нас много причин не любить AdSense). Поэтому давайте посмотрим на эту «размещаемую рекламу» с высокого уровня, с точки зрения того, что происходит сейчас в сфере дисплей-рекламы.

Контекст (релевантность)

Большинство рекламных сетей, которые размещают рекламу прямой покупки, например IDN Technet или другие контекстно-ориентированные сети, не сканируют сайты на предмет контента. Они презентуют сайт рекламодателям и, например, говорят: «Эй, это Discourse meta, у них отличный контент по всем темам: разработка, Ruby, JavaScript и так далее». Мы очень их рекомендуем.

Затем они предоставляют издателю запись в файле ads.txt, и они показывают рекламу из своей сети издателю на основе категории сайта и подкатегорий, не используя сканер (как сканер AdSense).

Сейчас это правило, а не исключение.

То же самое касается видеоконтента и видеорекламы. Наш видео-партнер продает рекламу для нашего сайта на основе контекста сайта, в буклете, а не на основе «сканирующего робота», ищущего контекст.

Фактически, мы уже много лет не показываем рекламу от каких-либо сетей, которые полагаются на сканер для классификации сайта; особенно для пассивных тегов (passback). Пассивные теги всегда работают лучше всего, когда контекст жестко задан в рекламной сети, а не получен от сканера, выполняющего классификацию.

Пассивные теги (Passbacks)

Всегда сложно получить релевантный контекст из пассивных рекламных тегов.

Мой опыт издателя, показавшего за годы более миллиарда дисплей-объявлений, заключается в том, чтобы не использовать рекламные сети, которые формируют контекст из сканера для пассивных сетей.

Лучше, исходя из моего опыта публикации рекламы за последнее десятилетие, использовать пассивные теги на основе жестко заданного контекста. Например, если у меня технический сайт и я хочу показывать пассивные объявления индийской аудитории, я буду использовать пассивные теги, интересные технарям из Индии.

AdSense

Мы использовали AdSense примерно 15–10 лет назад, и за последнее десятилетие я не могу вспомнить, когда мы показывали AdSense напрямую. На мой взгляд, AdSense — не лучший способ генерировать доход.

AdSense формирует контекст с помощью своего сканера, поэтому в целом, если ваш тег не является вложенным тегом IFRAME (пассивный тег IFRAME внутри тега iFRAME), вы будете в порядке с тегами IFRAME.

Некоторые преимущества тегов IFRAME

  • Браузер заранее выделяет место для встроенного фрейма и учитывает это при рендеринге документа.

  • Iframes реализуют политику кросс-доменного происхождения, что может быть полезно для подгрузки сайтов/контента/рекламы с других доменов; они также относительно безопасны, поэтому большинство решений веб-рекламы основаны на iframes.

  • Если контент нужно загрузить сначала, а затем рекламу, это можно сделать с помощью Iframe.

  • Iframe помогает улучшить производительность.

  • Iframe загружается независимо от других компонентов на странице.

  • Если у пользователя отключен JavaScript, iframes будут работать.

  • Тег iframe имеет атрибуты “height” и “width,”, что позволяет дизайнеру свободно выбирать размеры и форматы, например 300×250, 728×90, в зависимости от размера рекламы.

  • Тег iframe может появляться в любом месте страницы, и при желании можно добавить несколько iframes.

Некоторые недостатки тегов IFRAME

  • Теги Iframe могут вызывать проблемы с доступностью.

  • Теги Iframe не поддерживаются всеми браузерами и могут отображаться неправильно или даже показывать пустое место.

  • Ключевая причина использования iframe в веб-рекламе — безопасность при кросс-доменной поддержке, но производительность не идеальна.

  • Many handheld devices не видят iframes.

  • Известно, что Iframe иногда снижает SEO.

Преимущества и недостатки JS-тегов:

  • Можем добавить позже, если кому-то интересно.

Предложение и спрос

Сейчас 2020 год. Количество веб-сайтов, поставляющих рекламу, выросло экспоненциально с 2000 года. Предложение рекламы значительно превысило спрос. Это означает, что для большинства сайтов, о которых идет речь здесь, когда говорят о настройке рекламы на Discourse, маловероятно получение премиального рекламного трафика, если у них нет сильного спроса и устоявшейся нишевой аудитории.

Каждый технарь и его сестра могут публиковать рекламу на своих блогах и форумах в 2020 году, и они это делают. Это означает, что предложение будет продолжать расти быстрее спроса на дисплей-рекламу в будущем. У большинства нишевых сайтов будут трудности с генерацией рекламного дохода от нового сайта, пока они не станут хорошо устоявшимися.

Discourse и сканеры

Discourse не отдает SPA сканерам, поэтому это означает, что рекламные боты-сканеры также не увидят SPA, и все последствия этого, насколько мне известно, не были «третьей стороной, объективно» проанализированы (независимой третьей стороной).

Резюме

Я думаю, что подавляющее большинство новых пользователей Discourse, использующих Discourse как JavaScript SPA, не получат значительного дохода от сетей дисплей-рекламы (таких как AdSense). Это особенно актуально в 2020 году, когда рекламные бюджеты рекламодателей значительно сократились из-за пандемии. Кроме того, предложение высоко, а спрос низок.

Если вы показываете дисплей-рекламу, у вас возникнут проблемы на всех SPA из-за того, как страницы «не перезагружаются», и это проблема как для JS-тегов, так и для тегов IFRAME; нужны лучшие плагины для оптимизации всех типов сторонних тегов в SPA.

Заключение

Мы не показываем AdSense уже много лет и не планируем делать это в будущем, поэтому вопрос о том, как AdSense получает контекст, для нас неактуален. Для других лучше использовать работающие теги IFRAME, чем рвать волосы на голове, пытаясь бороться с проблемами SPA при показе сторонних скриптовых тегов и головной болью CORS, на мой взгляд.

Сначала ползай, потом ходи, а потом беги.

Надеюсь, это поможет.

Берегите себя.


PS: Извините за опечатки, моя жена ждет у двери, и мы хотим пойти по магазинам, пока не пошел дождь!

Это не для Google. Как обсуждалось ранее, речь идет об партнерских рекламных блоках, не связанных с Google, Amazon и т. д. Для Google я уже использую встроенный плагин AdSense. Мои рекламные объявления Google уже работают и адаптируют контент рекламы под интересы посетителей. Кроме того, через AdSense я могу контролировать тематику рекламы.

Мой вопрос касается статического партнерского объявления, которое всегда будет одинаковым. Поэтому я хотел использовать внутренние объявления (House ads), которые созданы именно для таких целей. Однако это ограничивает меня в выборе места для размещения рекламного блока.

В настоящее время я просто использовал iframe и разместил его в футере HTML-шаблона моей темы, и это работает отлично. Единственная проблема в том, что iframe отображается для всех групп пользователей, включая тех, у кого высокий уровень доверия. Раньше же я мог через менеджер рекламы в Discourse настроить так, чтобы рекламные блоки не показывались пользователям с уровнем доверия 3 и выше.